Comment obtenir de l'actuel Facebook jeton d'accès sur l'app commencer?
Sur l'app commencer j'ai besoin de savoir si l'utilisateur est connecté ou pas à afficher une page de connexion ou pas.
Mon premier essai a été d'appeler AccessToken.getCurrentAccessToken()
, mais cela ne fonctionne pas, voir https://stackoverflow.com/a/29854249/1016472
Mon 2ème essai a été d'utiliser le AccessTokenTracker mais cela ne fonctionne pas trop. Pour utiliser le AccessTokenTracker je dois initialiser le Facebook SDK d'abord. Mais au cours de cette initialisation, le jeton d'accès est de l'envoyer sur le tracker. Le tracker n'est pas créé à cette époque et ne peuvent pas recevoir le jeton.
Mon 3ème essai était de créer ma propre AccessTokenTracker qui ressemble à celui d'origine. J'ai créé et enregistré avant j'initialise le SDK. Et maintenant, mon tracker obtenir le jeton lors de ce SDK processus d'initialisation.
Avec cette connaissance, j'ai ouvert un rapport de bug sur Facebook avec les questions:
- Pourquoi le AccessTokenTracker dépend de la initialisée SDK. Je pense
c'est une erreur. - Quelle est la bonne façon de voir si un utilisateur est connecté
ou pas sur l'app démarrer.
La réponse de Facebook:
Ça ne ressemble pas à un bug. Le AccessTokenTracker
::onCurrentAccessTokenChanged devrait vous permettre de savoir quand la classe a
reçu un jeton.
Je sais que ce n'est pas de travail. Et maintenant, je sais il n'y a pas de bug.
Mais comment résoudre mon problème?
Cela ne fonctionne pas:
FacebookSdk.sdkInitialize(getApplicationContext());
mAccessTokenTracker = new AccessTokenTracker() {
@Override
protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken currentAccessToken) {
Timber.i("AccessTokenTracker oldAccessToken: " + oldAccessToken + " - currentAccessToken: " + currentAccessToken);
}
};
OriginalL'auteur Ralph Bergmann | 2015-05-21
Vous devez vous connecter pour publier un commentaire.
Vous devez initialiser le SDK d'abord comme vous l'avez dit. Créez ensuite le jeton d'accès tracker, puis vérifiez le jeton d'accès via AccessToken.getCurrentAccessToken().
Si le SDK de l'initialiseur est assez rapide pour que le jeton est défini avant de pouvoir créer le tracker, votre appel de currentAccessToken va récupérer le jeton. Si le sdk d'initialisation est plus lent que puis tracker d'inscription puis le tracker obtenir le jeton d'accès.
Ok, mais si je ne suis pas sûr si l'utilisateur est déjà connecté ou pas? Si l'utilisateur n'est pas connecté, serait onCurrentAccessTokenChanged jamais le feu?
Si l'utilisateur n'est pas connecté, il ne se déclenche pas. Ce que je décrivais est d'éviter la condition de la course entre votre code de lecture/enregistrement de l'auditeur dans le thread principal et le thread qui lit le jeton du partage des préférences et des jeux de l'actuel. Si vous ne le faites pas comme décrit, il est possible de manquer que la définition de l'événement. Donc tout d'abord créer le tracker, puis vérifiez le jeton.
OriginalL'auteur Gokhan Caglar
Il doit en être ainsi (ce Facebook v4.1.2)
Ok, alors pour obtenir le jeton de l'utilisateur est connecté, vous devez appeler AccessToken.getCurrentAccessToken ()
Cela ne fonctionne pas, reportez-vous à stackoverflow.com/a/29854249/1016472
OriginalL'auteur Anton Savenok
@Gokhan Caglar est droit, le jeton d'accès est null si le Facebook Sdk n'est pas fait en cours d'initialisation. Alors, qu'?
Pas la meilleure solution, à mes yeux, mais en attendant un peu pour le Facebook Sdk peut aider.
OriginalL'auteur Jason Saruulo
Initialiser Facebook SDK dans la Intializer.java l'application, de sorte que le code dans l'activité va s'exécuter après l'initialisation. Ajouter votre Initialiseur de fichier manifeste
OriginalL'auteur Manoj Chaitanya Daggubati
Si vous êtes à la connexion, alors vous pouvez écrire
AccessToken.getCurrentAccessToken();
pour obtenir votre jeton d'accès
OriginalL'auteur Anny
Si vous êtes à la connexion, alors vous pouvez écrire : AccessToken.getCurrentAccessToken(); pour obtenir votre accès tokem
OriginalL'auteur Anny