Facebook SDK 3.8:未返回权限 publish_actions
Posted
技术标签:
【中文标题】Facebook SDK 3.8:未返回权限 publish_actions【英文标题】:Facebook SDK 3.8 : permission publish_actions not returned 【发布时间】:2014-06-03 03:47:25 【问题描述】:我正在关注 facebook (https://developers.facebook.com/docs/android/share) 的 facebook android 分享教程。该应用程序运行良好,我可以使用 facebook 登录并单击演示共享按钮。所以这是我的应用程序的过程:
-
用脸书登录
facebook 会话对象得到更新,以下权限保存在会话对象中:
user_likes, user_friends, user_status, basic_info
现在,我想分享一些东西。因此,用户单击共享按钮并请求额外的权限,称为publish_actions
以下代码执行此请求:
public class MainActivity extends Activity
private Button shareButton;
private UiLifecycleHelper uiHelper;
private static final List<String> PERMISSIONS = Arrays.asList("publish_actions");
private static final String PENDING_PUBLISH_KEY = "pendingPublishReauthorization";
private boolean pendingPublishReauthorization = false;
...
private void publishStory()
Session session = Session.getActiveSession();
if( session != null)
List<String> permissions = session.getPermissions();
if(!isSubsetOf(PERMISSIONS, permissions))
pendingPublishReauthorization = true;
Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(this, PERMISSIONS);
//Request the new permission here. The answer is processed in onSessionStateChange() method
session.requestNewPublishPermissions(newPermissionsRequest);
return;
...
private void onSessionStateChange(Session session, SessionState state, Exception exception)
//since the session is already open we enter this if branch
if (state.isOpened())
shareButton.setVisibility(View.VISIBLE);
//The result of state.equals(SessionState.OPENED_TOKEN_UPDATED) is false which indicates that the session object has not been updated (as far as I understand the fb api)
Log.e(TAG, "state.equals(SessionState.OPENED_TOKEN_UPDATED) = " + state.equals(SessionState.OPENED_TOKEN_UPDATED));
//Output all the current permission the session has (publish_actions is not included here)
List<String> permissions = session.getPermissions();
Iterator<String> it = permissions.iterator();
Log.e(TAG, "Content of list:");
while(it.hasNext())
Log.e(TAG, "permission = " + it.next());
//Since the OPENED_TOKEN_UPDATED has not been updated nothing further happens here
if (pendingPublishReauthorization && state.equals(SessionState.OPENED_TOKEN_UPDATED))
pendingPublishReauthorization = false;
publishStory();
else if (state.isClosed())
shareButton.setVisibility(View.INVISIBLE);
因此,尽管这似乎是正确的,但肯定还有一些错误。未授予 publish_actions 权限,但我不明白为什么。只保留现有权限publish_actions
。
进一步说明:我读过一些问题,说应该出现一个额外的弹出窗口,要求用户授予权限。但是,在我的情况下不会发生这种情况。也许这就是问题所在?如果是这样,我必须做什么才能获得弹出窗口?
更新:我还尝试了来自 github 的以下要点:https://gist.github.com/vishalpawale/5556996 由于完全相同的原因,此示例代码失败。它没有获得任何 publish_action 权限。似乎是 Facebook SDK 中的实际错误?
【问题讨论】:
我不确定,但我现在正在尝试解决这个问题。显然 facebook 取消了通过 API 发布帖子的能力。你找到解决办法了吗? 我按照developers.facebook.com/docs/android/share 示例发布到用户墙。如果我使用应用程序开发人员电子邮件登录 Facebook,它工作正常。对于非开发人员,我没有获得权限......你也会发生同样的情况吗? 同样的问题,未授予 publish_action 权限。 同样的问题,现在有什么解决办法吗? 您好,检查我遇到的同一个问题并发布了问题***.com/q/23679083/1140237 【参考方案1】:对于发布权限,您应该在应用设置中发送请求并发送以供审核,请参阅https://developers.facebook.com/docs/apps/review/
【讨论】:
【参考方案2】:如果您在 4 月 30 日之后使用 Facebook sdk 3.14.x+,则 facebook 已更改应用程序测试和提交流程。发布有关权限相关的答案。检查this链接
【讨论】:
【参考方案3】:我们在这里遇到了同样的问题。
尝试使用:
Session.getActiveSession().refreshPermissions();
这将刷新可用权限列表
List<String> permissions = session.getPermissions();
它仅适用于 Facebook 注册开发者用户或通过 Facebook 应用仪表板注册的测试用户。
这对我们有用。
【讨论】:
【参考方案4】:它只返回读权限,不返回写权限。试试下面的sn-p
final Bundle permBundle = new Bundle();
permBundle.putCharSequence("permission", "publish_actions");
GraphRequest request = new GraphRequest(
AccessToken.getCurrentAccessToken(),
"/me/permissions", permBundle, HttpMethod.GET,
new GraphRequest.Callback()
@Override
public void onCompleted(GraphResponse graphResponse)
Log.d(TAG, "response2: " + graphResponse.getJSONObject());
try
JSONArray permList = (JSONArray) graphResponse.getJSONObject().get("data");
if(permList.length() == 0)
// no data for perms, hence asking permission
askForFBPublishPerm();
else
JSONObject permData = (JSONObject) permList.get(0);
String permVal = (String) permData.get("status");
if(permVal.equals("granted"))
postToFB();
else
askForFBPublishPerm();
catch (JSONException e)
Log.d(TAG, "exception while parsing fb check perm data" + e.toString());
);
request.executeAsync();
【讨论】:
以上是关于Facebook SDK 3.8:未返回权限 publish_actions的主要内容,如果未能解决你的问题,请参考以下文章
IOS Facebook SDK:尽管授予权限,但登录不返回电子邮件
php sdk 的 Facebook 'redirect_uri' 参数未重定向到传递的 uri(仅重定向返回主页)