如何在应用程序启动时获取当前的Facebook访问令牌?

Ral*_*ann 3 android facebook facebook-android-sdk facebook-access-token

在应用程序启动时,我需要知道用户是否已登录才能显示登录页面.

我的第一次尝试是打电话AccessToken.getCurrentAccessToken(),但这不起作用,请参阅/sf/answers/2089797461/

我的第二次尝试是使用AccessTokenTracker,但这也不起作用.要使用AccessTokenTracker,我必须首先初始化Facebook SDK.但在此初始化期间,访问令牌被发送到跟踪器.此时未创建跟踪器,无法接收令牌.

我的第三次尝试是创建我自己的AccessTokenTracker,看起来像原始的.我在初始化SDK之前创建并注册了它.现在我的跟踪器在SDK初始化过程中得到了令牌.

凭借这些知识,我在Facebook上打开了一个错误报告:

  • 为什么AccessTokenTracker依赖于初始化的SDK.我认为这是一个错误.
  • 在应用启动时查看用户是否登录的正确方法是什么.

Facebook的答案:

这看起来不像bug.AccessTokenTracker :: onCurrentAccessTokenChanged应该在类收到令牌时通知您.

我知道这不起作用.现在我知道没有错误.

但是如何解决我的问题呢?

这不起作用:

FacebookSdk.sdkInitialize(getApplicationContext());
mAccessTokenTracker = new AccessTokenTracker() {

    @Override
    protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken currentAccessToken) {

        Timber.i("AccessTokenTracker oldAccessToken: " + oldAccessToken + " - currentAccessToken: " + currentAccessToken);
    }
};
Run Code Online (Sandbox Code Playgroud)

小智 5

您需要首先初始化SDK,如您所说.然后创建访问令牌跟踪器,然后通过AccessToken.getCurrentAccessToken()检查当前访问令牌.

如果SDK初始化程序足够快以至于在您创建跟踪器之前设置了令牌,那么您对currentAccessToken的调用将获得令牌.如果sdk初始化比跟踪器注册慢,那么跟踪器将获得访问令牌.