通过常规非管理员用户通过iOS应用程序将照片发布到Facebook粉丝页面

时间:2012-06-06 11:00:38

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

我正在尝试将照片发布到我的应用Facebook粉丝页面和用户墙上。 我已经成功将照片发布在用户墙上,但未能将其发布在粉丝页面墙上。 (用户不一定是管理员或页面所有者,只是常规用户。由于粉丝页面可以选择任何人发帖,因此用户甚至不必首先喜欢该页面。对吧?

在谷歌搜索一段时间后,我找到了this answer。根据它,我需要粉丝页面的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
    }

任何人都可以帮我吗?我在这里错过了什么?提前谢谢。

更新

根据this answer,普通用户无法将照片从iOS应用发布到粉丝页面墙,但可以在其上分享照片。现在,我的问题是,如何在用户墙上发布照片并同时在粉丝页面墙上分享?可能吗?如何在粉丝页面墙上分享照片?

更新2

This answer and the question说普通用户可以通过新闻Feed发布到粉丝专页页面,所以我修改了我的代码:

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'

我现在该怎么办?

在等待这么久之后,我想到的问题是,这甚至可能吗?如果是这样,我该如何完成这项任务?如果没有,那么有什么选择呢?请帮忙。

更新3

刚刚发现iOS sdk和javascript sdk中都有known bug用于在粉丝页面墙中发布对话框。这对图像上传也是如此吗?如果有人有解决方案来避免这个错误,请帮助。

4 个答案:

答案 0 :(得分:7)

由于API中存在错误,目前(2012年6月)可能不存在此问题:https://developers.facebook.com/bugs/206254392780441包含详细信息。

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

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

使用Page /photos时,发布到网页的access_token连接将按预期工作;照片将显示在页面的照片页面上,页面的时间轴上,并归因于页面本身(即“来自”页面)

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

答案 1 :(得分:0)

您可以要求用户授予permission - publish_stream
,而不是使用对话框 (因为对话框组件中存在错误,否则不需要)

然后您可以在页面墙上发布(假设页面允许页面设置)。

您可以尝试使用graph api explorer。您可以通过在扩展权限选项卡中授予上述权限来更改页面ID和测试。

注意
您应该记住的另一件事是,您无法在图片参数中发送图像数据。您应该提供图像的链接。

答案 2 :(得分:0)

我只想尝试解决异常错误。可以在您的粉丝页面上发布新闻Feed。不可能以粉丝页面本身的形式发布,因为这需要身份验证(因此访问令牌要求......您必须以该用户身份登录才能发布)。 @Igy已经解决了上述问题。

但是,您没有使用图像选择器获取图像的代码。你得到的例外是因为你试图检查UIImage对象的长度而不是NSData对象(这是Facebook要求的)。要将图像从选取器转换为数据,请使用下面的代码段(将img变量替换为UIImage)。

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]);

答案 3 :(得分:0)

我认为您使用错误的论据发布照片

您应该使用@"url"代替@"picture"

我对此不太确定,但它可能有用。

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

请查看here以了解我的问题