重新询问先前被拒绝的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权限窗口,让用户可以选择再次接受/拒绝。
我的问题:
session.openForRead()
使用此“新权限”标记。我没有使用“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);
}
}
因此,我有LoginFbFragment
,PublishFbPhotoFragment
等片段,在其开始时执行“权限请求+ Facebook上的必需操作”调用(或触发该片段上的按钮)。