【发布时间】:2023-03-29 15:26:01
【问题描述】:
我正在使用 Facebook SDK 4.0
当我进入应用设置并删除我之前提供的权限时,不会调用 AccessTokenTracker。调用AccessTokenTracker应该怎么做?
我正在测试登录的用例,以下一个没有被AccessTokenTracker跟踪:
有人通过应用设置从 Facebook 删除您的应用并重新访问您的应用。您的应用应检测到这一点并提示用户重新登录。
1) 转到您的应用并点击“使用 Facebook 登录”按钮
2) 点击 OK 接受读取权限(如果适用,再次点击 OK 接受写入权限)
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();
}
}
【问题讨论】:
-
迭戈,你解决了这个问题吗?我也面临同样的问题。