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

6

我想在主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()) {

        }
    }
}

有没有任何解决方案或变通方法?我也遇到了同样的问题... :( - Sebi
3个回答

2
用户是通过登录按钮进行登录的吗?如果是,那么登录将在他们点击登录按钮后发生,所以您检查的时间太早了。
如果他们已经登录,则访问令牌将从磁盘反序列化,但这是一个异步操作,以便UI线程不会被阻塞。您在初始化Sdk之后立即检查它,而异步操作可能尚未完成。我建议您使用AccessTokenTracker来响应AccessToken加载。以下是使用AccessTokenTracker的示例供您参考:https://github.com/facebook/facebook-android-sdk/blob/b384c0655fe96db71229bfdcb981a522f3f1e675/samples/Scrumptious/src/com/facebook/scrumptious/usersettings/UserSettingsFragment.java#L75

嗨Gokhan,这对我不起作用,请参见https://dev59.com/N4vda4cB1Zd3GeqPVB-- - Ralph Bergmann

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);

}

0

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


是的,我已经调用了 onActivityResult,但是仍然得到了 AccessToken.getCurrentAccessToken() 的空值。 - Sujit Maharjan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接