我正在使用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();
}
}
Run Code Online (Sandbox Code Playgroud)
一般来说,如果您撤销 Facebook 的许可,它在本地(在您的应用程序中)不会改变。在这种情况下,如果您的应用程序没有足够的权限来执行特定请求,facebook api 将通知您权限错误 (200)。假设您想要发布并且本地令牌具有发布权限,那么如果您尝试发布,API 将返回错误代码 200。此时您知道必须重新请求发布权限,并且如果用户授予您的应用程序此权限,将调用 AccessTokenTracker。
请注意,根据 Facebook Android SDK,“本地”访问令牌可能已过时。查看 AccessToken 类的 getPermission() 方法的 javadoc。
| 归档时间: |
|
| 查看次数: |
3439 次 |
| 最近记录: |