如何在Android Facebook SDK中使用AccessTokenTracker

die*_*ves 5 android facebook

我正在使用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)

Fra*_*eli 3

一般来说,如果您撤销 Facebook 的许可,它在本地(在您的应用程序中)不会改变。在这种情况下,如果您的应用程序没有足够的权限来执行特定请求,facebook api 将通知您权限错误 (200)。假设您想要发布并且本地令牌具有发布权限,那么如果您尝试发布,API 将返回错误代码 200。此时您知道必须重新请求发布权限,并且如果用户授予您的应用程序此权限,将调用 AccessTokenTracker。

请注意,根据 Facebook Android SDK,“本地”访问令牌可能已过时。查看 AccessToken 类的 getPermission() 方法的 javadoc。