【问题标题】:Facebook iOS SDK 3.1: "Error: HTTP status code: 400"Facebook iOS SDK 3.1:“错误:HTTP 状态代码:400”
【发布时间】:2012-09-17 16:18:49
【问题描述】:

我正在使用 iOS6 模拟器在 Xcode 4.5GM 上运行 Facebook SDK 3.1。我在 iOS 设置中连接到 FB,并使用新的 iOS6 FBConnect UI 在我的应用程序中成功连接 FB。我有一个访问令牌,可以看到我的朋友、发送应用程序请求、发布到我的墙上等等。但是,每次我发起任何类型的 FBURLConnection 时,我都会看到这个打印到我的控制台:

Error: HTTP status code: 400

我进入 FB 代码并在打印此错误时打印了响应,我得到:

{
    body =     {
        error =         {
            code = 100;
            message = "(#100) The parameter 'attribution' is required for the 'mobile_app_install' activity";
            type = OAuthException;
        };
    };
    code = 400;
}

有谁知道如何解决这个问题?所有功能似乎都可以正常工作,但我的控制台一直看到此垃圾邮件。

【问题讨论】:

标签: ios facebook facebook-graph-api facebook-ios-sdk


【解决方案1】:

在创建会话后立即执行以下操作:

[FBSession setActiveSession:session];

【讨论】:

    【解决方案2】:

    据我所知,这是 3.1 SDK 中引入的一个错误。与 Charles 一起查看网络流量,他们试图 POST 到 graph.facebook.com/[user id]/activities,但失败了。

    【讨论】:

    • 我认为这是处理新移动广告安装跟踪的新事物。这需要一个“属性”ID 来识别与我看到的缺失“属性”响应匹配的设备。
    • 可能有错误或其他不知道的地方。但我得出的结论是,对于特定用户 Facebook 只允许 Post 更新 15-20 次,然后它会给出代码:400 错误
    • 我正在使用 3.1 SDK。与查尔斯一起,我发现这个电话是负责任的:0-op-w.channel.facebook.com
    • 我已经在他们的错误跟踪器中提交了这个:developers.facebook.com/bugs/115149961972168
    【解决方案3】:

    经过多次故障排除并查看了有关 Stackoverflow 的所有建议后,我得到了解决此错误 400 (error.code = 5) 的问题。 就我而言,解决方案是确保我的 startWithGraphPath 调用中包含的参数(又名 postParams)具有完全所发布的内容类型支持的参数。

    更具体地说,我使用 @"ref" 键(通常用于使用 FB Insights 进行跟踪)向我/feed 发布 链接

    去掉@"ref"键后,startWithGraphPath成功了。

    NSMutableDictionary *postParams = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                       @"Test NAME field (from ios app)", @"name",
                                       @"Test caption", @"caption",
                                       @"Test description", @"description",
                                       @"http://example.com/test1.html", @"link",
                                       @"http://example.com/water.jpg", @"picture",
                                       // @"foo", @"ref",  // WRONG!
                                       nil];
    
    [FBRequestConnection startWithGraphPath:@"me/feed"
                                 parameters:postParams
                                 HTTPMethod:@"POST"
                          completionHandler:^(FBRequestConnection *connection,
                                              id result,
                                              NSError *error)
    

    我的 activeSession(和所有其他可能的罪魁祸首)签出 OK。

    【讨论】:

      【解决方案4】:

      这与我在这里的回答相同:Facebook SDK 3.1 - Error: HTTP status code: 400

      但它可以帮助人们仍然得到 400 错误。

      最初的问题在 3.1 SDK 发布后由 Facebook 解决。

      但有些仍然存在问题,如果您遇到此问题,您应该检查登录流程,并查看 Facebook 示例,如果您仍然遇到问题,这可能是解决方案的提示。

      当我无权获取我的信息时,我收到了 400 错误。奇怪的是,我得到了一个 accessToken 甚至是一个有效的登录名(这是因为我在根据 Scrumptious 示例的帮助下构建了我的代码,并且在 Session 状态打开时进行了有效的登录)。

      FBSessionState 仅打开一秒钟,然后变为关闭并出现 400 错误。

      使用 iOS6 原生登录时,您会在请求权限时收到提示,然后手机会在 24 小时内记住该选择。但是,如果用户登录到 facebook 主页然后删除应用程序的权限,手机将记住该设置 24 小时,无论您是否重新安装应用程序。

      这是我在调试几个小时后发现的,因为我从 iOS 的“设置”中允许了该应用程序,但我无法发布,并且因为我从 facebook 隐私中删除了权限,并且警报不会再次显示,所以我无能为力,只能通过调试工具手动授予我权限或等待 24 小时,以便我可以再次接受 facebook 权限警报。

      【讨论】:

        【解决方案5】:

        我发现,当 Facebook=>Open Graph 定义面板中的定义操作类型字段集中的 Optional Properties 出现问题时,FBErrorHTTPError 也会引发状态代码 400。

        在我的例子中,我发布了一个没有标记为isRequired 的属性的操作对象。还要注意isArray 选项,一般来说,要与您发送的内容正确匹配。

        【讨论】:

          【解决方案6】:

          此错误反映了服务器上的一个错误,该错误在 3.1 版本发布后不久得到修复。此时不应再有来自此请求的失败。希望这会有所帮助!

          【讨论】:

          • 我仍然在 3.1 中看到这个。它在应用程序第一次请求权限时发生(如果我已从设置中的授权应用程序列表中删除了 FB 应用程序)。但是,后续请求有效。这似乎只发生在设备上,而不是在模拟器中。
          猜你喜欢
          • 1970-01-01
          • 2012-10-23
          • 2021-01-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-12-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多