12

iOS用FacebookSDKについての簡単な質問。ユーザーがアプリに拡張権限へのアクセスを許可する機能を実装しようとしています。

ユーザーが拡張アクセス許可リクエストを受け入れるとコードは正常に機能しますが(ユーザーがリダイレクトされるFacebook iOSアプリから)、ユーザーがアクセス許可を受け入れていないか、[キャンセル]をクリックしてアプリに戻ったときを検出できません。その後、アプリに戻ります。

[キャンセル]をクリックしてマルチタスクをアプリに戻すと、ログに記録されず、画面に何も表示されません。再度認証しようとすると、FacebookSDKは例外をスローします。

FBSession:前の再承認呼び出しがまだ完了していないときに再承認することは無効です。

例外をキャッチすることはできますが、ユーザーが再承認を再試行できるようにするために前の呼び出しを停止する方法がわからないため、それでも役に立ちません。

現在使用しているコードは次のとおりです。

@try {
    [[FBSession activeSession] reauthorizeWithPermissions:[self requiredPermissions]
                                             behavior:FBSessionLoginBehaviorWithFallbackToWebView
                                    completionHandler:^(FBSession *session, NSError *error) {
        if (!error) {
            [self fetchUserPermissionsWithCompletionHandler:^(BOOL extendedGranted) {
                if (extendedGranted) {
                    [self setCanPostToActivityStream:YES];
                }
            }];
        }
        else {
            NSLog(@"%@", [error localizedDescription]);
        }
    }];
}
@catch (NSException *exception) {
    NSLog(@"%@", exception);
}

さて、問題は上記のコードではありません-コードは正常に機能します。繰り返しになりますが、私が抱えている問題は、ユーザーが権限を許可した後にアプリに正常に戻らない場合に、以前の再承認呼び出しをキャンセルすることです。Facebook SDKは、そのままではアプリにこの状況を警告していないようです。

4

2 に答える 2

8

アプリのデリゲートから、が呼び出されたときに、アクティブなセッションのメソッド- (void)applicationDidBecomeActive:(UIApplication*)applicationを呼び出す必要があります。これを行うと、呼び出しにhandleDidBecomeActive関連付けられた完了ハンドラーが呼び出され、適切なエラーが提供されます。reauthorizeWithPublishPermissions

- (void)applicationDidBecomeActive:(UIApplication*)application
{
    [[FBSession activeSession] handleDidBecomeActive];
}
于 2012-12-08T13:14:47.057 に答える
0

SDKから戻ってくるのは、再承認完了ハンドラーからのエラーです。

{
    "com.facebook.sdk:ErrorLoginFailedReason" = "com.facebook.sdk:ErrorReauthorizeFailedReasonUserCancelled";
}

次の設定で同様のテストを行いました:Xcode 4.5、iOS 5、m.facebook.comに対して認証します。最初の認証後、再認証を押すためのコードを入力し、[キャンセル]をクリックしてこのエラーが発生しました。

    [FBSession.activeSession
     reauthorizeWithPublishPermissions:
     [NSArray arrayWithObject:@"publish_actions"]
     defaultAudience:FBSessionDefaultAudienceFriends
     completionHandler:^(FBSession *session, NSError *error) {
        if (!error) {
            // Success case
        } else {
            // Check the error, info
            // [[error userInfo] objectForKey:@"com.facebook.sdk:ErrorLoginFailedReason"]
        }
    }];

これが表示されない場合はバグであり、Facebookに提出することをお勧めします。

于 2012-10-03T04:22:40.617 に答える