Android 再次请求拒绝的facebook许可,但不弹出两次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
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窗口,用户可以选择再次接受/拒绝
我的问题是:
session.openForRead()
带有此“新权限”标志微调器↣ 弹出窗口(但立即返回)↣ 纺纱机↣ 显示 重新请求弹出窗口
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);
}
}