Как получить текущий токен доступа в Android Android SDK V4?

Я хочу проверить, вошел ли пользователь в систему или нет в основной 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()) { } } } 

Как пользователь входит в систему через LoginButton? Если это так, это произойдет после того, как они нажмут кнопку входа в систему, поэтому там, где вы проверяете, слишком рано.

Если они уже вошли в систему, то токен доступа будет десериализован с диска, однако это операция async, так что поток пользовательского интерфейса не блокируется. Вы проверяете это сразу после инициализации Sdk, и операция async, вероятно, еще не завершена. Я предлагаю вам использовать AccessTokenTracker для ответа при загрузке AccessToken. Вот пример, который использует AccessTokenTracker для справки: https://github.com/facebook/facebook-android-sdk/blob/b384c0655fe96db71229bfdcb981a522f3f1e675/samples/Scrumptious/src/com/facebook/scrumptious/usersettings/UserSettingsFragment.java#L75

Вы назвали onActivityResult() Facebook из своей деятельности? Я также столкнулся с той же проблемой и решил, добавив этот onActivityResult() вызов onActivityResult() .

Инициализация Android Android sdk занимает некоторое время. Инициализация. Поэтому вам нужно подождать всего 100 миллисекунд, прежде чем вызывать AccessToken.getCurrentAccessToken ()

Как только попробуйте это решение, он работает для меня

  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); } 
Intereting Posts