【问题标题】:How to use AccessTokenTracker in Android Facebook SDK如何在 Android Facebook SDK 中使用 AccessTokenTracker
【发布时间】: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();
    }



}

【问题讨论】:

  • 迭戈,你解决了这个问题吗?我也面临同样的问题。

标签: android facebook


【解决方案1】:

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

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

【讨论】:

  • 我们不能在发出图形请求之前使用 AccessToken.getPermissions() 并检查我们是否有适当的权限吗?或 AccessToken.getPermissions() 只是检查在移动设备上本地兑现的内容(可能不等于授予用户帐户的权限)?
  • 根据 Facebook 文档,“本地”访问令牌可能已过时。这意味着您不知道您的本地令牌是否与服务器的令牌一致。您可以试试这个:获取您的 Facebook 应用的发布权限,然后将其从您 Facebook 帐户的应用管理菜单中删除。现在检查本地/缓存令牌的权限。
【解决方案2】:

你忘记打电话了

accessTokenTracker.startTracking()

...FB 在他们的AccessTokenTracker documentation 中没有提到它,但你应该调用它来使其工作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    相关资源
    最近更新 更多