【问题标题】:post status on facebook在脸书上发布状态
【发布时间】:2013-10-08 17:59:07
【问题描述】:

我正在实现一个用户可以在其中发布状态的应用。如果用户是他/她设备中的默认登录名,则以下代码将起作用

  if(!self.accountStore)
    self.accountStore = [[ACAccountStore alloc] init];
if(NSClassFromString(@"SLComposeViewController") != nil)
{
    ACAccountType *facebookTypeAccount = [self.accountStore 
    accountTypeWithAccountTypeIdentifier:@"com.apple.facebook"];
    NSLog(@"facebookTypeAccount..:%@",facebookTypeAccount);
    NSArray *accounts = [self.accountStore accountsWithAccountType:facebookTypeAccount];
    if (facebookTypeAccount) {
        if ([accounts respondsToSelector:@selector(count)]) {
            [self.accountStore requestAccessToAccountsWithType:facebookTypeAccount
                                                       options:@{ACFacebookAppIdKey: @"214267482030378", ACFacebookPermissionsKey: @[@"email"]}
                                                    completion:^(BOOL granted, NSError *error) {
                                                        if(granted){
                                                            NSArray *accounts = [self.accountStore accountsWithAccountType:facebookTypeAccount];
                                                            _facebookAccount = [[accounts lastObject]retain];
                                                        }
                                                        else
                                                        {
                                                            NSLog(@"Failed, Error: %@", error);
                                                        }
                                                    }];
        }
        else
        {
            [self openSession];
        }
    }
} 

否则控制会转到这个方法

- (void)openSession{
NSArray *permissions = [[NSArray alloc] initWithObjects:
                        @"publish_stream",@"email",
                        nil];
[FBSession openActiveSessionWithPublishPermissions:permissions
                                   defaultAudience:FBSessionDefaultAudienceEveryone
                                      allowLoginUI:YES
                                 completionHandler:^(FBSession *session, FBSessionState state, NSError *error)
 {
     [self sessionStateChanged:session state:state error:error];

 }];

}

但是登录后我需要在 Facebook 上发送状态。如果我尝试使用这种方法

   -(void)poststatus{
[[FBSession activeSession] reauthorizeWithPublishPermissions:@[ @"publish_stream" ]  
defaultAudience:FBSessionDefaultAudienceEveryone completionHandler:^(FBSession 
*authSession, NSError *authError) {
    // If auth was successful, create a status update FBRequest
    if (!authError) {
        FBRequest *postRequest = [FBRequest requestForPostStatusUpdate:@"Hello, world!"];
        [postRequest startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
            // TODO: Check for success / failure here
        }];
    }
}];

}

然后它给出错误 Failed, Error: Error Domain=com.apple.accounts Code=8 "The operation could not be completed. (com.apple.accounts error 8.)" 如果有人有请帮帮我关于这个概念的一些想法。

提前致谢。

【问题讨论】:

    标签: ios objective-c facebook


    【解决方案1】:

    要求:

    @[@"publish_stream", @"publish_actions"]
    

    不仅仅是:

    @[ @"publish_stream" ]
    

    阅读更多: https://developers.facebook.com/docs/reference/login/extended-permissions/

    publish_stream  The publish_stream permission is required to post to a Facebook Page's timeline. For a Facebook User use publish_actions.
    

    您还使用了已弃用的功能。尝试:

    [FBSession requestNewPublishPermissions:defaultAudience:completionHandler:];
    

    【讨论】:

    • 我的回答中还有一个提示 - 您正在使用已弃用的方法。
    • 我在我的应用程序上测试了这段代码 - 它有效。也许您对应用程序设置有一些问题?你在沙盒工作吗?
    • 我已经通过实施pastebin.com/d8jcCk33@Grzegorz Krukowski 解决了这个问题,但非常感谢您的支持:)
    • 没问题。我很确定无论如何你都需要@publish_actions 才能让它工作。
    • 我刚刚添加了电子邮件权限亲爱的@Grzegorz Krukowski
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    相关资源
    最近更新 更多