16

Facebook 3.1iOSSDKで公開権限を使用してログインできません。

私のアプリにはビデオを共有するためのボタンがあり、ユーザーがそれをクリックしたときに、基本的な+公開権限を追加したいと思います。私が理解しているように、私は2つの呼び出しを行う必要があります-

  1. openActiveSessionWithReadPermissions、 その後
  2. reauthorizeWithPublishPermissions

これが私が今使っているコードです:

//Opens a Facebook session and optionally shows the login UX.
- (void)openSessionForReadPermissions
{
    [FBSession openActiveSessionWithReadPermissions:nil
                                       allowLoginUI:YES
                                  completionHandler:
     ^(FBSession *session,
       FBSessionState state, NSError *error) {

         //this is called even from the reauthorizeWithPublishPermissions
         if (state == FBSessionStateOpen && !error)
         {
             [self openSessionForPublishPermissions];
         }
         else if (state == FBSessionStateClosedLoginFailed)
         {
             [FBSession.activeSession closeAndClearTokenInformation];

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

-(void)openSessionForPublishPermissions
{    
    NSArray* permissions = [NSArray arrayWithObject:@"publish_stream"];

    [[FBSession activeSession] reauthorizeWithPublishPermissions:permissions
                                                 defaultAudience:FBSessionDefaultAudienceFriends
                                               completionHandler:
     ^(FBSession *session, NSError *error)
     {
         if (!error)
         {
             [[NSNotificationCenter defaultCenter]
              postNotificationName:FBLoginSuccessNotification
              object:session];
         }
         else
         {
             [[NSNotificationCenter defaultCenter]
              postNotificationName:FBLoginErrorNotification
              object:session];
         }
     }];
}

openSessionForReadPermissionsのブロックが2回呼び出され(1回はFBSessionStateOpenで、もう1回はopenSessionForPublishPermissions呼び出しからFBSessionStateOpenTokenExtendedで)、最初にアプリにログインしようとするとErrorReauthorizeFailedReasonUserCancelledが発生します(Oが以前にすべてのアプリのアクセス許可を削除した場合)。

このログインを実装する適切な方法は何ですか?この1つの機能を除いて、アプリはFacebookログインを必要としないため、ログインプロセスは同じボタンを押すだけで行う必要があります。

ありがとう!

4

2 に答える 2

26

私はこれと同じ問題に遭遇しました。私が見つけた解決策は、への呼び出しを[self openSessionForPublishPermissions];dispatch_asyncブロックでラップすることでした。

例:

dispatch_async(dispatch_get_current_queue(), ^{
    [self openSessionForPublishPermissions];
});

その理由は、reauthorize ..の呼び出しは、openActiveSession..が呼び出されるイベントループの後に行う必要があるためです。

于 2012-10-20T21:54:45.840 に答える
0

これがブレークポイントに到達するためのタイムアウトになる可能性はありますか?このエラーは一度発生しましたが、ブレークポイントを無効にして実行した後は発生しませんでした。

于 2012-10-16T20:22:05.007 に答える