如何在Facebook Android SDK V4中获取当前访问令牌?

时间:2015-04-24 09:25:15

标签: android facebook facebook-login facebook-android-sdk facebook-access-token

我想检查用户是否在主FragmentActivity中登录,但是用户已登录

  

AccessToken.getCurrentAccessToken()

返回null。 我在下面的代码中做错了什么?

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    context = this;          
    FacebookSdk.sdkInitialize(context);
    callbackManager = CallbackManager.Factory.create();
    AccessToken accessToken = AccessToken.getCurrentAccessToken();
    if (accessToken != null) {
        if (!accessToken.isExpired()) {

        }
    }
}

3 个答案:

答案 0 :(得分:2)

用户如何通过LoginButton登录?如果是这样,它会在点击登录按钮后发生,所以您要检查的时间太早。

如果他们已经登录,则访问令牌将从磁盘反序列化,但这是异步操作,因此不会阻止UI线程。您在初始化Sdk后立即检查它,并且异步操作可能尚未完成。我建议您在加载AccessToken时使用AccessTokenTracker进行响应。以下是使用AccessTokenTracker作为参考的示例:https://github.com/facebook/facebook-android-sdk/blob/b384c0655fe96db71229bfdcb981a522f3f1e675/samples/Scrumptious/src/com/facebook/scrumptious/usersettings/UserSettingsFragment.java#L75

答案 1 :(得分:1)

Android Facebook sdk初始化需要一些时间初始化。所以你需要在调用AccessToken.getCurrentAccessToken()

之前等待100毫秒

尝试此解决方案后,它正在为我工​​作

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    context = this;
    FacebookSdk.sdkInitialize(context);

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {

            callbackManager = CallbackManager.Factory.create();
            AccessToken accessToken = AccessToken.getCurrentAccessToken();
            if (accessToken != null) {
                if (!accessToken.isExpired()) {

                }
            }

        }
    }, 100);

}

答案 2 :(得分:0)

您是否从您的活动中调用了Facebook SDK的onActivityResult()? 我也遇到了同样的问题,并通过添加此onActivityResult()回调来解决。