更新facebook android会话权限,而无需再次注销

时间:2014-10-10 12:16:03

标签: android facebook session facebook-graph-api permissions

我正在将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(当然只是回复了确认的权限)并且它们无限地来回跳舞。

除了在线检查权限而不是对象之外,您还有其他想法吗?

1 个答案:

答案 0 :(得分:0)

引自 FB Login Permissions page

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;
                        }
}

我不知道这对你有多大的帮助..