1

我已经使用各自的方法集成了 google 和 facebook 登录以及简单登录。但是在成功签名后,我想管理登录和注销会话,这意味着一次只能使用一种登录类型。如果用户已经使用其中之一登录,则禁用其他登录方法。注销后用户可以从三种方法之一登录。

我尝试使用共享偏好来管理会话,但它仅适用于简单登录,不适用于 facebook 和 google 登录。在android中是否有任何其他的会话管理方法。

请帮助,在此先感谢。

4

1 回答 1

0

他们在Android中没有会话管理的概念。当 user 时,您必须将登录状态保存在SharedPreferenceDatabaselogin success中。

对于 sharedPreference,请参阅在 android 中存储登录数据

                    **FACEBOOK**

要在您的函数中获取以下代码的 facebook 活动会话调用

void isFacebookActiveSession(){
     Log.d("FacebookLogin"," login from Fb");
     facebookSession = Session.getActiveSession();
     Log.d("FacebookLogin"," Fb session = "+facebookSession);
     facebookSession.openActiveSession(this, true, statusCallback);
}

并实现回调。

Session.StatusCallback statusCallback = new Session.StatusCallback() {
        @Override
        public void call(final Session session, SessionState sessionState, Exception e) {
            if (session.getPermissions().size() > 0) {
                Request request = Request.newMeRequest(session,
                        new Request.GraphUserCallback() {
                            @Override
                            public void onCompleted(GraphUser user, Response response) {
                                // If the response is successful
                                if (session == Session.getActiveSession()) {
                                    if (user != null) {
                                       // use is login and jump to another activity or do whatever your requiements
                                    }else{
                                        // login page
                                    }   

                                }
                            }
                        });
                request.executeAsync();
            }
            else {
                if (facebookSession != null)
                facebookSession.close();
            }
        }
    };

检查 google plus 登录状态。

googleClient = new GoogleApiClient.Builder(this)
                            .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
                                @Override
                                public void onConnected(Bundle bundle) {
                                    googleClient.disconnect();
                                    // already log in jump to another activity
                                }

                                @Override
                                public void onConnectionSuspended(int i) {
                                    if(loginAttempts < MAXIMUM_ATTEMPTS) {
                                        googleClient.connect();
                                        loginAttempts++; // try to reattempt 
                                    }
                                }
                            })
                            .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
                                @Override
                                public void onConnectionFailed(ConnectionResult connectionResult) {
                                   // Not logged in redirect login page
                                    googleClient.disconnect();
                                }
                            })
                            .addApi(Plus.API)
                            .addScope(Plus.SCOPE_PLUS_LOGIN)
                            .build();
                    googleClient.connect();
于 2016-01-14T07:01:59.567 回答