我已经实施了Facebook登录按钮,我成功地获得了#34;姓名,用户ID,电子邮件"从当前访问令牌和按钮更改为"退出"
当我重新启动应用程序时,该按钮仍显示" Logout" 数据是否在某处保存?如果是,我该如何检索它?
答案 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获取字段。