iOS - 无需用户身份验证即可获取Facebook公共页面帖子

时间:2014-03-29 08:02:03

标签: ios iphone facebook facebook-graph-api authentication

关于相关主题存在很多问题,但所有问题都以复杂或无解决方案结束。所以在这里我试图让事情更简单,以便我能得到一个简单的答案。因此,如果您正在考虑这个问题,请在重复之前重新考虑。

假设有一个公共页面,比如“omgfactsonline”,其页面编号为“237061956027”

通过点击以下网址,我们可以获得非常基本的帖子

https://www.facebook.com/feeds/page.php?id=237061956027&format=json

https://www.facebook.com/feeds/page.php?format=rss20&id=237061956027

正如我所说,结果json / xml只包含基本数据(没有细节,例如计数,类型,注释计数),这是不够的。

在Facebook Graph API Explorer上,如果我使用一些示例令牌点击路径 @“/ 237061956027 / posts” ,我会得到所需的结果。

因此,对于iOS应用程序,根据Facebook开发者网站,获得正确帖子的方式是

/* make the API call */
[FBRequestConnection startWithGraphPath:@"/237061956027/posts"
                         parameters:nil
                         HTTPMethod:@"GET"
                  completionHandler:^(
                      FBRequestConnection *connection,
                      id result,
                      NSError *error
                  ) {
                      /* handle the result */
                  }];

但是这个代码的问题是,它需要一个访问令牌,在iOS应用程序中,只能在用户身份验证之后才能获得。由于这是一个公共页面来获取帖子,因此要求用户登录是没有意义的。

请建议我,如何实现预期目标。

2 个答案:

答案 0 :(得分:3)

实际上,Sahil是正确的,但有办法解决这个问题。传入GET参数中的访问令牌,您可以使用AppID和AppSecret查看需要App Access ID的页面。以下应该有效:

//create your params
NSDictionary *params = @{@"access_token" : @"<app_id>|<app_secret"};
/* make the API call */
[FBRequestConnection startWithGraphPath:@"/237061956027/posts"
                         parameters:nil
                         HTTPMethod:@"GET"
                  completionHandler:^(
                      FBRequestConnection *connection,
                      id result,
                      NSError *error
                  ) {
                      /* handle the result */
                  }];

来自Facebook API https://developers.facebook.com/docs/facebook-login/access-tokens#apptokens

答案 1 :(得分:1)

根据Page Documentation,阅读页面的墙 -

  

查看完整公开页面中的字段需要应用或用户访问令牌。   
需要用户访问令牌才能查看此人能够查看的受限页面中的字段(例如限制某些人口统计信息,如位置或年龄,或者只有Page admins可以查看的那些)。   
页面访问令牌也可用于查看受限制的字段。

因此,要在不登录用户的情况下从公共页面获取帖子,您可以创建应用并使用应用访问令牌(app_id | app_secret)(永不过期)。

如果您仍然获得空结果,则表示帖子不公开。例如:

(但请注意,将应用访问令牌暴露给客户端是不安全的,因为这是您应用的密码。)