所以我想从iPhone应用程序在我的Facebook页面(我是管理员)上发布照片。我正在使用FB Sessions创建会话,获取读取权限,获得manage_pages权限,然后,我成功获取了我的Facebook页面应用程序ID
[FBRequestConnection startWithGraphPath:@"/me/accounts" completionHandler:^(FBRequestConnection *connection, id result, NSError *error)
{
NSLog(@"%@", [result description]);
}]; // have token, what now?
哪个还好。然后,我尝试将照片发布到app_id /照片Feed,但它不起作用=它正确上传照片,但显示我(如在我的个人资料中)上传照片而不是页面本身。可能是什么问题?
这是params和call
的代码NSDictionary *params = [NSDictionary
dictionaryWithObjects: [NSArray arrayWithObjects:
[UIImage imageNamed:@"Icon.png"],
@"This is my first photo post from xcode app", nil]
forKeys:[NSArray arrayWithObjects:
@"source",
@"message", nil]];
[FBRequestConnection startWithGraphPath:@"MyPageID/photos" parameters:params HTTPMethod:@"POST" completionHandler:^(FBRequestConnection *connection, id result, NSError *error)
{
NSLog(@"%@", [result description]);
} ];
来自调用的[result description]
日志很好(它返回id = xx和“post_id”= yy,我认为这是正确的),就像调用本身一样 - 唯一的问题是它显示了我作为作者,而不是Page本身。
MyPageID是正确的,因为调用
NSDictionary *paramsFeed = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"This is my first page post from xcode app", nil] forKeys:[NSArray arrayWithObjects:@"message", nil]];
[FBRequestConnection startWithGraphPath:@"390106241058188/feed" parameters:paramsFeed HTTPMethod:@"POST" completionHandler:^(FBRequestConnection *connection, id result, NSError *error)
{
NSLog(@"result: %@", [result description]);
}];
另外,调用me/photos
并使用dictionaryKey @“picture”发布照片,并将照片完美地张贴在我自己的墙上。
有谁知道问题可以隐藏在哪里?
答案 0 :(得分:1)
我找到了解决方案,虽然我觉得奇怪的是我没有为/ feed页面更新做这个
非常感谢Mr. Arpit Kumar Kulshrestha,他在我之前的问题中指出了正确的方法(Xcode - how to share photo from iPhone app to Facebook managed page feed)
解决方案:
我之前尝试过设置一个新的FBSession
,但它仍然有很多错误,所以我离开了那条路线去了另一条路线。但是,做到这一点非常有意义 -
创建FBAccessTokenData
,其中包含Page的标记,并将其他内容设置为与活动会话相同 - 就像这样
FBAccessTokenData *tokenData = [FBAccessTokenData createTokenFromString:pageTokenString permissions:[FBSession activeSession].accessTokenData.permissions expirationDate:[FBSession activeSession].accessTokenData.expirationDate loginType:FBSessionLoginTypeFacebookApplication refreshDate:nil];
然后,需要创建一个新的FBSession
,重要的是,它需要将tokenCacheStrategy设置为没有数据的东西,即[FBSessionTokenCachingStrategy nullCacheInstance]
。我做了一个空白的分配([[FBSession alloc] init]
),这给了我很多错误,但是当我使用这个时
FBSession *sessionFb = [[FBSession alloc] initWithAppID:appID permissions:[NSArray arrayWithObjects: @"publish_stream", @"manage_pages", nil] urlSchemeSuffix:nil tokenCacheStrategy:[FBSessionTokenCachingStrategy nullCacheInstance]];
它完美无缺。当你有这个新的会话时,你想打开数据来去的路径,你可以这样做:
[sessionFb openFromAccessTokenData:tokenData completionHandler:^(FBSession *session, FBSessionState status, NSError *error)
{
}];
并且它开始正常工作之前的最后一部分是将activeSession设置为这个新分配和打开的会话,这样:
[FBSession setActiveSession:sessionFb];
在我完成所有这些更改后,照片页面共享开始神奇地起作用。 但是,我仍然不确定照片共享之前是如何工作的,但是饲料份额却没有...但是这解决了我的问题。