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

我正尝试使用iOS SDK和graphicsAPI将照片上传到我自己的Facebook页面。 我已经能够上传照片到自己的墙上。 我也可以作为pipe理员发布消息给我的粉丝页面墙,并在我的粉丝页面上创build一个相册,所以我认为我做出了正确的调用,但没有成功。

这是我目前正在做的。

我正在使用login

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

login后,我要求帐户

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

这些账户是通过我拥有的每个页面和应用程序的访问令牌返回给我的。 我使用一个简单的循环来parsing通过帐户额外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)发生未知错误”}}

这是一个在FacebookgraphicsAPI的错误? 我也尝试使用标准的HTTPS请求进行此调用,并获得相同的结果。

Ater成功login到Facebook,您可以通过请求@“/ me / accounts”获得FanPage列表,并通过向@"/FBFanPageID?fields=access_token"发送请求来遍历所需的粉丝页面并请求其访问@"/FBFanPageID?fields=access_token"

这个accessToken与你的facebook.accesstoken不同。

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

[_facebook setAccessToken:_accessTokenForFanPage]; //这是necc一步

现在你可以通过@"/FBFanPageID/photos"上传到fanPage墙上

通过@"/FBFanPageID/albums"请求fanPage相册

通过@"/AlbumsID/photos"上传到特定相册

上传这些图像参数字典将被使用。

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

旧消息,但…不知道粉丝页面的一部分,但你需要在“/ me / photos”之后添加“?access_token = …”,或者你最终使用graphicsAPI来获取未知错误。 Facebook的SDK不会自动添加访问令牌,所以你必须自己做。

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

我有非常相似的代码,它的工作原理,唯一稍微不同的是我在AppDelegate中创buildFacebook实例。

QRSMAppDelegate *委托=(QRSMAppDelegate *)[[UIApplication sharedApplication]委托];

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

就像你我最初在视图控制器中创build的Facebook实例,我出来了很多奇怪的错误。 这个问题(我后来发现)是… Facebook通过传递一个URL到Facebook类实例,并从唯一的入口点到您的应用程序是应用程序代表响应。 (查看Facebook SDK示例程序Hackbook)!

– (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {

 BOOL ret = [facebook handleOpenURL:url]; 

…. return(ret); }

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

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

不知道这一点,因为我是相当新的FB iOS集成,但我认为你不应该使用我/照片,但xyz /照片,其中xyz是您要发布的页面的ID。

您可以发送电子邮件到您的粉丝页面,并获取附加的照片显示,如pipe理员发布它。

在粉丝页面上,select编辑页面,然后select移动。 在移动页面上,Facebook会显示一个电子邮件地址,您可以用来发布到您的粉丝页面。

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

你必须使用这个…

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

下载代码

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