Facebook登录状态被保存? - Android

时间:2016-07-15 06:18:29

标签: android facebook-graph-api facebook-login facebook-sdk-4.0

我已经实施了Facebook登录按钮,我成功地获得了#34;姓名,用户ID,电子邮件"从当前访问令牌和按钮更改为"退出"

当我重新启动应用程序时,该按钮仍显示" Logout" 数据是否在某处保存?如果是,我该如何检索它?

2 个答案:

答案 0 :(得分:1)

尝试以下代码

/* For Facebook */
private CallbackManager mCallbackManager;
private LoginButton login_button;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FacebookSdk.sdkInitialize(getApplicationContext());
    mCallbackManager = CallbackManager.Factory.create();
    setContentView(R.layout.activity_login);

    login_button = (LoginButton) findViewById(R.id.login_button);
    login_button.setReadPermissions("user_friends");
    login_button.registerCallback(mCallbackManager, mCallback);
    login_button.setReadPermissions(Arrays.asList("public_profile", "email", "user_birthday", "user_friends"));

}

private FacebookCallback<LoginResult> mCallback = new FacebookCallback<LoginResult>() {

    @Override
    public void onSuccess(LoginResult loginResult) {

        GraphRequest request = GraphRequest.newMeRequest(
                loginResult.getAccessToken(),
                new GraphRequest.GraphJSONObjectCallback() {

                    @Override
                    public void onCompleted(JSONObject object, GraphResponse response) {

                        // Here you get the response from the facebook
                        Log.e("LoginActivity Response ", response.toString());

                        try {

                            String Name = object.getString("name");
                            String Email = object.getString("email");
                            String Id = object.getString("id");

                            Log.e("Full Info : ", Name + " / " + Email + " / " + Id);

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                    }
                });
        Bundle parameters = new Bundle();
        parameters.putString("fields", "id, name, email, birthday");
        request.setParameters(parameters);
        request.executeAsync();

    }

    @Override
    public void onCancel() {

    }

    @Override
    public void onError(FacebookException error) {

    }
};

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    mCallbackManager.onActivityResult(requestCode, resultCode, data);
}

答案 1 :(得分:1)

  

数据是否已保存在某处?

因此,没有。它不会自动保存在手机中(您可以手动保存)。您看到logout因为Facebook访问令牌仍然有效,直到您手动注销。

如果要检索名称,用户ID,电子邮件等,您仍然必须使用访问令牌从Facebook服务器获取它。 Referring to this official doc,你可以看到:

  

使用Facebook SDK的原生移动应用程序将获得长期访问令牌,大约可以使用60天。当使用您的应用程序的人向Facebook的服务器发出请求时,这些令牌将每天刷新一次。如果没有请求,令牌将在大约60天后过期,并且该人必须再次通过登录流程才能获得新令牌。

您可以在代码中调用AccessToken.getCurrentAccessToken()以获取当前访问令牌。使用它,您可以从Facebook获取字段。