iOS Facebook SDK: active Un jeton d'accès doit être utilisé pour demander des informations sur l'utilisateur actuel
J'ai suivi de nombreux exemples et regardé beaucoup de questions sur ce jeton d'accès de l'erreur, mais je n'arrive pas à trouver pourquoi je reçois d'elle ou comment résoudre le problème.
Je init Facebook comme ils le font dans l'3.1 sdk exemples:
NSArray* permissions = [[NSArray alloc] initWithObjects:@"publish_stream", @"publish_actions", nil];
self.fb = [[FBSession alloc] initWithPermissions:permissions];
[self.fb openWithCompletionHandler:^(FBSession *session,
FBSessionState status,
NSError *error)
{
[self sessionStateChanged:session :status :error];
}];
Cela fonctionne bien et l'utilisateur est invité à accepter l'application des autorisations dans Safari et est retourné à l'application par la suite. Lorsque l'utilisateur est renvoyé à l'application, mon FBSessionState est FBSessionStateOpen.
Quand j'ai essayer ceci:
[FBRequestConnection startForMeWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error)
{
[self showAlert:@"logged in?" result:result error:error];
}];
ou ceci:
NSMutableDictionary* fbPost = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"post from iOS", @"message", nil];
[FBRequestConnection startWithGraphPath:@"me/feed" parameters:fbPost HTTPMethod:@"POST" completionHandler:^(FBRequestConnection *connection, id result, NSError *error)
{
[self showAlert:@"message posted?" result:result error:error];
}];
mais j'obtiens:
FBSDKLog: FBURLConnection <#1126>:
Duration: 936 msec
Response Size: 0 kB
MIME type: text/javascript
Response:
{"error":{"message":"An active access token must be used to query information about the current user.","type":"OAuthException","code":2500}}
J'ai pris le jeton d'accès de mon FBSession et de le mettre en Facebook Jeton d'Accès de l'Débogueur et il montre j'ai un bon jeton:
App ID: <hidden>
Metadata: {"sso":"iphone-safari"}
User ID: <hidden>
Issued: 1351525817 (about an hour ago)
Expires: 1356709817 (in about 2 months)
Valid: True
Origin: Mobile Web Faceweb
Scopes: create_note photo_upload publish_actions publish_stream share_item status_update video_upload
Je dois être en manque quelques petits détails dans les paramètres ou quelque chose.
Merci à tous par avance!
OriginalL'auteur G__ROW | 2012-10-29
Vous devez vous connecter pour publier un commentaire.
Selon les docs, https://developers.facebook.com/docs/reference/ios/3.1/class/FBRequestConnection
"La requête utilise la session active représentée par [FBSession activeSession]."
Cela s'applique pour les méthodes statiques à traiter les demandes. Donc, ce que vous voulez faire est de vous assurer que vous définissez la session active. Procédez de la manière suivante:
Juste avant l'appel à la première FBRequestConnection de commencer* méthode.
Abernathy Ce qui est "FBSession" ? en classe ? je ne peux pas l'importer dans mon projet ? supplémentaires framwork nécessaires pour ce faire ?
FBSession est une classe de l'Facebook SDK pour iOS. Pour plus de détails à l'intégration avec le SDK, commencez ici: developers.facebook.com/ios
Cette réponse est d'or, je vous remercie.
OriginalL'auteur C Abernathy
Bien Après un certain temps, en remarquant que FBSession.activeSession n'était pas nul, ce qui me manquait avant l'envoi de la demande était:
de même pour moi....
il fonctionne bien, moins de code et plus de qualité.
OriginalL'auteur htafoya
J'ai eu cette erreur dans la version 4 du SDK lorsque vous tentez d'utiliser un
FBSDKGraphRequest
objet qui avait été créé avant de vous connecter. Quand j'ai changé pour créer leFBSDKGraphRequest
immédiatement avant de l'utiliser (c'est à dire après avoir connecté) il a bien fonctionné. Il semble que l'initialiseur de cette classe définit un jeton qui n'est pas actualisé lorsque la demande est commencé.J'ai essayé la mise à jour de la demande de
tokenString
de la propriété après la connexion, mais pour une raison que c'est unereadonly
propriété.OriginalL'auteur devios1
/*
déconseillé pour google et facebook
func demande(_ application: UIApplication, ouvrir l'url: URL, sourceApplication: Chaîne de caractères?, annotation: AnyObject) -> Bool {
laissez googleDidHandle = GIDSignIn.sharedInstance().la poignée(url,
sourceApplication: sourceApplication,
annotation: annotation)
ouvert: url,
sourceApplication: sourceApplication,
annotation: annotation)
print(facebookDidHandle)
retour googleDidHandle || facebookDidHandle
}
*/
J'ai donc utilisé,
func demande(_ application: UIApplication,
ouvrir l'url: URL, options: [Chaîne: AnyObject]) -> Bool
{
xcode 8 bêta 3 , ios 10
OriginalL'auteur kavita patel
vous pouvez essayer cela fonctionne pour moi
OriginalL'auteur kavita patel