0

Facebook SDK を使用するのはこれが初めてなので、Facebook のチュートリアルに従いましたが、ログイン/権限フローが正しくない可能性があります。私のアプリケーションはウォールで共有する必要があるだけです。SDK 3.2.1 を使用しています。

ユーザーが共有ボタンをタップするたびに、+ (BOOL)openActiveSessionWithReadPermissions:(NSArray*)readPermissions allowLoginUI:(BOOL)allowLoginUI completionHandler:(FBSessionStateHandler)handlerメソッドを使用してログインします。

初めて、電子メールとパスワードの組み合わせを要求されます。私が直面している問題は、保存されたトークンを後で再利用しないことです:

  • トークンが保存されている場合 (ユーザーが以前に Facebook にログインした場合)、アプリは "You already authorized app_name" を使用してアクセス許可を要求し、共有時に再度要求する可能性が高くなります。

  • が 2 回目に呼び出された場合openActiveSessionWithReadPermissions、パーミッションは要求されません。

  • 3 回目は、もう一度尋ねます。

セッションが自動的に閉じられていることがわかりましたが、その理由がわかりません。FBSessionStateClosed完了ハンドラーは、直前に がどのように受信されるかを示していますFBSessionStateOpen。これが、Facebook SDK が 1 回おきに承認を求め続ける理由だと思います。

完了ブロック セッション クローズ 完了ブロック セッション オープン

これらの 2 つのトレースは、2 回目のopenActiveSessionWithReadPermissions呼び出しからのものです (セッションが閉じられ、再び開かれる様子を確認できます)。次にこのメソッドが呼び出されると、閉じられたセッションを受け取るだけで、「認証済み」画面が表示されます。

私のコードは以下のようなものです:

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

- (void)sessionStateChanged:(FBSession *)session
                      state:(FBSessionState) state
                      error:(NSError *)error
{
    switch (state) {
        case FBSessionStateOpen:
            if (!error) {
                // We have a valid session
                NSLog(@"User session found");
            }
            break;
        case FBSessionStateClosed:
        case FBSessionStateClosedLoginFailed:
            [FBSession.activeSession closeAndClearTokenInformation];
            break;
        default:
            break;
    }

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

誰かがこれについて助けてくれることを願っています。私はかなりイライラしています。

4

0 に答える 0