openActiveSessionWithReadPermissions不会自动login

我最近开始使用Facebook SDK 3.1,并遇到一些使用openActiveSessionWithReadPermissionslogin的问题。

实际上,loginfunction完美无缺,如果有一个caching的令牌可用,它将login而不会呈现Facebook用户界面,如果没有,则会显示用户界面。

在我打电话给reauthorizeWithPublishPermissions之后出现问题。 如果我调用reauthorizeWithPublishPermissions ,然后closures并重新打开该应用程序,并调用openActiveSessionWithReadPermissions ,它将呈现Facebook UI,并要求用户说“是的,我拥有读取权限”,即使存在caching的令牌可用。

如果我打电话给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)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进行testing:

 - (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); } } 

感谢所有提前,我会感谢任何和所有的帮助!

你需要添加

[FBSession.activeSession handleDidBecomeActive];

到你的-(void) applicationDidBecomeActive:(UIApplication *)application方法在你的应用程序的委托,如移植指南中所述。

如果使用openActiveSessionWithPermissions而不是openActiveSessionWithReadPermissions呢?