Facebook的图片发布到了错误的地方

我试图将图片发布到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 /照片的专辑中,我什么都没得到。

但是当我向该页面发布消息时,我确实在页面的时间轴上得到了一个成功的post:

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

这使得您指定的访问代码成为params的一部分,而不受Facebook.accessToken的破坏。 现在,这将把图片发布到我感兴趣的页面。

但是,这是有效的,因为我是相关页面上的管理员。 其他用户将无法发布图片,并且图片将再次出现在他们自己的相册中,因为获取该页面的access_token的调用将返回nil。

根据Facebook文档,如果页面不受限制,如此页面那样,则应该可以向其发布图片:

注意:

对于需要访问令牌的连接,如果页面是公共的且不受限制,则可以使用任何有效的访问令牌。 受限页面上的连接需要用户访问令牌,并且仅对满足页面上设置的限制条件(例如年龄)的用户可见。

我是否提到我的页面是公开的而不受限制的?

页面访问令牌

要以页面而不是当前用户身份执行以下操作,您必须使用Page的访问令牌,而不是通常用于读取Graph API对象的用户访问令牌。 可以通过使用manage_pages权限向/ USER_ID / accounts发出HTTP GET来检索此访问令牌。 这将返回用户具有管理访问权限的页面列表(包括应用程序profilePages)以及这些页面的access_tokens。 或者,您可以通过使用themanage_pages权限向/ PAGE_ID?fields = access_token发出HTTP GET来获取单个特定页面的页面访问令牌,如上所述。 除非另有说明,否则发布到页面还需要publish_stream权限。

那么如何将图片发布到公共/不受限制的页面? 我可以从任何浏览器中执行此操作,因此可以,但是如何使用Graph API完成? 鉴于我可以在没有access_token shenanigans的情况下发布到Feed,发布图片会有什么不同?

总之,我想要做的是使用Graph API将图片(而不仅仅是缩略图URL)发布到公共/非限制页面。

我的问题此刻也是如此! 我认为问题在于你重写的框架中的线条,因为Facebook SDK现在是无法编辑的静态库,所以这变得不可能。 但是,我已经想出如何创建照片post无需更改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 / photos的请求,并在Facebook页面墙上发布图片来自自己!

 [FBRequestConnection startWithGraphPath:[NSString stringWithFormat:@"%@/photos", PageAppID] parameters:params HTTPMethod:@"POST" completionHandler:^(FBRequestConnection *connection, id result, NSError *error) { }]; 

我认为更改activeSession与改变Facebook.m中的行类似

希望这对今天有人有帮助

尝试发布到PAGE /post而不是PAGE /照片,并在post中添加图片属性。 照片连接适用于页面管理员创建的照片。 有关post连接的完整属性列表,请参阅https://developers.facebook.com/docs/reference/api/page/#posts 。

很抱歉,如果我错误地理解了您的问题。您无法直接发布到wall.tace API中没有方法可以实现这一点。请查看此链接。

https://developers.facebook.com/docs/reference/api/

以下截图来自该链接。 在此处输入图像描述