请求再次拒绝Facebook权限,而不会两次弹出Facebook对话框

时间:2015-03-18 03:30:09

标签: android facebook facebook-android-sdk facebook-permissions

重新询问先前被拒绝的Facebook权限的正确方法是什么?

假设某个应用程序要求获取user_photos之类的读取权限。 用户拒绝执行任务A。

他们继续使用该应用程序但遇到需要相同权限user_photos的任务B,但这次用户愿意提供Facebook权限。

鉴于此行为,我再次询问用户 以获取此权限,并使用Android Facebook SDK,使用requestNewReadPermissions API完成此操作:

  session.requestNewReadPermissions(
    new Session.NewPermissionsRequest(this,PERMISSION_USER_PHOTOS));

然而,这个电话似乎只在> >开启了之后(例如Session.StatusCallback中的

public void call(Session session, SessionState state, Exception e) {
    if (session.isOpened()) {
        if (session.getDeclinedPermissions().contains("user_photos")) {
            session.requestNewReadPermissions(new Session.NewPermissionsRequest(this,
            "user_photos"));
            return;
        }
        // ...
    } else if (session.isClosed()) {
        // ...
    }
}

由于此权限早先已被提出并被拒绝,我们首次使用所需权限打开Facebook会话,如下所示:

if (session != null && !session.isOpened() && !session.isClosed()) {
    session.openForRead(new Session.OpenRequest(this)
        .setPermissions(PERMISSION_USER_PHOTOS)
        .setCallback(this));
}
Facebook引发了一个微调器和一个原生对话框,但立即返回(没有向用户显示权限窗口),说权限被拒绝(因为这不被认为是“重新请求”)。

然后它进入会话状态回调,其中,(如前面的代码片段所示),我检查权限是否被拒绝,并请求新的读取权限。 它使用FB本机对话框再次抛出一个微调器,但现在终于显示了本机权限FB权限窗口,让用户可以选择再次接受/拒绝。

我的问题:

  1. 如果我知道许可已被拒绝一次,是否可能 用“新”读取权限打开会话?我找不到了 在任何变体中打开Facebook会话的方法 session.openForRead()使用此“新权限”标记。
  2. 如果1.不可能,有没有办法可以避免整个舞蹈 of:旋转器↣弹出(但立即返回)↣旋转器↣显示 重新请求弹出窗口
  3. 我没有使用“Facebook按钮”,而是使用FB文档中建议的自定义UI方法。 具体来说,我正在使用UiLifecycleHelper的片段来管理我的Facebook生命周期调用。 这是我的FB生命周期片段的代码(如果这与解决问题相关):

    public abstract class FacebookLifecycleFragment
      extends BaseFragment
      implements Session.StatusCallback {
    
        private UiLifecycleHelper _uiLifecycleHelper;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            _uiLifecycleHelper = new UiLifecycleHelper(getActivity(), this);
            _uiLifecycleHelper.onCreate(savedInstanceState);
        }
    
        @Override
        public void onResume() {
            super.onResume();
            _uiLifecycleHelper.onResume();
        }
    
        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            _uiLifecycleHelper.onActivityResult(requestCode, resultCode, data);
        }
    
        @Override
        public void onPause() {
            super.onPause();
            _uiLifecycleHelper.onPause();
        }
    
        @Override
        public void onDestroy() {
            super.onDestroy();
            _uiLifecycleHelper.onDestroy();
        }
    
        @Override
        public void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            _uiLifecycleHelper.onSaveInstanceState(outState);
        }
    }
    

    因此,我有LoginFbFragmentPublishFbPhotoFragment等片段,在其开始时执行“权限请求+ Facebook上的必需操作”调用(或触发该片段上的按钮)。

0 个答案:

没有答案