2

最近、最新の FB iOS SDK (3.0) を自分のアプリ (iOS 5) に統合する作業を完了しました。チュートリアルを進めましたが、FB が提供するドキュメントによると、すべてが整っているようです。私が抱えている問題は、次の方法で認証する必要があるかどうかを確認するたびに発生することです。

if(![self openSessionWithAllowLoginUI:NO]) { [self openSessionWithAllowLoginUI:YES]; }

... 多くの場合 (そしてほとんどの場合 [FBSession.activeSession close] の後) openSessionWithAllowLoginUI が NO を返し、有効なセッションを取得するために認証ダイアログに移行する必要があります。私の理解によれば、[FBSession.activeSession close] は、古いトークンを再利用する SDK の機能を妨害してはならず、ログイン ダイアログを表示せずにセッションを再作成できるようにする必要があります。

私のアプリでは、アプリの有効期間中は Facebook 認証を必要としないことに注意してください。したがって、私は必要に応じてセッションを確立し、[FBSession.activeSession close] だけを applicationWillTerminate で使用するのではなく、[FBSession.activeSession close] でセッションを終了する傾向があります。

私が間違っていることや試してみるべきことについて誰か提案がありますか?

ありがとう。

4

2 に答える 2

1

同じ問題があり、理解できません...セレクターopenSessionWithAllowLoginUI:はユーザーの保存されたセッションを取得できず、常にユーザーにログインUIを表示する必要があります。

私はそれをできるだけ早く解決したいと思っています!

アップデート - - - - - - -

私が理解したこと:ユーザーがFacebookにログインすると、FBSDKはsessionStateChangedを2回呼び出します。

1つ目はFBSessionStateOpen用で、2つ目はFBSessionStateClosed用です。したがって、AppDelegate.mファイルを確認すると、次のようなコードが見つかります。

case FBSessionStateClosed:
case FBSessionStateClosedLoginFailed:
     [FBSession.activeSession closeAndClearTokenInformation];
     break;

closeAndClearTokenInformationの呼び出し:すべてのトークン情報をクリアして、アプリが実行されるたびにユーザーにログインUIを要求するようにします。

ここで問題は、Facebookが最初にFBSessionStateOpenを送信し、すぐにFBSessionStateClosedを送信する理由です。

于 2012-09-03T19:32:33.963 に答える
1

openSessionWithAllowLoginUI を正しく動作させることができませんでした。代わりに、これを使用します。

[FBSession openActiveSessionWithPermissions:[NSArray arrayWithObject:@"user_relationships"] allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
    switch (status) {
        case FBSessionStateOpen:
            [self start];
            break;
        case FBSessionStateClosed:
            break;
        case FBSessionStateCreated:
            break;
        case FBSessionStateCreatedOpening:
            break;
        case FBSessionStateClosedLoginFailed:
            break;
        case FBSessionStateOpenTokenExtended:
            break;
        case FBSessionStateCreatedTokenLoaded:
            break;
    }

}];

[self start] メソッドを追加し、必要に応じて権限配列を変更します。これは一貫して機能します。

于 2012-09-03T20:00:17.580 に答える