1

在我的应用程序中,我要求用户通过 facebook 登录,然后我将收到的令牌发送到服务器,从我想要发布到用户时间线的位置。

我使用 sromku 简单的 facebook 包装器。我请求这些权限:

Permission[] permissions = new Permission[] {
    Permission.USER_PHOTOS,
    Permission.EMAIL, Permission.PUBLISH_ACTION,
    Permission.PUBLIC_PROFILE, Permission.READ_FRIENDLISTS,
    Permission.USER_ABOUT_ME
};

问题是,如果我从 android 应用程序向用户发布 Feed 对象,它会毫无问题地发布,但是当我尝试从服务器做同样的事情时,我得到:

(#200) The user hasn't authorized the application to perform this action'

如果我为我的令牌请求可用权限,我会得到:

installed [status] => granted
public_profile [status] => granted
email [status] => granted
read_friendlists [status] => granted
user_activities [status] => granted
user_photos [status] => granted
user_about_me [status] => granted

没有 publish_actions 和 publish_stream (在我知道的简单 facebook 中没有选项可以问这个问题)。

也许有人可以帮助我确定问题出在哪里?

[编辑] 列出从原始 facebook 会话(使用:simpleFacebook.getSession().getPermissions())对象检索的权限后,我看到:

Permission: public_profile
Permission: email
Permission: contact_email
Permission: read_friendlists
Permission: user_activities
Permission: user_photos
Permission: user_about_me

这真的很奇怪,因为它没有列出我的 publish_actions 权限,但仍然成功地发布到我的提要。

4

2 回答 2

0

根据https://github.com/sromku/android-simple-facebook/blob/master/Simple%20Facebook/src/com/sromku/simple/fb/Permission.java#L46应该可以请求PUBLISH_ACTION权限,正如您在代码中已有的那样。

我猜您没有使用您的应用程序的管理员/测试人员/开发人员用户?!然后,您必须先通过 Facebook 应用审查,然后才能请求扩展权限,如https://developers.facebook.com/docs/apps/review/login#do-you-need-review中所述

于 2014-09-17T07:34:25.573 回答
0

我正在使用这种方法:

publish(feed, true, new OnPublishListener() {});

它会打开 webview 对话框,所以我实际上是在 facebook 上发帖,这就是我不需要许可的原因。当我改为:

publish(feed, new OnPublishListener() {});

我有一个对话框,我必须接受发布许可。之后,我可以从服务器上用我的令牌在 facebook 上发布。

这里的问题是,我认为如果我在创建 SimpleFacebook 对象之前指定所有权限,然后调用登录方法,我将获得所有权限。但这仅适用于读取权限。要获得发布权限,您必须在登录后显式调用 requestNewPermissions 方法,以获得所需的发布权限。

于 2014-09-17T08:36:41.357 回答