2012-11-19 19 views
6

最近Facebook SDK 3.1を使い始めましたが、openActiveSessionWithReadPermissionsを使ってログインする際にいくつかの問題が発生しています。openActiveSessionWithReadPermissionsが自動的にログインしない

実際にはlogginは完全に機能します。キャッシュされたトークンが利用可能な場合、FacebookのUIを提示せずにログインし、そうでなければUIを表示します。

reauthorizeWithPublishPermissionsを呼び出した後に問題が発生します。 reauthorizeWithPublishPermissionsに電話してアプリケーションを終了してもう一度開き、openActiveSessionWithReadPermissionsに電話をかけると、FacebookのUIが表示され、利用可能なキャッシュトークンがあるにも関わらず、ユーザーは「はい」と言う必要があります。

私がreauthorizeWithPublishPermissionsに電話をかけた場合、誤ってFacebookのUIが表示されます。そうでない場合はすべて正常に動作します。

読み取りコードのオープン:

[FBSession openActiveSessionWithReadPermissions:readpermissions allowLoginUI:YES 
             completionHandler:^(FBSession *aSession, FBSessionState status, NSError *error) { 
      [self sessionStateChanged:[FBSession activeSession] state:status error:error]; 
      if (status != FBSessionStateOpenTokenExtended) { 
       // and here we make sure to update our UX according to the new session state 
       FBRequest *me = [[FBRequest alloc] initWithSession:aSession 
                 graphPath:@"me"]; 
       [me startWithCompletionHandler:^(FBRequestConnection *connection, 
               NSDictionary<FBGraphUser> *aUser, 
               NSError *error) { 
        self.user = aUser; 

        aCompletionBlock(aSession, status, error); 
       }]; 
      } 
     }]; 

sessionStateChanged機能:事前にすべてのため

- (void)doPublishAction:(void(^)(FBSession *aSession, NSError *error))aPublishAction { 

    if ([FBSession.activeSession.permissions 
     indexOfObject:@"publish_actions"] == NSNotFound) { 

     NSArray *writepermissions = [[NSArray alloc] initWithObjects: 
            @"publish_stream", 
            @"publish_actions", 
            nil]; 

     [[FBSession activeSession]reauthorizeWithPublishPermissions:writepermissions defaultAudience:FBSessionDefaultAudienceFriends completionHandler:^(FBSession *aSession, NSError *error){ 
      if (error) { 
       NSLog(@"Error on public permissions: %@", error); 
      } 
      else { 
       aPublishAction(aSession, error); 
      } 


     }]; 

    } 
    else { 
     // If permissions present, publish the story 
     aPublishAction(FBSession.activeSession, nil); 
    } 
} 

ありがとう:

- (void)sessionStateChanged:(FBSession *)aSession state:(FBSessionState)state error:(NSError *)error { 

    if (aSession.isOpen) { 
     // Initiate a Facebook instance and properties 
     if (nil == self.facebook || state == FBSessionStateOpenTokenExtended) { 
      self.facebook = [[Facebook alloc] 
          initWithAppId:FBSession.activeSession.appID 
          andDelegate:nil]; 

      // Store the Facebook session information 
      self.facebook.accessToken = FBSession.activeSession.accessToken; 
      self.facebook.expirationDate = FBSession.activeSession.expirationDate; 
     } 
    } else { 
     // Clear out the Facebook instance 
     if (state == FBSessionStateClosedLoginFailed) { 
      [FBSession.activeSession closeAndClearTokenInformation]; 
     } 
     self.facebook = nil; 
    } 
} 

テストのための空のaPublishActionとの通話を、公開、私はすべての助けに感謝します!

+0

私はpublish_actionsが必要なものだと思います。今はpublish_streamを含んでいると思います。 – SAHM

+0

この解決策を見つけたことがありますか?私はまったく同じ問題を抱えています。 – Casey

+0

解決策が見つからなかったため、実際にはパブリッシュのアクセス権が必要なくなり、解決策を見つける必要はありませんでした。 –

答えて

6

あなたはmigrationガイドに記載されているように、アプリケーションのデリゲートでのご-(void) applicationDidBecomeActive:(UIApplication *)application方法に

[FBSession.activeSession handleDidBecomeActive];

を追加する必要があります。

+0

私はその行セットを持っていますが、関数は次のようになります: ' - (void)applicationDidBecomeActive:(UIApplication *)アプリケーション { [FBSession.activeSession handleDidBecomeActive]; } ' を明確にするために、アプリケーションを終了して再度開くと問題が発生します。 –

+0

こんにちは。ですから、私が理解する限り、セッションが既に開いている間に '[FBsession openActiveSessionWithReadPermissions:allowLoginUI:completionHandler:]'が再び呼び出される可能性はありますか?これが起こった場合、デフォルトの動作はセッションを閉じて再度開こうとすることです。問題が説明されます。 – ale0xB

+0

私はこれの可能性はないことを確認することができます。前述したように、この問題は、以前のアプリケーションセッションで 'reauthorizeWithPublishPermissions'が呼び出されたときにのみ発生します。これは私に、これが問題を引き起こしていると信じさせます。 –

-2

openActiveSessionWithReadPermissionsの代わりにopenActiveSessionWithPermissionsを使用するとどうなりますか?

+0

それは私が元々持っていたものであり、それは完全に働いた。しかし、それはFacebook SDK 3.0の償却されたメソッドであり、Facebook SDK 3.1の新しいシステムに切り替えるには、読み込みを要求するために 'openActiveSessionWithReadPermissions'を使って別々に読み書き権限を要求し、' reauthorizeWithPublishPermissions '書き込みを要求する。私はこの新しいシステム上で問題を抱えています。 –

+1

openActiveSessionWithPermissionsは推奨されていません。 – gran33

関連する問題