iOS Facebook SDK “active jeton d'accès doit être utilisé pour demander des informations sur l'utilisateur actuel.”
J'ai un jeton mais reçois ce message d'erreur: "Un actif jeton d'accès doit être utilisé pour demander des informations sur l'utilisateur actuel." Toute aide est appréciée 🙂
NSLog(@"TOKEN : %@",[[FBSession activeSession] accessToken]);
NSString *picture = [NSString stringWithFormat:@"http://www.prowebdev.org/WooF/API/OpenGraph.php"];
NSString *image = [NSString stringWithFormat:@"http://www.prowebdev.org/WooF/API/upload/356.jpg"];
NSString *imageBool = [NSString stringWithFormat:@"true"];
NSMutableDictionary *myDictionary = [NSMutableDictionary dictionaryWithObjects:[NSArray arrayWithObjects:picture,image,imageBool, nil] forKeys:[NSArray arrayWithObjects:@"picture",@"image[0][url]",@"image[1][user_generated]", nil]];
FBRequest *request = [FBRequest requestWithGraphPath:@"me/mydogwoofs:posted" parameters:myDictionary HTTPMethod:@"POST"];
FBRequestConnection *connection = [[FBRequestConnection alloc] init];
[connection addRequest:request completionHandler:
^(FBRequestConnection *connection, id result, NSError *error) {
if (!error && result) {
NSLog(@"Posted!");
}else{
NSLog(@"ERROR - %@", error);
}
}];
[connection start];
JOURNAL:
TOKEN : CAAD2QmzDZCHUBALgvURs9AmdO0ZCyj4Uws1pHbX9FYMbptaZAehn6318DEQPyiWpCDWs5O4DXoyAHiBajy37HAdkO648mOgpOZCxc73JhR9n0eO3KejeEkmgKTNSJti2GRmGuZCfhVm9X4cQhhk35ksfEdN8AGR7R6aP3dZBGFWQZDZD
Error: HTTP status code: 400
ERROR - Error Domain=com.facebook.sdk Code=5 "The operation couldn’t be completed. (com.facebook.sdk error 5.)" UserInfo=0x8b8abd0 {com.facebook.sdk:ParsedJSONResponseKey=<CFBasicHash 0x8b88fe0 [0x1bc3b48]>{type = mutable dict, count = 2,
entries =>
1 : <CFString 0x952a8 [0x1bc3b48]>{contents = "code"} = <CFNumber 0x8b885d0 [0x1bc3b48]>{value = +400, type = kCFNumberSInt32Type}
2 : <CFString 0x93eb8 [0x1bc3b48]>{contents = "body"} = <CFBasicHash 0x8b75ae0 [0x1bc3b48]>{type = mutable dict, count = 1,
entries =>
11 : <CFString 0x8b88f20 [0x1bc3b48]>{contents = "error"} = <CFBasicHash 0x8b888d0 [0x1bc3b48]>{type = mutable dict, count = 3,
entries =>
2 : <CFString 0x8b5f550 [0x1bc3b48]>{contents = "type"} = <CFString 0x8b88aa0 [0x1bc3b48]>{contents = "OAuthException"}
3 : <CFString 0x8b88a40 [0x1bc3b48]>{contents = "message"} = <CFString 0x8b889a0 [0x1bc3b48]>{contents = "An active access token must be used to query information about the current user."}
6 : <CFString 0x8b88e40 [0x1bc3b48]>{contents = "code"} = 2500
Je ne suis pas sûr si ce est votre problème, mais j'ai eu quelques problèmes bizarres quand je n'ai pas de mise à jour pour la dernière facebook-ios-sdk. La dernière version 3.5.1, a un emplacement différent pour le jeton d'accès: FBSession.activeSession.accessTokenData.accessToken. Facebook api est parfois un peu bizarre, donc je voudrais certainement essayer de mettre à jour le sdk d'abord.
Aussi, votre jeton d'accès est valide. Dans le futur si vous voulais vérifier, vous pouvez toujours vérifier pour voir si votre jeton d'accès est correct (et donc quelque chose est cassé) en allant directement à l'api graphique. Pour le vérifier, dans un navigateur, accédez à quelque chose comme graph.facebook.com/...
Merci beaucoup pour la réponse! Malheureusement la mise à jour de la FB SDK n'a pas aider à corriger le jeton ne trouve pas de problème 🙁
si vous faites un simple FBRequest, ça fonctionne? comme au lieu d'aller "me/mydogwoofs:publié", vous êtes allé à "me", ça fonctionne?
Aussi, votre jeton d'accès est valide. Dans le futur si vous voulais vérifier, vous pouvez toujours vérifier pour voir si votre jeton d'accès est correct (et donc quelque chose est cassé) en allant directement à l'api graphique. Pour le vérifier, dans un navigateur, accédez à quelque chose comme graph.facebook.com/...
Merci beaucoup pour la réponse! Malheureusement la mise à jour de la FB SDK n'a pas aider à corriger le jeton ne trouve pas de problème 🙁
si vous faites un simple FBRequest, ça fonctionne? comme au lieu d'aller "me/mydogwoofs:publié", vous êtes allé à "me", ça fonctionne?
OriginalL'auteur NSDavidObject | 2013-05-16
Vous devez vous connecter pour publier un commentaire.
Ok, ce qui a fonctionné pour moi a été l'utilisation d'une solution à partir de la friendpicker exemple d'application.
Besoin de vérifier si la session est ouverte et l'ouvrir si elle ne l'est pas.
comment la réouverture de session à l'aide de l'accès à jeton dans iOS ?
OriginalL'auteur davis
Je ne suis pas certain que ce soit la cause de votre problème, mais j'ai eu des problèmes dans le passé avec le Facebook du kit de développement agressif de la mise en cache. Parce que le Facebook SDK ressemble à de multiples endroits pour un valide connecté à Facebook de l'utilisateur, il court-circuite cette recherche sur les appels ultérieurs à la mise en cache de la session courante de l'utilisateur. À tout moment, si l'un des possibles connecté à Facebook les modifications de l'utilisateur, ou auth pour que les modifications de l'utilisateur, alors les choses peuvent devenir un peu fou.
Pour vous donner une idée, le Facebook SDK essaie de l'iOS 5+ système de facebook compte, inter-app appels à facebook propre application native, le cookie du navigateur pour l'affichage web de l'instance en cours d'exécution de votre application, ou de rebond à safari et d'utiliser les cookies dans safari... donc si l'un de ces différentes enregistré dans les comptes modifié, ou l'un de ces comptes revoted autorisations ou a changé son mot de passe (par exemple), les choses peuvent se détraquer si le SDK mis en cache de manière trop agressive. Pour contourner ce problème, j'ai toujours vérifié le jeton d'accès à l'encontre de l'api graphique après, j'ai ouvert un Facebook SDK session. Si elle passe du simple "moi", alors je vais accepter ce jeton d'accès valide, et continuer. Toutefois, si elle échoue, alors je tire la chasse, les valeurs mises en cache dans le SDK et la force de l'Facebook SDK de ré-ouvrir une image de marque nouvelle session, qui irait à travers tous les possibles connecté à Facebook comptes de trouver une session active. Cela peut ou peut ne pas aboutir à une nouvelle application invite d'authentification... cependant, il devrait en résulter un travail jeton d'accès pour vous app.
Un exemple de code
Pour vous aider à comprendre ce que je fais, voici quelques semi-pseudo-code. (Malheureusement, j'ai disparaît trop de choses pour être en mesure de facilement copier-coller un ensemble de travail de code ici, de sorte que vous aurez à remplir les espaces vides dans quelques endroits :P)
Course principale de la boucle
Le point d'entrée de mon Facebook code commence par cette instruction if qui regarde l'état actuel de l'Facebook SDK activeSession et soit reprompts ou vérifie accès:
La plupart des fonctions qui sont appelées devrait être assez simple. Par exemple,
runIfFullAuth
appelle simplement ce que vous voulez après que l'utilisateur a été entièrement authed et que vous avez vérifié jeton d'accès.checkAgainstGraphAPIOnVerified:onInvalidated:onAppRemoved:
est ma propre fonction qui effectue un simple appel àgraph.facebook.com/me?fields=permissions
avec le jeton d'accèsFBSession.activeSession.accessTokenData.accessToken
. Si je reçois un id de retour dans le json retourné, puis j'ai vérifié jeton d'accès. Si je suis absent toute autorisations requises dans le json retourné, puis j'ai invalidé, jeton d'accès. Si je ne reçois rien en retour de l'api graphique, puis-je considérer que l'application en cours de suppression.openSessionHandler
openSessionHandler
est responsable pour la compréhension de ce que l'Facebook SDK est de retour pour nous après nous demande pour une session ouverte. Voici à peu près ce qu'il fait:clearCachedFBInfo
Et enfin, voici comment vous désactivez le Facebook SDK de sa session de mise en cache d'informations:
Pour être honnête, je ne sais pas si cette deuxième appel à
close
est redondant... mais c'est la façon dont je l'ai toujours fait.... hahahaOh, et au sommet de ma fonction
openNewFBSession
, que j'appelle quand j'ai besoin de la force de l'Facebook SDK pour recommencer, et à la recherche d'un nouveau Facebook session, j'ai appeler monclearCachedFBInfo
fonction. Qui garantit que je n'ai pas mis en cache Facebook de l'information dans le SDK, puis-je aller et ouvrir une nouvelle session.En fin de compte, je ne sais toujours pas si c'est la cause du problème que vous avez vu, mais j'ai vraiment ressenti une très méchant problèmes avec apparemment valide les jetons d'accès qui ne sont pas valides dans le passé, et le présent est de savoir comment j'ai résolu mes problèmes. Bonne chance! Et je suis heureux de répondre à toutes les questions que vous pourriez avoir!
OriginalL'auteur Mr. T