質問を開いていただきありがとうございます。
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 が成立していないため処理がされていないようでした。
実機でもうまく動作するものとしないものがあるようなのですが、すべてのデバイスでの動作を保証したいです。
どのようにすればよいでしょうか。
助言をいただけると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。