1

Facebook認証の例をフォローしています

https://developers.facebook.com/docs/tutorials/ios-sdk-games/authenticate/

私が使用したログインの場合:

 [FBSession openActiveSessionWithPermissions:permissions allowLoginUI:YES 
                                  completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
                                      if (session.isOpen) 
                                      {
                                          appDelegate.session=session; 

                                      }
                                  }//end completionHandler
         ];

Facebookのapprequestダイアログの場合:

 if (nil == appDelegate.facebook) 
{
    appDelegate.facebook = [[Facebook alloc]
                            initWithAppId:FBSession.activeSession.appID
                            andDelegate:nil];

    // Store the Facebook session information
    appDelegate.facebook.accessToken = FBSession.activeSession.accessToken;
    appDelegate.facebook.expirationDate = FBSession.activeSession.expirationDate;
}

[self.facebook dialog:APPREQUEST
       andParams:params
     andDelegate:self];

しばらくしてアプリを再度実行しようとすると、アプリはFacebookに接続され、FBSessionもアクティブになりますが、apprequestダイアログを呼び出すと、ログインを要求されます。

appDelegate.facebook = [[Facebook alloc]に問題がありますか、それともセッションの有効期限が切れていますか?

何か提案はありますか?

4

1 に答える 1

2

完了ハンドラー内に Facebook オブジェクト セッション設定コードを配置してみてください。完了ハンドラーは、セッションが変更されるたびに呼び出す必要があります。たとえば、後でトークンが拡張されたときに再度呼び出す必要があります。そうすれば、Facebook オブジェクト セッションを最新の状態に保つことができます。アクセス トークンを自分で拡張する必要はありません。SDK が自動的に拡張するようになりました。

[FBSession openActiveSessionWithPermissions:permissions 
                               allowLoginUI:YES 
                          completionHandler:
    ^(FBSession *session, FBSessionState status, NSError *error) {
        if (session.isOpen) 
        {
            appDelegate.session=session; 

            if (nil == appDelegate.facebook) 
            {
                appDelegate.facebook = [[Facebook alloc]
                        initWithAppId:FBSession.activeSession.appID
                        andDelegate:nil];
            }

            // Store the Facebook session information
            appDelegate.facebook.accessToken = FBSession.activeSession.accessToken;
            appDelegate.facebook.expirationDate = FBSession.activeSession.expirationDate;
        } // if session open
        else 
        {
            appDelegate.facebook = nil;
        } // session not open
    } //end completionHandler
];
于 2012-11-09T18:10:32.590 に答える