我正在将Facebook SDK用于Android应用程序,除了用于登录/注销的标准版本之外,还需要2个权限。 这两个权限是读取权限:用户组和发布权限:发布。
问题是在最新的facebook api中需要单独询问每个权限。我很好。
问题是在用户确认后,会话对象不会使用新权限进行更新,除非我注销并再次登录应用程序。
如果我可以立即询问所有权限,这不会是一个问题,但再一次,不再可能。
还有其他方法可以避免这种情况吗?
是的,我已尝试 OnActivityResult 中的所有内容,并且 Session.getActiveSession()对象中的权限未使用新权限进行更新,即使我尝试做它所需的动作。
在每个权限请求之后要求用户注销并登录应用程序是完全不可能的。
这就是我在OnActivityResult中所拥有的(它完全可以正常运行)。
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d("RADARE","ON ACTIVITY RESULT CALLED");
Log.d("RADARE","REQUEST CODE: " + requestCode + " == RESULT CODE: " + resultCode + " == INTENT: " + data.toString());
if (RESULT_CANCELED == resultCode) {
Log.d("RADARE", "Canceled");
}
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
uiHelper.onActivityResult(requestCode, resultCode, data, new FacebookDialog.Callback() {
@Override
public void onError(FacebookDialog.PendingCall pendingCall, Exception error, Bundle data) {
Log.e("Activity", String.format("Error: %s", error.toString()));
}
@Override
public void onComplete(FacebookDialog.PendingCall pendingCall, Bundle data) {
Log.i("Activity", "Success!");
}
});
Session session = Session.getActiveSession();
Log.d("RADARE","Session info: TOKEN: " + session.getAccessToken() + " == PERMISSIONS: " + session.getPermissions().toString() + " == STATE: " + session.getState());
Toast.makeText(this, "You have to logout and login again in order for the service to work.", Toast.LENGTH_LONG).show();
我的第一个想法是使用Session.getPermissions()。contains(“needed_permission_here”)来实际在线检查权限而不是Session对象。
现在它只是进入一个循环:
检查权限=>权限不存在=>跳转到Facebook应用程序询问权限=>用户授予它=>应用程序再次检查权限(即使用户已确认它们也不存在)并跳转到facebook(当然只是回复了确认的权限)并且它们无限地来回跳舞。
除了在线检查权限而不是对象之外,您还有其他想法吗?
答案 0 :(得分:0)
user_groups-限制使用
此权限授予在Facebook尚不可用的平台上构建Facebook品牌客户端的应用程序。例如,Android和iOS应用不会获得此权限的批准。此外,Web,桌面和电视应用程序不会被授予此权限
并检查是否已授予权限
private static final String PERMISSION = "publish_actions";
<- Whatever read permissions you need ->
authButton.setReadPermissions(Arrays.asList("email", "user_birthday",
"read_stream", "user_friends","read_friendlists "));
public void call(Session session, SessionState state,
Exception exception) {
if (session.isOpened()) {
List<String> permissions = session.getPermissions();
if (!permissions.contains(PERMISSION)) {
pendingAnnounce = true;
requestPublishPermissions(session);
return;
}
}
我不知道这对你有多大的帮助..