我试图将图片发布到ID为226338660793052的Facebook页面,但它一直在/ me / photos中结束。我做错了什么?
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
imageToSend, @"source",
facebookMessageTextView.text, @"message",
nil];
[facebook requestWithGraphPath:@"/226338660793052/photos" andParams:params andHttpMethod:@"POST" andDelegate:self];
我没有收到任何错误消息。除了照片最终出现在我自己的专辑,我/照片,而不是在226338660793052 /照片的专辑中,我什么都没得到。
但是,当我只是向该页面发布消息时,我确实在该页面的时间轴上得到了一个成功的帖子:
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
@"http://www.bitsonthego.com", @"link",
@"my profile", @"name",
facebookMessageTextView.text, @"message",
nil];
[facebook requestWithGraphPath:@"/226338660793052/feed" andParams:params andHttpMethod:@"POST" andDelegate:self];
我在这里缺少什么?我知道这一定是可能的,因为我可以使用浏览器将图片上传到所需的页面,作为一个随机的非管理员用户。我似乎无法从图API中做到这一点。
更新
我已经解决了部分问题。您必须使用目标页面的access_token。这就是你得到它的方式:
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
@"access_token", @"fields",
nil];
FBRequest *request = [facebook requestWithGraphPath:@"226338660793052" andParams:params andDelegate:self];
获得结果后,将其添加到上面的交易中:
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
image, @"source",
[result objectForKey:@"access_token"], @"access_token",
facebookMessageTextView.text, @"message",
nil];
FBRequest *request = [facebook requestWithGraphPath:[[result objectForKey:@"id"] stringByAppendingString:@"/photos"] andParams:params andHttpMethod:@"POST" andDelegate:self];
但是,这不起作用,因为Facebook.m将使用默认用户access_token替换这个新的access_token,所以我在第166行附近更改了Facebook.m,来自:
if ([self isSessionValid]) {
[params setValue:self.accessToken forKey:@"access_token"];
}
为:
if ([self isSessionValid]) {
if ([params valueForKey:@"access_token"] == nil)
[params setValue:self.accessToken forKey:@"access_token"];
}
保持您指定的访问代码作为参数的一部分,不受Facebook.accessToken的破坏。现在,这将把图片发布到我感兴趣的页面。
然而,这是有效的,因为我是相关页面的管理员。其他用户将无法发布图片,并且图片将再次出现在他们自己的相册中,因为获取该页面的access_token的调用将返回nil。
根据Facebook文档,如果页面不受限制,就像这个页面一样,那么应该可以将图片发布到它:
注意:
对于需要访问令牌的连接,您可以使用任何有效的连接 如果页面是公共的而不受限制,则访问令牌。连接上 受限制的页面需要用户访问令牌,并且仅对其可见 符合页面上设置的限制条件(例如年龄)的用户。
我是否提到我的网页是公开的而不受限制的?
网页访问权限
以页面形式执行以下操作,而不是当前操作 用户,您必须使用Page的访问令牌,而不是用户访问令牌 常用于读取Graph API对象。此访问令牌可以是 通过向/ USER_ID /帐户发出HTTP GET来检索 manage_pages权限。这将返回一个页面列表(包括 应用程序profilePages)用户具有管理访问权限, 以及那些页面的access_tokens。或者,你可以得到一个 通过发出HTTP GET来获取单个特定页面的页面访问令牌 to / PAGE_ID?fields = access_token with themanage_pages权限,如 如上所述。发布到页面还需要publish_stream 许可,除非另有说明。
那么如何将图片发布到公共/不受限制的页面?我可以从任何浏览器中执行此操作,因此可以,但是如何使用Graph API完成?鉴于我可以在没有access_token shenanigans的情况下发布到Feed,发布图片会有什么不同?
总之,我要做的是使用图谱API将图片(而不仅仅是缩略图网址)发布到公共/非限制页面。
答案 0 :(得分:4)
我的问题此刻!我认为问题在于您重写的框架中的线条,因为Facebook SDK现在是无法编辑的静态库,所以这变得不可能。但是,我已经弄清楚如何创建照片帖子而不用更改SDK - 我使用从应用程序获取的令牌字符串创建新的令牌数据:
FBAccessTokenData *tokenData = [FBAccessTokenData createTokenFromString:tokenString permissions:[FBSession activeSession].accessTokenData.permissions expirationDate:[FBSession activeSession].accessTokenData.expirationDate loginType:FBSessionLoginTypeFacebookApplication refreshDate:nil];
然后我使用fb appID创建新的FBSession(和nullCacheInstance,不知何故,它似乎很重要):
FBSession *sessionFb = [[FBSession alloc] initWithAppID:appID permissions:[NSArray arrayWithObjects: @"publish_stream", @"manage_pages", nil] urlSchemeSuffix:nil tokenCacheStrategy:[FBSessionTokenCachingStrategy nullCacheInstance]];
然后我用创建的tokenData打开新创建的会话,将此新会话设置为活动会话,并且它可以正常工作!
[sessionFb openFromAccessTokenData:tokenData completionHandler:^(FBSession *session, FBSessionState status, NSError *error)
{
}];
[FBSession setActiveSession:sessionFb];
然后调用带有Post参数和源图像的PageAppID /照片请求,并在Facebook页面墙上发布图片来自自己!
[FBRequestConnection startWithGraphPath:[NSString stringWithFormat:@"%@/photos", PageAppID] parameters:params HTTPMethod:@"POST" completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
}];
我认为更改activeSession与改变Facebook中的行类似。
希望今天有人帮助
答案 1 :(得分:0)
尝试发布到PAGE /帖子而不是PAGE /照片,并在帖子中添加图片属性。照片连接适用于页面管理员创建的照片。有关帖子连接的完整属性列表,请参阅https://developers.facebook.com/docs/reference/api/page/#posts。
答案 2 :(得分:0)
很抱歉,如果我错误地理解了您的问题。您无法直接发布到墙上。在facebook API中没有方法可以实现这一点。请查看此链接。
https://developers.facebook.com/docs/reference/api/
以下截图来自该链接。