我在尝试检索其他权限时遇到了麻烦" publish_action"。
我认为用户已经通过Facebook登录,因此授予了基本权限。 然后我有这个代码(来自我的片段):
List<String> permissionsRequested = Arrays.asList("publish_actions");
List<String> permissionsActual = session.getPermissions();
if (!isSubsetOf(permissionsRequested, permissionsActual)) {
pendingPublishReauthorization = true;
Session.NewPermissionsRequest newPermissionsRequest = new Session
.NewPermissionsRequest(this, permissionsRequested);
session.requestNewPublishPermissions(newPermissionsRequest);
return;
}
从调试看,用户授予权限后,控制转到onActivityResult,根据facebook文档,我有
super.onActivityResult(requestCode, resultCode, data);
facebookUiHelper.onActivityResult(requestCode, resultCode, data);
uiHelper也适用于所有onResume&amp; onDestroy方法中使用的文档(根据文档)。
在onCreate中我有
super.onCreate(savedInstanceState);
facebookUiHelper = new UiLifecycleHelper(getActivity(), fbSessionCallback);
facebookUiHelper.onCreate(savedInstanceState);
其中fbSessionCallback已覆盖call()
方法,该方法调用onFbSessionRestore()
:
if (pendingPublishReauthorization &&
state.equals(SessionState.OPENED_TOKEN_UPDATED)) {
pendingPublishReauthorization = false;
// do things with my new session, updated with granted permission. e.g. post to fb.
}
麻烦就是那个
有人可以帮助配置onActivityResult及更高版本的工作流程吗? 我读了facebook文档,我倾向于责怪他们写的很糟糕。也许这只是我太愚蠢...... :((
答案 0 :(得分:0)
这就是我设置它的方式:
Session session = Session.getActiveSession();
if (session != null) {
List<String> permissions = session.getPermissions();
if (!permissions.contains("publish_actions")) {
Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(this, "publish_actions");
session.addCallback(callbacktwo);
session.requestNewPublishPermissions(newPermissionsRequest);
return;
}
}
这是在我的onActivityResult中,但它不需要。我之前在onCreate中使用过它。我在请求中添加了一个回调函数,然后我可以用它来完成下一步。
这是我的回调:
private Session.StatusCallback callbacktwo = new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state, Exception exception) {
Intent in = new Intent(getActivity(), ClassHere.class);
startActivity(in);
}
};
请记住,回调将响应两次,一次是在您启动权限请求时,以及在完成后。所以你必须解决这个/在你的代码中工作。