Android 再次请求拒绝的facebook许可,但不弹出两次facebook对话框

Android 再次请求拒绝的facebook许可,但不弹出两次facebook对话框,android,facebook,facebook-android-sdk,facebook-permissions,Android,Facebook,Facebook Android Sdk,Facebook Permissions,重新请求之前被拒绝的Facebook许可的正确方式是什么 假设应用程序请求读取权限,如user\u photos。 用户拒绝此任务A 他们继续使用该应用程序,但遇到任务B,任务B需要相同的权限用户照片,但这次用户愿意提供Facebook权限 鉴于此行为,我再次向用户请求此权限,使用Android Facebook SDK,这是通过requestNewReadPermissionsAPI完成的: session.requestNewReadPermissions( new Sessio

重新请求之前被拒绝的Facebook许可的正确方式是什么

假设应用程序请求读取权限,如
user\u photos
。 用户拒绝此任务A

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

鉴于此行为,我再次向用户请求此权限,使用Android Facebook SDK,这是通过
requestNewReadPermissions
API完成的:

  session.requestNewReadPermissions(
    new Session.NewPermissionsRequest(this,PERMISSION_USER_PHOTOS));
但是,只有在Facebook会话打开后(例如,在
会话中.StatusCallback
),此调用才能工作,如下所示:

由于之前已经请求并拒绝了此权限,我们第一次以所需权限打开Facebook会话时,如下所示:

if (session != null && !session.isOpened() && !session.isClosed()) {
    session.openForRead(new Session.OpenRequest(this)
        .setPermissions(PERMISSION_USER_PHOTOS)
        .setCallback(this));
}
Facebook抛出一个微调器和一个本机对话框,但立即返回(不向用户显示权限窗口),表示权限被拒绝(因为这不被视为“重新请求”)

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

我的问题是:

  • 如果我知道许可已经被拒绝过一次,有可能吗 要使用“新建”读取权限打开会话?我找不到合适的人选 在任何变体中打开Facebook会话的方式
    session.openForRead()
    带有此“新权限”标志
  • 如果1。这是不可能的,有没有办法避免整个舞蹈 属于:
    微调器↣ 弹出窗口(但立即返回)↣ 纺纱机↣ 显示 重新请求弹出窗口
  • 我使用的不是“Facebook按钮”,而是FB文档中推荐的自定义UI方法。 具体地说,我正在使用带有
    uilifecyclehelp
    的片段来管理我的Facebook生命周期调用。 以下是我的FB生命周期片段的代码(如果与解决问题相关):


    因此,我拥有
    LoginFbFragment
    PublishFbPhotoFragment
    等片段,这些片段在启动时执行“权限请求+Facebook上的必需操作”调用(或触发该片段上的按钮).

    如果用户拒绝您的许可,您会创建一个新会话吗?@RandykaYudhistira:创建一个新会话似乎遵循相同的行为。拒绝投票的原因:S?@KaushikGopal您找到解决方案了吗?
    if (session != null && !session.isOpened() && !session.isClosed()) {
        session.openForRead(new Session.OpenRequest(this)
            .setPermissions(PERMISSION_USER_PHOTOS)
            .setCallback(this));
    }
    
    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);
        }
    }