1
[FBSession openActiveSessionWithReadPermissions:nil
                                   allowLoginUI:YES
                              completionHandler:
 ^(FBSession *session,
   FBSessionState state, NSError *error) {
     [self sessionStateChanged:session state:state error:error];
 }];

しばらくすると、アプリケーションが facebook にアクセスしようとしているという警告が表示され、それが許可されているかどうかを尋ねられます。

ただし、そのアラートは、完了ハンドラーに到達した後に表示されます。

その時点で、状態はすでに FBSessionStateClosedLoginFailed になっています。

私は何をすべきか?シミュレーターでは正常に動作します。

実際、フェイス ブックの素晴らしいサンプルも、私の iPhone では失敗します。しかし、Facebookアプリをインストールしてログインしています。

4

1 に答える 1

1

Facebook ログインのチェックリスト:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    return [FBSession.activeSession handleOpenURL:url];
}


- (void)applicationDidBecomeActive:(UIApplication *)application {
    // We need to properly handle activation of the application with regards to SSO
    //  (e.g., returning from iOS 6.0 authorization dialog or from fast app switching).
    [FBSession.activeSession handleDidBecomeActive];
}

- (void)applicationWillTerminate:(UIApplication *)application {
    // if the app is going away, we close the session object; this is a good idea because
    // things may be hanging off the session, that need releasing (completion block, etc.) and
    // other components in the app may be awaiting close notification in order to do cleanup
    [FBSession.activeSession close];
}

私のsessionStateChangedで:私はこれをやっています

switch ( state ) {
    case FBSessionStateOpen:
        [[Facebook _instance] fbDialogLogin:session.accessToken expirationDate:session.expirationDate];
        break;
    case FBSessionStateClosed:
        [FBSession.activeSession closeAndClearTokenInformation];
        break;
    case FBSessionStateClosedLoginFailed:
        break;
    default:
        NSLog(@"FBSessionStateUnknown: %d", state);
        break;
}

また、FacebookAppID と BundleID が Facebook Developer Dashboard で作成したものと同じであることを忘れないでください!

于 2013-03-06T05:14:47.590 に答える