openActiveSessionWithReadPermissions不会自动login
我最近开始使用Facebook SDK 3.1,并遇到一些使用openActiveSessionWithReadPermissions
login的问题。
实际上,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呢?
- Facebook SDK 4.5 IOS 9
- Facebook的iOS SDK:为什么我得到“你必须升级这个应用程序graphicsAPI v2.x”?
- Facebook iOS SDK – FWWebDialogs不呈现消息
- Facebook SDK 3.1 iOS:如果用户从Facebook设置中删除应用,则处理login
- 在应用程序相册中使用Facebook SDK 3.1 for iOS发布带有标题的图片
- 接受应用程序时select“不是现在”导致“com.facebook.sdk error2”
- 使用iOS SDK将多张照片作为时间轴上的单个照片上传,而不是像Facebook中的相册
- 发布或pipe理权限不被授权读取权限FACEBOOK SDK请求
- 在Facebook iOS 3.1.1 SDK中使用FBSession openActiveSessionWithReadPermissions处理无效的accessToken