1

在 Android 上使用 beta 3.0 SDK,我打开一个 Facebook 会话,session.openForRead()带有基本权限(电子邮件)的简单调用。

只要我想在用户的墙上发布消息,我就会重新授权会话,并session.reauthorizeForPublish()在对象中包含新的发布权限 (publish_actions) ReauthorizeRequest

一旦最后一个请求成功,调用session.getPermissions()只返回最后一个请求的权限(publish_actions),但会丢失所有以前的读取权限(电子邮件)。

ReauthorizeRequest 的参数权限的文档清楚地说明了“请求的附加权限”,所以我目前不太确定为什么会话在请求后会丢失所有其他权限?

非常感谢,亚历克斯

4

1 回答 1

3

亚历克斯,很抱歉你遇到了这个问题。这是 SDK 中的一个错误,我们正在努力在最终版本之前修复。同时,您可以尝试几种解决方法。

  1. 虽然 Session 对象的权限概念与 Facebook 服务不同步,但与 Session 关联的访问令牌仍然具有这些权限,并且仍可用于进行需要已授予的任何权限的 Graph API 调用(除非当然,用户随后撤销了其中任何一个)。因此,如果您的应用程序逻辑允许您忽略Session.getPermissions()调用的结果(例如,如果您的 UI 流程暗示用户在到达流程中的某个步骤之前必须已经授予了某个权限,那么您可以假设它存在) ,您可以继续进行需要这些权限的 Graph API 调用,而不管getPermissions说什么——关于哪些权限与令牌相关联的真实情况存在于服务中,而不是 Session 对象中。

  2. 如果您的应用程序逻辑需要检查是否已授予某个权限,不幸的是现在您可能需要单独跟踪权限,可能通过声明一个ArrayList<String>您将新权限附加到的位置,可能在您的Session.StatusCallback任何时候会话打开,并在会话关闭时清除它。(您也可以在每次状态转换到OPENED_TOKEN_UPDATED并存储结果时调用“我/权限”。)这应该被认为只是一种临时解决方法,直到真正的修复可用。希望这可以帮助。

于 2012-12-01T00:10:28.630 回答