Android:Facebook PublishPermissions没有重新输入密码(使用SUPPRESS_SSO时)? [英] Android: Facebook PublishPermissions without retyping password (when using SUPPRESS_SSO)?

查看:144
本文介绍了Android:Facebook PublishPermissions没有重新输入密码(使用SUPPRESS_SSO时)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这个Android应用程序的动作流程是 -

The flow of action on this android app is -


  1. 用户名注册在Facebook上

  2. UserX授予read_permissions

  3. UserX授予publish_permissions

  4. 他的access_token存储在我们的数据库中。

  5. UserX注销

  1. UserX registers on facebook
  2. UserX grants read_permissions
  3. UserX grants publish_permissions
  4. His access_token is stored in our database.
  5. UserX logs out

UserY注册... [按照相同的步骤]

UserY registers ... [follows same steps]

由于需要登录多个用户,我需要SUPPRESS_SSO(感谢如何禁用单个SIgn On的脸书android应用程序?)。

Since it requires login of multiple users I need to SUPPRESS_SSO (thanks to How to disable Single SIgn On for facebook android app?).

现在在Facebook API 3.0中,Facebook使ReadPermissions和PublishPermissions不同。 我成功地要求两个权限,但是要求用户登录两次(因为SSO被禁止并且显示了webview) - 登录webview再次弹出 - 用户必须放入他的电子邮件和密码。 我想访问PublishPermissions或ReadPermissions(按任何顺序),而用户不必重新输入密码。

Now in facebook API 3.0, Facebook has made ReadPermissions and PublishPermissions different. I am succesfully asking for both the permissions, but it requires the user to login twice (since SSO is suppressed and webview is displayed) - the login webview pops up once again - the user has to put in his email and password. I want to access the PublishPermissions, or the ReadPermissions (in any order) without the user having to retype his password.

相关函数java代码如下所示:

Relevant functions from the java code is shown here:

private static final List<String> PERMISSIONS = Arrays.asList("user_photos", "read_friendlists", "email", "publish_actions", "publish_stream");


private void updateView() {
    Session session = Session.getActiveSession();
    if (session.isOpened()) {
        handleAnnounce();
        textInstructionsOrLink.setText(ACKNOWLEDGE_USER);
        buttonLoginLogout.setText(R.string.logout);
        buttonLoginLogout.setOnClickListener(new OnClickListener() {
            public void onClick(View view) { 
               onClickLogout(); 
            }
        });
    } else {
        textInstructionsOrLink.setText(R.string.login);
        buttonLoginLogout.setText(R.string.login);
        buttonLoginLogout.setOnClickListener(new OnClickListener() {
            public void onClick(View view) { 
                onClickLogin();
            }
        });
    }
}

private void onClickLogin() {
    Session session = Session.getActiveSession();
    if (!session.isOpened() && !session.isClosed()) {
        Session.OpenRequest openRequest = new Session.OpenRequest(this).setCallback(statusCallback);
        List<String> readPermissions = Arrays.asList("user_photos", "email", "read_friendlists");
        openRequest.setPermissions(readPermissions);
        openRequest.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO);
        session.openForRead(openRequest);
    } else {
        Session.openActiveSession(this, true, statusCallback);
    }
}


private void requestPublishPermissions(Session session) {
    Log.d(LOG_TAG, "Requesting Publish Permissions...");
    if (session != null) {
        List<String> publishPermissions = Arrays.asList("publish_actions", "publish_stream");
        final int REAUTH_ACTIVITY_CODE = 100;
        Session.NewPermissionsRequest reauthRequest = new Session.NewPermissionsRequest(this, publishPermissions).setRequestCode(REAUTH_ACTIVITY_CODE);
        reauthRequest.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO);
        session.requestNewPublishPermissions(reauthRequest);
    }
}

private void handleAnnounce() {
    Session session = Session.getActiveSession();
    if (session == null || !session.isOpened()) {
        return;
    }

    List<String> permissions = session.getPermissions();
    if (!permissions.containsAll(PERMISSIONS)) {
        requestPublishPermissions(session);
        return;
    }
}


推荐答案

代码似乎很好,这是最近报道的一个API的错误:

Your code seems to be fine, it's an API's bug recently reported:

https://developers.facebook.com/bugs/268146283318403?browse=search_51235ada57ba59615000124

只需耐心,我有相同的错误,我们所能做的只是等待固定的API。

Just patience, I've got the very same error and all we can do is wait for a fixed API.

这篇关于Android:Facebook PublishPermissions没有重新输入密码(使用SUPPRESS_SSO时)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆