从iOS应用程序发布时出现Facebook SDK 3.1错误

时间:2013-02-05 09:27:04

标签: iphone ios facebook facebook-graph-api nsuserdefaults

我的iOS应用程序遇到以下问题:

  1. 在发布到用户朋友的墙上时,使用iOS应用我收到错误“com.facebook.sdk error 5”。

  2. 每次检查“FBSession.activeSession.isOpen”时,应用都要求登录。

  3. 以前一切都很好。但是因为我已经改变了我的应用程序ID(现在我必须使用不同的Facebook应用程序)。我收到了错误。

    我对此做了一些研究,发现some solutions。我已经尝试了所有这些,但没有任何作用。

    我写了以下代码登录Facebook:

    - (BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI {
    comingfromFB = YES;
    NSArray *permissions = [[NSArray alloc] initWithObjects:
                            @"friends_birthday",
                            nil];
    
    return [FBSession openActiveSessionWithReadPermissions:permissions
                                                   allowLoginUI:allowLoginUI
                                              completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {
                                                  [self sessionStateChanged:session state:state error:error];
                                              }];
    }
    

    以下发布故事的代码:

    if ([FBSession.activeSession.permissions
             indexOfObject:@"publish_actions"] == NSNotFound) {
            // No permissions found in session, ask for it
            [FBSession.activeSession
             reauthorizeWithPublishPermissions:
             [NSArray arrayWithObject:@"publish_actions"]
             defaultAudience:FBSessionDefaultAudienceFriends
             completionHandler:^(FBSession *session, NSError *error) {
                 if (!error) {
                     // If permissions granted, publish the story
                     [self publishStory];
                 }
             }];
        } else {
            // If permissions present, publish the story
            [self publishStory];
    }
    

    当我运行应用程序时,我收到以下错误:

    Error: HTTP status code: 403
    
    2013-02-05 14:36:47.109 <appname>[1705:c07] Error Domain=com.facebook.sdk Code=5 "The operation couldn’t be completed. (com.facebook.sdk error 5.)" UserInfo=0xaa9af20 {com.facebook.sdk:ParsedJSONResponseKey={
        body =     {
            error =         {
                code = 200;
                message = "(#200) The user hasn't authorized the application to perform this action";
                type = OAuthException;
            };
        };
        code = 403;
    }, com.facebook.sdk:HTTPStatusCode=403}
    

    请帮我理解我哪里出错了。

    我还为NSUserDefaults添加了一些键值对。这可能是一个可能的原因吗?

    感谢。

1 个答案:

答案 0 :(得分:1)

当您第一次使用发布按钮显示视图时,您可能想要检查会话是否已打开并根据会话状态设置发布按钮标题。假设您的按钮最初具有“发布”标题:

[FBSession openActiveSessionWithAllowLoginUI: NO];

if (![FBSession.activeSession isOpen]) 
{
    [self setSendButtonTitle:NSLocalizedString(@"Log in",@"")];
}

然后将以下代码添加到“发布”按钮操作:

- (void) send: (UIButton*) sender
{
    if (![FBSession.activeSession isOpen]) 
    {
        [FBSession openActiveSessionWithPublishPermissions: [NSArray arrayWithObjects: @"publish_stream", nil]
                                       defaultAudience: FBSessionDefaultAudienceEveryone
                                          allowLoginUI: YES

                              completionHandler: ^(FBSession *session,
                                                  FBSessionState status,
                                                  NSError *error) 
                              {
                                  if (error)
                                  {
                                      NSLog(@"error");
                                  } 
                                  else 
                                  {
                                      [FBSession setActiveSession:session];
                                      [self setSendButtonTitle: NSLocalizedString(@"Post",@"")];
                                  }
                              }];

        return;
    }

    // here comes the code you use for sending the message
}

因此,如果用户按下发送并且应用程序未获得授权,它将执行登录操作并将“发布”按钮标题从“登录”更改为“发布”。然后用户可以再次按下按钮发布消息。

希望有所帮助