安卓:Facebook的PublishPermissions无需重新键入密码(使用SUP preSS_SSO时)? [英] Android: Facebook PublishPermissions without retyping password (when using SUPPRESS_SSO)?

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

问题描述

行动这个Android应用程序的流量 -

  1. 在UserX登记在Facebook
  2. 在UserX授予read_permissions
  3. 在UserX授予publish_permissions
  4. 在他的access_token被存储在数据库中。
  5. UserX注销

  6. UserY寄存器... [遵循相同的步骤]

由于它需要多个用户登录,我需要SUP preSS_SSO(感谢<一href="http://stackoverflow.com/questions/13899955/how-to-disable-single-sign-on-for-facebook-android-app">How禁用单点登录Facebook的Andr​​oid应用?)。

现在在Facebook的API 3.0,Facebook已经取得了ReadPermissions和PublishPermissions不同。 我成功地要求这两个权限,但它要求用户登录两次(因为SSO是燮pressed,显示的WebView) - 登录的WebView弹出再次 - 用户拥有就摆在他的电子邮件和密码。 我要访问的PublishPermissions,或ReadPermissions(以任意顺序),而不必重新输入自己的密码。

从Java code相关的功能如下所示:

 私有静态最后的名单,其中,字符串&GT; PERMISSIONS = Arrays.asList(user_photos,read_friendlists,电子邮件,publish_actions,publish_stream);


私人无效的UpdateView(){
    会话会话= Session.getActiveSession();
    如果(session.isOpened()){
        handleAnnounce();
        textInstructionsOrLink.setText(ACKNOWLEDGE_USER);
        buttonLoginLogout.setText(R.string.logout);
        buttonLoginLogout.setOnClickListener(新OnClickListener(){
            公共无效的onClick(视图查看){
               onClickLogout();
            }
        });
    } 其他 {
        textInstructionsOrLink.setText(R.string.login);
        buttonLoginLogout.setText(R.string.login);
        buttonLoginLogout.setOnClickListener(新OnClickListener(){
            公共无效的onClick(视图查看){
                onClickLogin();
            }
        });
    }
}

私人无效onClickLogin(){
    会话会话= Session.getActiveSession();
    如果(session.isOpened()及!&安培;!session.isClosed()){
        Session.OpenRequest openRequest =新Session.OpenRequest(本).setCallback(statusCallback);
        名单&LT;字符串&GT; readPermissions = Arrays.asList(user_photos,电子邮件,read_friendlists);
        openRequest.setPermissions(readPermissions);
        openRequest.setLoginBehavior(SessionLoginBehavior.SUP preSS_SSO);
        session.openForRead(openRequest);
    } 其他 {
        Session.openActiveSession(这一点,真,statusCallback);
    }
}


私人无效requestPublishPermissions(会话的会话){
    Log.d(LOG_TAG,请求发布权限......);
    如果(会话!= NULL){
        名单&LT;字符串&GT; publishPermissions = Arrays.asList(publish_actions,publish_stream);
        最终诠释REAUTH_ACTIVITY_ code = 100;
        Session.NewPermissionsRequest reauthRequest =新Session.NewPermissionsRequest(这一点,publishPermissions).setRequest code(REAUTH_ACTIVITY_ code);
        reauthRequest.setLoginBehavior(SessionLoginBehavior.SUP preSS_SSO);
        session.requestNewPublishPermissions(reauthRequest);
    }
}

私人无效handleAnnounce(){
    会话会话= Session.getActiveSession();
    如果(会话== NULL ||!session.isOpened()){
        返回;
    }

    名单&LT;字符串&GT;权限= session.getPermissions();
    如果(!permissions.containsAll(权限)){
        requestPublishPermissions(会议);
        返回;
    }
}
 

解决方案

您code似乎是美好的,它是一个API的缺陷最近报道:

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

只是耐心,我已经得到了同样的错误,我们所能做的就是等待一个固定的API。

The flow of action on this android app is -

  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

  6. UserY registers ... [follows same steps]

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

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.

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

解决方案

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

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

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

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

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