我正在实施适用于iOS的SDK的v4.1,当我尝试调用publishPermissions:时,我没有回调。
出于某种原因,当我运行logInWithReadPermissions:时,一切都运行良好,但是当我运行logInWithPublishPermissions时:它永远不会命中我的响应处理程序。什么都没发生。
为了测试一下,我在运行logInWithPublishPermissions:之前重置了我的loginManager,令我惊讶的是它工作了(又叫NSLog(@“RESULT”))。
我是否遗漏了有关loginManager如何工作的内容?我不能在没有重置的情况下使用它吗?
// FacebookController.m
@implementation FacebookController
FBSDKLoginManager *loginManager;
static FacebookController *_shared = nil;
- (id)init {
self = [super init];
if (self != nil) {
userData = [[NSMutableDictionary alloc] init];
loginManager = [[FBSDKLoginManager alloc] init];
}
return self;
}
+ (id)getInstance {
if (!_shared) {
_shared = [[self alloc] init];
}
return _shared;
}
- (bool)hasPublishPermissions {
FBSDKAccessToken *accessToken = [FBSDKAccessToken currentAccessToken];
if(accessToken != NULL){
NSSet *permissions = [accessToken permissions];
if([permissions containsObject:@"publish_actions"]){
return TRUE;
}
}
return FALSE;
}
- (void)requestPublishPermissionsWithDelegate:(id)aDelegate {
if(![self hasPublishPermissions]){
// FOR SOME REASON IT WORKS IF I RESET LOGIN MANAGER AS FOLLOWS
// loginManager = [[FBSDKLoginManager alloc] init];
[loginManager logInWithPublishPermissions:@[@"publish_actions"] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
NSLog(@"RESULT: %@", result);
}];
}
}
- (void)connectToFacebookWithDelegate:(id)aDelegate {
FBSDKAccessToken *accessToken = [FBSDKAccessToken currentAccessToken];
if(accessToken != nil){
[aDelegate performSelector:@selector(facebookSignedIn)];
} else {
[loginManager logInWithReadPermissions:@[@"email"] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
if (error) {
// Process error
NSLog(@"ERROR");
} else if (result.isCancelled) {
// Handle cancellations
NSLog(@"CANCELLED");
} else {
NSLog(@"SUCCESS");
[aDelegate performSelector:@selector(facebookSignedIn)];
}
}];
}
}
@end
编辑#1: 包括有效的视频和不适用于特定场景的视频:
不工作(登录注册表重新初始化): https://dl.dropboxusercontent.com/u/14277258/not-working.mov
工作(loginManager重新初始化): https://dl.dropboxusercontent.com/u/14277258/working.mov
答案 0 :(得分:1)
您的视频堆栈跟踪表明您在初始登录的处理程序中调用了发布权限请求。这应该避免:
如果您真的坚持,可以异步发送第二次登录呼叫,以便第一次请求完全完成,但我不推荐。我们可能会更新SDK以检测它并记录,因此它不会令人困惑。