通过普通的非pipe理员用户通过iOS应用发布照片到Facebook粉丝页面

我正在尝试将照片发布到我的应用程序Facebook粉丝页面以及用户墙上。 我已经成功地将照片发布到用户墙上,但未能将其发布在粉丝页面墙上。 ( 用户不一定是pipe理员或页面所有者,只是普通用户,因为粉丝页面有任何人可以发布的选项,用户甚至不喜欢页面,对吗?

谷歌search一下后,我find了答案 。 据此,我需要一个粉丝页面的access_token和一个album_id来这样做。 但我找不到有关如何得到它们的线索。 到目前为止,我已经试过这个代码:

if ([appDelegate.facebook isSessionValid]) { NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys: resultImage, @"picture", nil]; [appDelegate.facebook requestWithGraphPath:@"me/photos" andParams:params andHttpMethod:@"POST" andDelegate:self]; // to post on users wall, works fine NSString *path = [NSString stringWithFormat:@"my/accounts /fan_page_id?fields=access_toke/photos"]; [appDelegate.facebook setAccessToken: FACEBOOK_ACCESS_TOKEN]; [appDelegate.facebook requestWithGraphPath:path andParams:params andHttpMethod:@"POST" andDelegate:self]; // to post on fan page wall, this doesn't work } 

谁能帮我这个? 我在这里错过了什么? 提前致谢。

UPDATE

根据这个答案 ,一个普通用户不能从iOS应用程序发布照片到粉丝页面墙,但可以共享照片。 现在,我的问题是,如何在用户墙上张贴照片并同时在粉丝页面墙上分享照片? 可能吗? 如何在粉丝页面墙上分享照片?

更新2

这个答案和问题说,普通用户可以通过新闻提要发布到粉丝页面墙上,所以我修改了我的代码,如下所示:

 if ([appDelegate.facebook isSessionValid]) { NSMutableDictionary *page_params = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"fan_page_id", @"to", @"Test", @"name", @"Test", @"caption", resultImage, @"picture", nil]; [appDelegate.facebook dialog:@"feed" andParams:page_params andDelegate:self]; } 

但是,我不断得到这个荒谬的错误信息和应用程序崩溃:

 -[UIImage length]: unrecognized selector sent to instance 0x24d110 2012-06-06 19:59:03.114 app_name[2739:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIImage length]: unrecognized selector sent to instance 0x24d110' 

我现在应该怎么做?

在这么长时间的等待之后,我脑海中的问题是,这甚至有可能吗? 如果是这样,我该如何完成这个任务? 如果不是,那么还有什么select? 请帮忙。

更新3

刚刚发现在iOS sdk和javascript sdk中都有一个已知的bug ,用于在粉丝页面墙中发布对话框。 这是否也适用于图片上传? 如果有人有解决scheme来避免这个错误,请帮助。

由于API中存在一个错误,因此目前不能(2012年6月): https : //developers.facebook.com/bugs/206254392780441有详细信息。

一种解决方法是发布到页面的/feed连接并将图像附加到供稿故事。 该图像不会显示为正确的照片上传,但应该可以正常工作。

该错误意味着使用用户access_token发送到页面的/PAGE_ID/photos连接将错误地将照片上传到用户的/photos连接。

在使用页面的access_token时,发布到页面/photos连接将按预期工作; 该照片将出现在页面的照片页面上,页面的时间轴上,并归因于页面本身(即“从”页面)

如果您的应用程序专门用于向页面添加内容,并且具有服务器端组件,则另一种将用户的照片放到页面上的解决方法是让用户通过自己的界面向您提供照片(即将其上传从用户的设备到您的服务器),并使用其中一个页面pipe理员的access_tokens获得一个页面access_token并以这种方式进行上传。

而不是使用对话框,您可以要求用户授予权限 – publish_stream
(因为对话框组件有错误,否则不需要)

然后,您可以张贴在页面墙上(假设页面允许在页面设置中)。

你可以尝试使用graphicsAPI浏览器 。 您可以通过在扩展权限选项卡中授予上述权限来更改页面标识和testing。

注意
还有一件事你应该记住的是,你不能在图像参数中发送图像数据。 你应该提供链接到图像。

我只是试图解决exception错误。 有可能发布到你的粉丝页面新闻提要。 这是不可能作为粉丝页面本身,因为这将需要身份validation(因此访问令牌要求..你必须login为该用户张贴为他们)。 @Igy已经解决了上述问题。

但是,您没有使用图像select器获取图像的位置的代码。 你得到的exception是因为你正在尝试检查UIImage对象的长度而不是NSData对象(这是Facebook所要求的)。 要将图像从拾取器转换为数据,请使用下面的代码片段(用您的UIImagereplaceimgvariables)。

 NSData *imgData = UIImageJPEGRepresentation(img, 0); // Now call to length by facebook SDK will work and the exception will not fail NSLog(@"Size of Image(bytes):%d",[imgData length]); 

我认为你使用错误的参数张贴照片

你应该使用@"url"而不是@"picture"

我不确定这一点,但它可能工作。

我在javaScript中遇到了同样的问题,解决了这个问题。

请查看这里提到我的问题