使用iOS SDK将照片发布到Facebook粉丝页面

时间:2010-11-23 18:45:50

标签: ios objective-c facebook facebook-graph-api

我正在尝试使用iOS SDK和图形API将照片上传到我拥有的Facebook页面。我已经能够将照片上传到我自己的墙上。我也能够作为管理员在我的粉丝页面墙上发布消息并在我的粉丝页面上创建一个专辑,所以我认为我正在拨打正确的电话,但没有成功。

这就是我目前正在做的事情。

我正在使用

登录
Facebook *fb = [[Facebook alloc] init];
self.facebook = fb;
[fb release];
NSArray *permissions =  [[NSArray arrayWithObjects:@"read_stream", @"offline_access", @"publish_stream", @"manage_pages", @"user_photos", @"friends_photos",nil] retain];
[facebook authorize:FB_APP_ID permissions:permissions delegate:self];
[permissions release];

登录后,我请求帐户

[facebook requestWithGraphPath:@"/me/accounts" andDelegate:self];

帐户将返回给我,并为每个页面和我拥有的应用程序提供访问权限。我使用一个简单的循环来解析帐户,为我希望上传照片的页面提供额外的access_token。

然后我将我的facebook对象的访问令牌设置为新的access_token。

facebook.accessToken = new_accessToken;

并尝试使用

将照片上传到我的粉丝页面
UIImage *uploadImage = [UIImage imageNamed:@"t200.jpg"];
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
               uploadImage, @"source", 
             @"test caption", @"message",             
             nil];


[facebook requestWithGraphPath:@"/me/photos" andParams:params
        andHttpMethod:@"POST" andDelegate:self];

我收到的回复是

{"error":{"type":"OAuthException","message":"(#1) An unknown error occurred"}}

这是facebook图形API中的错误吗?我还尝试使用标准HTTPS请求进行此调用,并获得相同的结果。

5 个答案:

答案 0 :(得分:4)

Ater成功登录Facebook,您可以通过请求@“/ me / accounts”获取列表FanPage并迭代到您想要的粉丝页面并通过向@"/FBFanPageID?fields=access_token"

发出请求来请求其访问权限

此accessToken与您的facebook.accesstoken不同。

获取fanPage accessToken后,将其设置为facebook accessToken by

[_facebook setAccessToken:_accessTokenForFanPage]; //这是necc step

现在您可以通过@"/FBFanPageID/photos"

上传到fanPage墙了

@"/FBFanPageID/albums"

请求fanPage相册

@"/AlbumsID/photos"

上传到特定相册

为了上传这些图像,将使用param字典。

NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys: IMAGE,@"source", IMAGECAPTION,@"message",
nil];

答案 1 :(得分:1)

旧的新闻,但......不确定粉丝页面部分,但你需要在“/ me / photos”之后添加“?access_token = ...”或者最终用于图表API的任何内容未知错误。 facebook sdk不会自动添加访问令牌,因此您必须自己添加。

[facebook requestWithGraphPath:[NSString stringWithFormat:@“/ me / photos?access_token =%@”,facebook.accessToken] andParams:params andHttpMethod:@“POST”andDelegate:self];

答案 2 :(得分:1)

我有非常相似的代码并且它有效,唯一略有不同的是我在AppDelegate中创建Facebook实例..

QRSMAppDelegate * delegate =(QRSMAppDelegate *)[[UIApplication sharedApplication] delegate];

if (![[delegate facebook] isSessionValid]) {
    [[delegate facebook] authorize:permissions];

和我一样,我最初在视图控制器中创建了Facebook实例,并且出现了很多奇怪的错误。问题(我后来发现)是... Facebook通过将URL传递给Facebook类实例来响应,并且从外部到应用程序的唯一入口点是应用程序委托。 (查看Facebook sdk示例应用程序Hackbook)!

- (BOOL)应用程序:(UIApplication *)应用程序            openURL:(NSURL *)url  sourceApplication:(NSString *)sourceApplication         注释:(id)注释{

BOOL ret = [facebook handleOpenURL:url];

.... 返回(RET); }

这里的问题当然是如果我只在我的应用程序的一小部分使用Facebook并远离应用程序代表(Facebook实例化要求您声明代表!

在传递url时面对同样复杂的问题,实际上更容易在app委托中分配init视图控制器(Facebook委托)并将其传递给视图层次结构。

答案 3 :(得分:0)

不确定这一点,因为我对FB iOS集成很新,但我认为你不应该使用我/照片,而是xyz / photos,其中xyz是你要发布的页面的ID。

答案 4 :(得分:0)

您可以向粉丝页面发送电子邮件,并将附件照片显示为管理员发布的照片​​。

在粉丝页面上,选择编辑页面,然后选择移动设备。 在移动页面上,Facebook将显示一个电子邮件地址,您可以使用该地址发布到您的粉丝页面。

在iOS中,我使用http://code.google.com/p/skpsmtpmessage/发送电子邮件

你必须使用这个......

svn checkout http://skpsmtpmessage.googlecode.com/svn/trunk/ skpsmtpmessage-read-only

下载代码

除主题行中的内容外,不要在电子邮件中包含任何文字。否则它不会发布。