2012-09-04 8 views
12

iOS向けFacebook SDKに関する簡単な質問です。私は、ユーザーが拡張アクセス許可への私のアプリケーションアクセスを許可する機能を実装しようとしています。以前のFacebookの再認証コールをキャンセルするにはどうすればよいですか?

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

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

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は、このような状況をアプリに警告するものではありません。

+0

最後のセッションは削除されましたか? – Spynet

+0

同じ問題があります –

+0

旧Qですが、(BOOL)アプリケーション:(UIApplication *)アプリケーションopenURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication注釈:(id)注釈? –

答えて

8

あなたのアプリケーションの代理人から、- (void)applicationDidBecomeActive:(UIApplication*)applicationが呼び出されたときに、アクティブセッションのhandleDidBecomeActiveメソッドを呼び出す必要があります。これを実行すると、reauthorizeWithPublishPermissions呼び出しに関連付けられた補完ハンドラが呼び出され、適切なエラーが発生します。

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

SDKから戻ってくるのは、再認定完了ハンドラのエラーです。 Xcodeの4.5、iOSの5、m.facebook.comに対する承認:

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

は、私は次のセットアップと同様のものをテストしました。最初の承認後、私はコードを再認証し、その後キャンセルをクリックしてこのエラーを受けました。

[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に登録してください。

+0

こんにちはC Abernathy! reauthorizeWithPermissionsを使用してさらに多くのアクセス権を要求すると、以前のセッションは期限切れですか?それとも同じトークンで同じままですか? appDelegate.sessionとappDelegate.facebook.sessionを取り直す必要がありますか? 「許可」ボタンではなく「許可」UIに「ログイン」ボタンが表示されます。 –

+0

前のセッションは有効期限切れではありません。更新されたセッションを新しい権限で使いたいので、権限コードの設定方法に基づいて権限を再割り当てする必要があります。 –

関連する問題