我正在使用Facebook SDK 4.0
当我进入应用程序设置并删除先前给予的权限时,AccessTokenTracker未被调用。怎么样才能使AccessTokenTracker被调用?
我正在测试登录的用例,但是以下情况无法被AccessTokenTracker跟踪:
某人通过应用程序设置从Facebook中删除您的应用程序,并重新访问您的应用程序。您的应用程序应检测到此并提示用户重新登录。
1)进入您的应用程序,点击“使用Facebook登录”按钮
2)点击“允许读取权限”(如果适用,则再次点击“允许写入权限”)
3)在Facebook上进入应用程序设置并删除您的应用程序
4)重复步骤1-2并验证Facebook登录是否正常工作
这是我的MainActivity代码,它只是一个简单的应用程序,旨在学习如何使用SDK。
package com.ognid.acesstokentracker;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import com.facebook.AccessToken;
import com.facebook.AccessTokenTracker;
import com.facebook.CallbackManager;
import com.facebook.FacebookSdk;
public class MainActivity extends ActionBarActivity {
CallbackManager callbackManager;
AccessTokenTracker accessTokenTracker;
Fragment selection=new SelectionFragment();
Fragment login=new LoginFragment();
String TAG=MainActivity.class.getSimpleName();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(this.getApplicationContext());
callbackManager = CallbackManager.Factory.create();
accessTokenTracker = new AccessTokenTracker() {
@Override
protected void onCurrentAccessTokenChanged(
AccessToken oldAccessToken,
AccessToken currentAccessToken) {
Log.d(TAG,"onCurrentAccessTokenChanged");
updateWithToken(currentAccessToken);
}
};
setContentView(R.layout.activity_main);
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG,"is tracking:"+accessTokenTracker.isTracking());
}
private void updateWithToken(AccessToken token) {
if(token!=null)showFragment(selection);
else showFragment(login);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
@Override
public void onDestroy() {
super.onDestroy();
accessTokenTracker.stopTracking();
}
@Override
protected void onResumeFragments() {
super.onResumeFragments();
updateWithToken(AccessToken.getCurrentAccessToken());
}
void showFragment(Fragment f){
getSupportFragmentManager().beginTransaction().replace(R.id.container,f).commit();
}
}