android facebook sdk 在重启时总是要求登录
android facebook sdk always asking for login on restart
我已经使用 4.0 sdk 实现了 facebook 登录,成功登录后,我获得了一个访问令牌并继续进入主 activity 并且一切正常。
但是当我关闭并重新打开应用程序时,accesstoken 为空。我不知道如何修复它
这是我的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getApplicationContext());
if (BuildConfig.DEBUG) {
FacebookSdk.setIsDebugEnabled(true);
FacebookSdk.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);
}
setContentView(R.layout.activity_login_fb);
prefs = getSharedPreferences("config", Context.MODE_PRIVATE);
editor = prefs.edit();
token_session = "";
callbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().logOut();
accessTokenTracker = new AccessTokenTracker() {
@Override
protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken newAccessToken) {
AccessToken.setCurrentAccessToken(newAccessToken);
updateWithToken(newAccessToken);
}
};
accessToken = AccessToken.getCurrentAccessToken();
updateWithToken(AccessToken.getCurrentAccessToken());
accessTokenTracker.startTracking();
startApp();
}
private void startApp(){
loginButton = (LoginButton)findViewById(R.id.login_button);
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
AccessToken.setCurrentAccessToken(loginResult.getAccessToken());
sendLoginToBackend();
//Log.i("Facebook Login", loginResult.getAccessToken().getToken());
}
@Override
public void onCancel() {
//Log.i("Facebook Login", "Login Cancel");
}
@Override
public void onError(FacebookException e) {
Log.e("Facebook Login", "Login Error");
}
});
}
private void updateWithToken(AccessToken currentAccessToken) {
if (currentAccessToken == null){
Log.i("Facebook Access Token ","null");
}else{
Log.i("Facebook Access Token ","not null");
}
if (currentAccessToken != null) {
if (prefs.getBoolean("datos_completos",false)){
new Handler().postDelayed(new Runnable() {
// THIS WILL BE REMOVED
@Override
public void run() {
//Intent i = new Intent(self, MainActivity.class);
//startActivity(i);
//finish();
}
}, 500);
}
}
else{
Toast.makeText(this,"NO FB TOKEN",Toast.LENGTH_LONG).show();
}
}
您每次都在 Activity 的 onCreate 方法中调用注销。
LoginManager.getInstance().logOut();
只需删除此行
LoginManager.getInstance().logOut();
在 onCreate 方法上调用注销方法意味着每次应用程序启动时您都会从 facebook 注销。
我已经使用 4.0 sdk 实现了 facebook 登录,成功登录后,我获得了一个访问令牌并继续进入主 activity 并且一切正常。 但是当我关闭并重新打开应用程序时,accesstoken 为空。我不知道如何修复它
这是我的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getApplicationContext());
if (BuildConfig.DEBUG) {
FacebookSdk.setIsDebugEnabled(true);
FacebookSdk.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);
}
setContentView(R.layout.activity_login_fb);
prefs = getSharedPreferences("config", Context.MODE_PRIVATE);
editor = prefs.edit();
token_session = "";
callbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().logOut();
accessTokenTracker = new AccessTokenTracker() {
@Override
protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken newAccessToken) {
AccessToken.setCurrentAccessToken(newAccessToken);
updateWithToken(newAccessToken);
}
};
accessToken = AccessToken.getCurrentAccessToken();
updateWithToken(AccessToken.getCurrentAccessToken());
accessTokenTracker.startTracking();
startApp();
}
private void startApp(){
loginButton = (LoginButton)findViewById(R.id.login_button);
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
AccessToken.setCurrentAccessToken(loginResult.getAccessToken());
sendLoginToBackend();
//Log.i("Facebook Login", loginResult.getAccessToken().getToken());
}
@Override
public void onCancel() {
//Log.i("Facebook Login", "Login Cancel");
}
@Override
public void onError(FacebookException e) {
Log.e("Facebook Login", "Login Error");
}
});
}
private void updateWithToken(AccessToken currentAccessToken) {
if (currentAccessToken == null){
Log.i("Facebook Access Token ","null");
}else{
Log.i("Facebook Access Token ","not null");
}
if (currentAccessToken != null) {
if (prefs.getBoolean("datos_completos",false)){
new Handler().postDelayed(new Runnable() {
// THIS WILL BE REMOVED
@Override
public void run() {
//Intent i = new Intent(self, MainActivity.class);
//startActivity(i);
//finish();
}
}, 500);
}
}
else{
Toast.makeText(this,"NO FB TOKEN",Toast.LENGTH_LONG).show();
}
}
您每次都在 Activity 的 onCreate 方法中调用注销。
LoginManager.getInstance().logOut();
只需删除此行
LoginManager.getInstance().logOut();
在 onCreate 方法上调用注销方法意味着每次应用程序启动时您都会从 facebook 注销。