Facebook通过Graph API和iOS上传照片到相册时出错:(#1)发生未知错误。

5
我看到有几篇关于这个问题的帖子,但是迄今为止没有什么能够帮助我。基本上,我正在编写一个iOS应用程序,并尝试使用Graph API将照片发布到Facebook相册中。图像数据首先从服务器下载,然后POST到Facebook。我正在使用ASIFormDataRequest类和网址https://graph.facebook.com/MY_ALBUM_ID/photos,但是我始终会收到以下错误:
error =     {
    message = "(#1) An unknown error occurred";
    type = OAuthException;
};

我的请求如下:

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:url]];
self.photoRequest = request;
[request setDelegate:self];
[request setPostValue:token forKey:@"access_token"];
[request setPostValue:message forKey:@"message"];
[request setTimeOutSeconds:240];
[request setRequestMethod:@"POST"];

UIImage *image = [UIImage imageWithData:data];

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    NSData *imageData = UIImageJPEGRepresentation(image, 0.8);
    [request setData:imageData forKey:@"source"];

    dispatch_async(dispatch_get_main_queue(), ^{
        [request startAsynchronous];
    });
});

奇怪的是,我正在使用完全相同的方法将照片上传到应用程序的另一个部分,一切正常。我甚至已经将我尝试发送到Facebook的照片上传到我的服务器上,以查看数据是否正确地POST。一切都很好。
我读过,如果Facebook对图像格式有问题,它有时会反弹回我所看到的错误,但错误本身相当模糊。我知道我的access_token是有效的。我向Facebook发出的所有其他请求都正常工作。
你有什么想法吗?

你有没有考虑过与网络相关的问题?比如防火墙的原因?或者是图片太大了?从谷歌搜索结果来看,似乎是HTTP 400错误,也就是请求格式不正确。 - Vincent Guerci
@Vincent G 这绝对不是网络相关问题。作为测试,我使用[UIImage imageNamed:@“imageName”];上传了我的项目中的一张随机图片,而不是UIImage *image = [UIImage imageWithData:data];,它成功地发布了。我们在服务器上使用ImageMagick来生成我要发送的图像。问题似乎出在ImageMagick生成的图像数据上。 - harrisonlee
好的,那么问题不在于ImageMagick。在Photoshop中尝试添加图片并上传到Facebook时:有些可以,有些不行。我找不到特定图片不想上传的原因。从我的应用程序中无法上传的图像也无法在Facebook上手动发布时上传。很奇怪。 - harrisonlee
你设置了请求的 MIME 类型吗?如果没有,Facebook 端的格式检测可能会失败。还有一些报告称,这可能是 Facebook 的安全拒绝(比如太多请求、IP 被列入黑名单等)。你可以尝试从另一个 IP/网络进行测试。 - Vincent Guerci
3个回答

3

好的,我已经弄清楚了!

事实上,Facebook对上传图片有比例限制。我仍然不确定它们是什么,但在我的情况下,一个198x715的图像不符合他们的比例要求。我们联系了Facebook开发团队中的一位工程师,他说他们不会改变限制,但会在API错误消息中添加更好的提示。

希望这能帮助到遇到类似问题的人。


我突然也遇到了同样的问题,从八月中旬开始。使用最新的FB iOS SDK,所有的图像上传调用都会失败,并返回错误响应{"error":{"message":"(#1) An unknown error occurred","type":"OAuthException"}}。我尝试了不同的图像大小,但是全部都一样失败。还有其他的想法吗?这正在阻碍我的客户发布重要的iPad/iPhone应用程序。我也尝试了从不同的IP地址进行操作,以防我的家庭IP地址因某种原因被列入黑名单,但结果相同。 - Edwin
好的,我也解决了我的问题。在我的情况下,上传失败是因为我传递的“message”参数包含一个http://链接(指向苹果应用商店中的一个goo.gl链接)。要么是这个原因,要么是消息值太长了。 - Edwin

0

有一个未记录的图像限制,至少我没有找到任何相关资料。当图像的高度大于宽度时,纵横比限制为1:3。我进行了许多测试以确认这一点,并且可以确定这是今天的限制。


0

此答案所述,问题可能是由于您的应用程序处于沙盒模式下引起的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接