FBSDKLog缺少权限

时间:2016-06-14 10:40:28

标签: ios objective-c facebook

我想与facebook分享新闻。这是代码:

RACSignal *sign = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
        if([[FBSDKAccessToken currentAccessToken] hasGranted:@"publish_actions"]){
            NSLog(@"1 blck");
            NSLog(@"curr tok? %@", [FBSDKAccessToken currentAccessToken]);
            [subscriber sendNext:@YES];
            [subscriber sendCompleted];
        } else {
            NSLog(@"2 blck");
            FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
            [login logOut];
            login.loginBehavior = FBSDKLoginBehaviorWeb;
            [login logInWithPublishPermissions:@[@"publish_actions"] fromViewController:APP.window.rootViewController handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
                NSLog(@"log passed by");
                self.isExecuting = YES;
                if (error) {
                    NSError *err = [NSError errorWithDomain:@"ru.myServer.fb" code:-3 userInfo:@{NSLocalizedDescriptionKey:error.localizedDescription}];
                    [subscriber sendError:err];
                } else if (result.isCancelled) {
                    NSError *err = [NSError errorWithDomain:@"ru.myServer.fb" code:-4 userInfo:@{NSLocalizedDescriptionKey:@"Недоступно"}];
                    [subscriber sendError:err];
                } else {
                    NSString *strToken = result.token.tokenString;
                    NSString *strUserId = result.token.userID;
                    NSDictionary *dctProps = @{@"token":strToken, @"user_id":strUserId};
                    [subscriber sendNext:dctProps];
                    [subscriber sendCompleted];
                }
            }];
        }

即使你不熟悉Reactive Cocoa,它也非常简单。

出于某种原因,该代码适用于一个帐户(发布新闻),之前已经过授权,但是当我尝试为另一个帐户分享新闻时,它会完成阻止但发送错误

  

FBSDKLog:警告:访问令牌缺少publish_actions权限

。显然,没有新闻分享。

为什么会这样?

2 个答案:

答案 0 :(得分:2)

要允许使用FBSDK在您的应用内发布,您必须在登录时询问用户的其他权限:publish_actions

示例:

 [loginManager logInWithPublishPermissions:@[@"publish_actions"]
                         fromViewController:self
                                    handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
    //TODO: process error or result.
  }];

Référence:
https://developers.facebook.com/docs/facebook-login/ios

答案 1 :(得分:2)

对所有可能感兴趣的人。

上面的代码没有问题。问题是,Facebook需要批准和审核应用,然后才能为用户提供public_actions,而不是https://developers.facebook.com中的管理员。

因此,您必须遵循Facebook团队的具体说明才能使该权限范围可用。