Ios FBSDKLog缺少权限

Ios FBSDKLog缺少权限,ios,objective-c,facebook,Ios,Objective C,Facebook,我想和facebook分享新闻。代码如下: RACSignal *sign = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) { if([[FBSDKAccessToken currentAccessToken] hasGranted:@"publish_actions"]){ NSLog(@"1 blck"); NSLog(

我想和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];
                }
            }];
        }
RACSignal*符号=[RACSignal createSignal:^RACDisposable*(id订户){
如果([[FBSDKAccessToken currentAccessToken]已授予:@“发布操作”]){
NSLog(@“1 blck”);
NSLog(@“curr tok?%@,[FBSDKAccessToken currentAccessToken]);
[订户发送下一步:@YES];
[用户发送完成];
}否则{
NSLog(@“2 blck”);
FBSDKLoginManager*login=[[FBSDKLoginManager alloc]init];
[登入登出];
login.loginBehavior=FBSDKLoginBehaviorWeb;
[login logInWithPublishPermissions:@[@“publish_actions”]fromViewController:APP.window.rootViewController处理程序:^(FBSDKLoginManagerLoginResult*结果,NSError*错误){
NSLog(@“通过的日志”);
self.isExecuting=是;
如果(错误){
NSError*err=[NSErrorWithDomain:@“ru.myServer.fb”代码:-3用户信息:@{NSLocalizedDescriptionKey:error.localizedDescription}];
[订户发送错误:错误];
}否则如果(结果被取消){
NSError*err=[NSError ERROR WITHDOMAIN:@“ru.myServer.fb”代码:-4用户信息:@{NSLocalizedDescriptionKey:@“БаСаПа”}];
[订户发送错误:错误];
}否则{
NSString*strToken=result.token.tokenString;
NSString*strUserId=result.token.userID;
NSDictionary*dctProps=@{@“token”:strToken,@“user_id”:strUserId};
[订阅方发送下一步:dctProps];
[用户发送完成];
}
}];
}
这很简单,即使你不熟悉活性可可

出于某种原因,该代码对一个帐户有效(发布新闻),该帐户以前已获得授权,但当我尝试为另一个acc共享新闻时,它会完成阻止但发送错误

FBSDKLog:警告:访问令牌缺少发布操作权限

.显然,没有消息共享


为什么会发生这种情况?

要允许使用FBSDK在应用程序内部发布,您必须在登录时询问用户的附加权限:
publish\u actions

例如:

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

所有感兴趣的人

上面的代码中并没有问题。问题是,facebook需要批准和审查应用程序,然后才能使
public\u actions
对用户可用,而不是管理员


因此,你必须遵循facebook团队的具体指示,以使该权限范围可用。

我对这些文档非常熟悉,谢谢。你所说的并不能改变这不是阅读权限的事实,因此应该以不同的方式要求它-请参阅FB say to ask apps for perm的总结例如,在用户首次登录时发布操作,但仅在第一次实际需要权限时(即用户主动单击触发共享的按钮。)@CBroe好的,我错了。我不知道为什么。将更新答案并删除我的“几乎粗鲁”评论;)