Android Facebook 每次都要求登录?

标签 android facebook facebook-graph-api

在我的集成 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();
        }
    }

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

最佳答案

一旦您的用户登录,获取访问 token 并使用SharedPreferences将它们保存在您的设备中。 .

下次用户打开您的应用时,打开您的 SharedPreference 文件并从那里检索访问 token 的值。

从存储中检索值后,使用 isSessionValid() 检查 session 是否仍然有效。

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

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

关于Android Facebook 每次都要求登录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14933215/

相关文章:

java - 在 Android 中从 JSON 数组中获取值

android - 来自两个具有相同 ID 的布局的两个组件

java - Android Firebase 推送通知自定义声音不起作用

php - 将 Facebook 数据存储在 MySQL 中

r - 如何在 R 中替换 "unexpected escaped character"

android - 动画 - 同步嘴唇波或 MP3

ios - Facebook graph API将多张照片发布到相册和提要

javascript - Facebook 登录设置 : Where is the "Enable Client Access Token Flow" switch?

c - Facebook连接使用C语言

go - 使用 golang.org/x/oauth2 通过 golang Facebook 身份验证获取电子邮件数据