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

9

我正在尝试使用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];

我收到了每个页面和应用程序的访问令牌,并将其用于我的账户。我使用一个简单的循环来解析这些账户,以提取我要上传照片的页面所提供的访问令牌。

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

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) 发生未知错误"}}
这是否是Facebook Graph API中的一个bug?我还尝试使用标准HTTPS请求进行此调用,但结果相同。
5个回答

4

成功登录Facebook后,您可以通过请求@"/me/accounts"来获取粉丝页面列表,然后迭代到您想要的粉丝页面,并通过向@"/FBFanPageID?fields=access_token"发出请求来请求其访问令牌。

此访问令牌与您的facebook.accesstoken不同。

在获取fanPage访问令牌之后,通过以下方式将其设置为Facebook访问令牌

[_facebook setAccessToken:_accessTokenForFanPage]; // 这是必要的步骤

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

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

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

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

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


1

我有非常相似的代码,而且它也能工作,唯一稍微不同的是我在AppDelegate中创建了Facebook实例..

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

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

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

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

BOOL ret = [facebook handleOpenURL:url];

返回(ret);

这里的问题当然是,如果我只在应用程序的一小部分中使用Facebook,并且与应用程序委托(Facebook实例化要求您声明委托!)相距甚远,该怎么办?

与其在传递URL时面临同样复杂的问题,实际上更容易的方法是在应用程序委托中分配初始化视图控制器(Facebook委托),并将其传递到视图层次结构中。


1

虽然这已经是老新闻了,但是...我不确定粉丝页面部分,但是你需要在“/me/photos”或者你最终用于图形API的任何东西之后添加“?access_token=...”来避免未知错误。Facebook SDK不会自动添加访问令牌,所以你必须自己添加。

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


如果您查看SDK提供的Facebook.m文件,您会发现SDK将access_token添加到参数中。然而,需要为粉丝页面获取不同的access_token。 - mahboudz

0

我对FB iOS集成还不是很熟悉,但我认为你不应该使用me/photos而是使用xyz/photos,其中xyz是你想要发布到的页面的ID。


我已经尝试使用页面id,但仍然不起作用。使用"me"似乎是正确的,因为当你更改访问令牌时,你所访问的内容也会改变。因此,"me"可以访问你的粉丝页面。 - leo83

0

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

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

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

您必须使用此...

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

下载代码

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


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