1

在我集成 facebook 登录的应用程序中,facebook 登录工作正常,但每次都要求登录。

我通过 facebook 登录工作正常,在我的应用程序中使用应用程序请求,而应用程序请求也要求 facebook 登录。

我想避免告诉我一些想法来做到这一点,

我的登录代码:

Session.openActiveSession(Notication_Webview.this, true, new Session.StatusCallback() {
@Override
public void call(final Session session, SessionState state, Exception exception) {
// TODO Auto-generated method stub
if(session.isOpened()){

Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
// TODO Auto-generated method stub
if(user!=null){

try{            
userName=user.getFirstName();//obj.getString("first_name");
facebookId=user.getId();//obj.getString("id");  
}catch (Exception e) {
Log.e(tag, "getUserIdMethod--->"+e);
}

}
}
});                 
}
}
});

在此应用程序请求代码中,

Session session = Session.getActiveSession();
Facebook mFb = new Facebook("app id");
Bundle params = new Bundle();
params.putString("to", userIDString);
params.putString("message", Message);
mFb.dialog(this.getParent(), "apprequests",
params, new DialogListener() {

public void onComplete(Bundle values) {
// TODO Auto-generated method stub
}

public void onFacebookError(FacebookError e) {
// TODO Auto-generated method stub
}

public void onError(DialogError e) {
// TODO Auto-generated method stub
}

public void onCancel() {
// TODO Auto-generated method stub
}
});

mFb.dialod 方法:

 @Deprecated
    public void dialog(Context context, String action, Bundle parameters, final DialogListener listener) {
        parameters.putString("display", "touch");
        parameters.putString("redirect_uri", REDIRECT_URI);

        if (action.equals(LOGIN)) {
            parameters.putString("type", "user_agent");
            parameters.putString("client_id", mAppId);
        } else {
            parameters.putString("app_id", mAppId);
            // We do not want to add an access token when displaying the auth dialog.
            if (isSessionValid()) {
                parameters.putString(TOKEN, getAccessToken());
            }
        }

        if (context.checkCallingOrSelfPermission(Manifest.permission.INTERNET) != PackageManager.PERMISSION_GRANTED) {
            Util.showAlert(context, "Error", "Application requires permission to access the Internet");
        } else {
            new FbDialog(context, action, parameters, listener).show();
        }
    }

告诉我如何避免第二次登录。

4

3 回答 3

4

用户登录后,获取访问令牌并使用SharedPreferences将它们保存在您的设备中。

下次用户打开您的应用程序时,打开您的 SharedPreference 文件并从中检索访问令牌的值。

从存储中检索值后,检查会话是否仍然有效或未使用isSessionValid().

如果会话仍然有效,则直接登录用户(无需再次询问详细信息)并确保在他登录时更新 SharedPreferences 中访问令牌的值。这样访问令牌的到期时间将延长每次用户登录时。

clear()此外,当用户注销时,不要忘记SharedPreference 文件。

于 2013-02-18T10:28:31.757 回答
0

当您登录会话时,会打开一个静态标志并更新。检查标志后继续执行 isSession()。当您再次注销时重置静态标志。

于 2013-02-18T09:48:38.617 回答
-3

当用户登录时,将用户名和密码存储在某处。您可以为此使用 SQLite。如果硬件注销,则销毁它。当用户再次打开应用程序时,检查数据库中是否有数据。如果是,则直接将其传递给 facebook,否则要求用户再次登录。

于 2013-02-18T09:43:40.750 回答