Facebook iOS SDK 3.1:“;错误:HTTP状态代码:400“;

Facebook iOS SDK 3.1:“;错误:HTTP状态代码:400“;,ios,facebook,facebook-graph-api,facebook-ios-sdk,Ios,Facebook,Facebook Graph Api,Facebook Ios Sdk,我正在使用iOS6模拟器在Xcode 4.5GM上运行Facebook SDK 3.1。我在iOS设置中连接到FB,并使用新的iOS6 FBConnect UI在我的应用程序中成功连接FB。我有一个访问令牌,可以查看我的朋友,发送应用请求,张贴到我的墙上,等等。但是,每次我启动任何类型的FBURLConnection时,我都会看到它打印到我的控制台上: Error: HTTP status code: 400 当打印此错误时,我进入FB代码并打印响应,我得到: { body =

我正在使用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;
}

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

尽我所能,这是3.1 SDK中引入的一个bug。查看Charles的网络流量,他们试图发布到
graph.facebook.com/[user id]/activities
,但是失败了。

这个错误反映了服务器上的一个错误,在3.1版本发布后不久就修复了。在这一点上,应该没有更多的失败来自这个请求。希望这有帮助

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

[FBSession setActiveSession:session];

这与我在这里的回答相同:

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

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

但是有些仍然有问题,如果您有这个问题,您应该检查登录流,并查看facebook示例,如果您仍然有问题,这可能是一个解决方案的提示

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

FBSessionState仅打开一秒钟,然后更改为关闭,错误为400

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


经过几个小时的调试,我发现了这一点,因为我允许应用程序在iOS中的设置中运行,但我无法发布,而且因为我删除了facebook隐私的权限,该警报不会再次显示,除了通过调试工具手动授予我权限,或者等待24小时,以便我可以再次接受facebook权限警报之外,我无能为力。

我发现,当中的可选属性出现问题时,状态代码400也会与fberrohttperror一起抛出在Facebook=>Open Graph definition面板中定义操作类型字段集


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

经过大量的故障排除和查看有关Stackoverflow的所有建议,我解决了这个错误400(error.code=5)。 在我的例子中,解决方案是确保startWithGraphPath调用中包含的参数(也称为postParams)与所发布内容类型支持的参数完全一致

更具体地说,我用@“ref”键(通常用于FB Insights跟踪)向我/订阅源发布了一个链接

删除@“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(以及所有其他可能的罪犯)检查正常。

我甚至无法正确连接。我甚至遵循了以下指南:我认为这是一个新事物,处理他们对新手机广告安装的跟踪。这需要一个“归属”ID来识别与我看到的丢失的“归属”响应匹配的设备。可能有错误或其他不知道的事。但我的结论是,对于特定的用户,Facebook只允许帖子更新15-20次,然后它会给出代码:400错误,我在3.1 SDK中有这个。和Charles一起,我发现了这一责任:我已经在他们的bug追踪器中记录了这一点:我仍然在3.1中看到这一点。它发生在应用程序第一次请求权限时(如果我已从“我的设置”中的授权应用程序列表中删除FB应用程序)。然而,后续请求仍然有效。这似乎只发生在设备上,而不是在模拟器上。