質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Facebook

Facebookは、実名登録制のSNS(ソーシャル・ネットワーキング・サービス)です。開発者用のデベロッパーサイトが存在し、一般ユーザーによるFacebook向けアプリケーション開発が可能です。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

1回答

2126閲覧

【Objective-C】Facebook SDKを用いたログイン

katsuo77

総合スコア28

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Facebook

Facebookは、実名登録制のSNS(ソーシャル・ネットワーキング・サービス)です。開発者用のデベロッパーサイトが存在し、一般ユーザーによるFacebook向けアプリケーション開発が可能です。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2015/01/23 14:38

質問を開いていただきありがとうございます。

Facebook SDKを使ったログインをアプリ内で実装しておりまして、シミュレータや自分の持っている実機でのテストはうまくいったのですが、他の実機でもテストしてみたところどうも上手くいかず、皆様のお知恵を借りられればと思い質問させていただきました。

【やりたいこと】
アプリ内でボタンをタップした際にFacebook認証を行い、得られたユーザー情報を使ってログイン処理をする。

【やったこと】
FacebookSDK.frameworkをプロジェクトに突っ込む

以下のコードを書く。

lang

1//AppDelegate.h 2#import <FacebookSDK/FacebookSDK.h> 3 4@property (strong, nonatomic) FBSession *session; 5

lang

1//AppDelegate.m 2- (BOOL)application:(UIApplication *)application 3 openURL:(NSURL *)url 4 sourceApplication:(NSString *)sourceApplication 5 annotation:(id)annotation { 6 // attempt to extract a token from the url 7 return [FBAppCall handleOpenURL:url 8 sourceApplication:sourceApplication 9 withSession:self.session]; 10} 11 12- (void)applicationDidBecomeActive:(UIApplication *)application { 13 [FBAppEvents activateApp]; 14 [FBAppCall handleDidBecomeActiveWithSession:self.session]; 15} 16 17- (void)applicationWillTerminate:(UIApplication *)application { 18 [self.session close]; 19}

lang

1//ViewController.h 2#import <FacebookSDK/FacebookSDK.h> 3 4@interface ViewController : UIViewController<FBLoginViewDelegate>

lang

1//ViewController.m 2- (void)viewDidLoad { 3 [super viewDidLoad]; 4AppDelegate *appDelegate = [[UIApplication sharedApplication]delegate]; 5 if (!appDelegate.session.isOpen) { 6 appDelegate.session = [[FBSession alloc] initWithPermissions:@[@"email"]]; 7 if (appDelegate.session.state == FBSessionStateCreatedTokenLoaded) { 8 [appDelegate.session openWithCompletionHandler:^(FBSession *session, 9 FBSessionState state, 10 NSError *error){ 11 [FBSession setActiveSession:session]; 12 13 }]; 14 } 15 } 16} 17 18- (void)login:(UIButton *)sender{ 19 AppDelegate *appDelegate = [[UIApplication sharedApplication]delegate]; 20 if (appDelegate.session.isOpen) { 21 // Facebookログアウト(sessionクリア)処理 22 [appDelegate.session closeAndClearTokenInformation]; 23 } else { 24 if (appDelegate.session.state != FBSessionStateCreated) { 25 appDelegate.session = [[FBSession alloc] initWithPermissions:@[@"email"]]; 26 } 27 [appDelegate.session openWithCompletionHandler:^(FBSession *session, FBSessionState status, NSError *error) { 28 if (status == FBSessionStateOpen) { 29 // 成功時 30 [FBSession setActiveSession:session]; 31 32 FBRequestConnection *requestConnection = [[FBRequestConnection alloc] init]; 33 requestConnection.errorBehavior = FBRequestConnectionErrorBehaviorRetry | FBRequestConnectionErrorBehaviorReconnectSession; 34 35 FBRequest *request = [FBRequest requestForGraphPath:@"me"]; 36 [requestConnection addRequest:request completionHandler:^(FBRequestConnection *connection, id result, NSError *error) { 37 if (!error) { 38 39 /*ログイン処理等*/ 40 41 } 42 }]; 43 [requestConnection start]; 44 } 45 }]; 46 } 47 48}

【結果】
ボタンタップ後、一瞬Facebookに飛ぶものの認証画面(「以下の許可を求めています」)は表示されず、すぐにアプリに戻る。
アプリ側では特にエラーが吐き出されるわけでもなく、ただ /ログイン処理等/ に記述した処理がなされていない(要はFacebookに飛ぶ前となにも変わらない)状態です。

NSLogを立ててみてみると、どうやら status == FBSessionStateOpen が成立していないため処理がされていないようでした。

実機でもうまく動作するものとしないものがあるようなのですが、すべてのデバイスでの動作を保証したいです。

どのようにすればよいでしょうか。
助言をいただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

こちらの質問について自己解決したので締めさせていただきます。

原因はXcodeとFacebook Developersで入力したBundle Identifierが違っていたというなんともお粗末なものでした・・・。
ありがとうございました。

投稿2015/01/24 09:32

katsuo77

総合スコア28

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問