Facebook SDK 3.8:未返回权限publish_actions

too*_*oom 9 permissions android facebook facebook-graph-api facebook-android-sdk

我正在关注facebook(https://developers.facebook.com/docs/android/share)的facebook android共享教程.该应用程序运行正常,我可以登录Facebook点击演示共享按钮.所以这是我的应用程序:

  1. 用facebook登录
  2. facebook会话对象得到更新,并在会话对象中保存以下权限: user_likes, user_friends, user_status, basic_info
  3. 现在,我想分享一些东西.因此,对共享按钮和称为额外权限的请求的用户点击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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

所以,虽然这似乎是正确的,但必定存在一些错误.未授予publish_actions权限,但我不明白为什么.仅保留现有权限publish_actions.

进一步说明:我已经阅读了一些问题,说明应该出现一个额外的弹出窗口,要求用户授予权限.然而,在我的情况下,这不会发生.也许这就是问题?如果是这样,我需要做什么才能获得弹出窗口?

更新:我还从github尝试了以下要点:https://gist.github.com/vishalpawale/5556996 此示例代码由于完全相同的原因而失败.它没有获得任何publish_action权限.似乎是Facebook SDK中的实际错误?

anb*_*ber 1

对于发布权限,您应该在应用程序设置中发送请求并发送以供审核,请参阅https://developers.facebook.com/docs/apps/review/