2013-01-01 10 views
6

Facebook SDK 2から3.1にアップグレードしました。Facebook iOSは、クリックした後にアプリケーションに戻るときにセッションが失われているようです。既にアプリを承認済みです。

私はRecordsScreenにポストボタンを持っています。ユーザーがFacebookにログインしていない場合は、ログインページが表示され、ユーザーが既にログインしている場合は別のペン先が読み込まれ、ユーザーは自分の壁に投稿するメッセージを入力するように求められます。

私はすでにログインしています。その後、[ポスト]ボタンをクリックするたびに、そのアプリケーションに関するページが既に承認されていて、[OK]をクリックして続行するかどうか尋ねられます。 [OK]をクリックすると、アプリは終了し、最初からやり直します。ポストボタンをクリックするたびに、この同じページが再び表示されます。有効なセッションが見つからないか、トークンが失われたように見えます。

私はこれをシミュレータとデバイスでテストしました。同じことが起こります。デプロイターゲットはiOS5.1です。

私が入力していない唯一のパラメータはiPhone App Store IDです。これは上記の動作に影響を及ぼしますか?

私はすでに多くの時間を試みており、解決策を見つけることができませんでした。

何か助けていただければ幸いです。

ありがとうございます!

AOBS 1月4日に編集


私はすべての時間openSessionWithAllowLoginUIが呼び出されることがわかりました。状態FBSessionStateClosedLoginFailedが返されます。ログインに問題があります。しかし、すでに認証済みのページが表示されているので、ユーザーは既にログインしています。

理由は、applicationWillTerminateがopenSessonWithAllowLoginUIの直後に実行されるためです。誰もこれに光を当てることができますか? appDelegate.hで


、IはFacebookSDK/FacebookSDK.hをインポートしappDelegate.mにおいて、以下が実現されている:

-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { 
return [FBSession.activeSession handleOpenURL:url); 
} 

-(void)applicationDidBecomeActive:(UIApplication *)application { 
[FBSession.activeSession handleDidBecomeActive]; 
} 

-(void)applicationWillTerminate:(UIApplication *)application { 
[FBSession.activeSession close]; 
} 

mainViewControllerが切り替わりマルチビューコントローラでありますペン先。

Facebookログイン/ログアウトを処理するFBHandlerクラスを実装しました。 FBHandler.hは「Facebook.h」の#importが含まれているとFBHandlerはニブの

-(void)sessionStateChanged:(FBSession *)session state:(FBSessionState)state error:(NSError *)error { 
    switch(state) { 
    case FBSessionStateOpen: 
     break; 
    case FBSessionStateClosed: 
    case FBSessionStateClosedLoginFailed: 
     [FBSession.activeSession closeAndClearTokenInformation]; 
    default: 
     break; 
    } 

    [[NSNotificationCenter defaultCenter]postNotificationName:FBSessionStateChangedNotification object:session]; 

    // If there is an error, display the alert view. I have skipped this code. 
} 

-(BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI { 
    return [FBSession openActiveSessionWithReadPermissions:nil allowLoginUI:allowLoginUI completionHandler:^(FBSession *session, FBSessionState state, NSError *error) { 
     [self sessionStateChanged:session state:state error:error]; 
    }]; 
} 

一つを含むクラスである - RecordsScreen.xibは、Facebookのログイン/ログアウトボタンが含まれています。 RecordsScreen.m(ユーザーがFacebookのからの彼/彼女のスコアとログインまたはログアウトを見ることができる場所)で、以下は、のviewDidLoadに追加されます。RecordsScreen.mで

fbHandler = [[FBHandler alloc] init]; 
[fbHandler openSessionWithAllowLoginUI:NO]; 

// Also, we will listen to FBSessionStateChangedNotification in viewDidLoad. Code is skipped here. 

// The implementation of sessionStateChanged in RecordsScreen: 
-(void)sessionStateChanged:(NSNotification *)notification { 
    if (FBSession.activeSession.isOpen) { 
     if (self.facebook == nil) { 
      self.facebook = [[Facebook alloc]initWithAppId:FBSession.activeSession.appID andDelegate:nil]; 
      self.facebook.accessToken = FBSession.activeSession.accessToken; 
      self.facebook.expirationDate = FBSession.activeSession.expirationDate; 
     } 
    } else { 
     self.facebook = nil; 
    } 
} 

、ユーザーがログインをクリックした場合

if (!FBSession.activeSession.isOpen) { 
    // Login to Facebook. 
    [fbHandler openSessionWithAllowLoginUI:YES]; 
} else { 
    // If user is login, post to wall. 
    [self postScoreToWall]; 
} 
+0

このためのApp Store IDが不要です – Harikrishnan

+0

Facebook SDK 2でうまく動作していますか? – Harikrishnan

+1

はい、SDK 2でうまくいきました。コードが異なります。 – aobs

答えて

4

問題が見つかりました。 plistでは、 "アプリケーションはバックグラウンドで実行されません"がYESに設定されています。 NOに設定すると問題が解決しました。

2

表示されているコードでは、セッションの読み取りアクセス許可の基本セットのみを取得します。適切なアクセス許可を渡すには少なくともreauthorizeWithPublishPermissions:への呼び出しが必要です。

私はちょうど同じ問題を抱えていました.2つのことを変更することで解決しました。私はFacebookが示唆する2段階の権限昇格方法を使用していませんが、ログインに必要な権限を取得しようとします。openActiveSessionWithPublishPermissions

また、sdkをもう一度呼び出す前に、Facebookのログインプロセスの最後にhandleDidBecomeActive:が呼び出されるようにする必要があります。このプロセスのさまざまなステップを実行する一連のブロックがあると、それは起こりません。

私はこのsdkの古いバージョンでは動作しませんでしたが、はるかに直感的でした。

+0

ユーザーがログインして[ポスト]ボタンをクリックすると、reauthorizeWithPublishPermissionsが使用されます。しかし、私はあなたの提案を試し、それが問題を解決するかどうかを見ていきます。 – aobs

+0

openActiveSessionWithPublishPermissionsへのアクセス権を変更してアプリをテストしました。同じ問題が発生します。 – aobs

関連する問題