0

Dès que l'utilisateur est connecté, je récupère les informations utilisateur en utilisant ce code:Impossible d'obtenir les informations utilisateur de Facebook avec OAuth 2.0

[_facebook requestWithGraphPath:@"me" andDelegate:self]; 

Il a travaillé pour les premières fois, mais il a fini par a renvoyé une erreur. Je pensais que c'était une chose de session puisque j'ai "offline_access" sur mes permissions. Je me suis connecté sur Facebook et de nouveau compilé à partir d'une construction propre et il retourne encore cette erreur:

Error Domain=facebookErrDomain Code=10000 UserInfo=0x54a2930 "Operation could not be completed. (facebookErrDomain error 10000.)"

Je suppose mon jeton d'accès est valide puisque je peux faire l'affichage. Ai-je raison de supposer cela?

J'ai également remarqué que chaque fois que je me connecte, Facebook ne me redirige pas pour demander la permission si j'autorise mon application à accéder à mes informations utilisateur.

Quelqu'un peut-il me dire ce qui ne va pas?

+0

Hmm .. beaucoup de gens ont aussi le même problème. Jusqu'à présent, forcer isSessionValid à retourner TRUE ou à assigner vos propres dates de péremption. – marie

Répondre

1

Voici une correction temporaire que j'ai utilisée. Vous pouvez trouver cette ligne de la méthode 46 FBLoginDialog.m

- (void) dialogDidSucceed:(NSURL*)url { 
    NSString *q = [url absoluteString]; 
    NSString *token = [self getStringFromUrl:q needle:@"access_token="]; 
    NSDate *expirationDate = [NSDate distantFuture]; 

    if ((token == (NSString *) [NSNull null]) || (token.length ==0)) { 
    [self dialogDidCancel:url]; 
    [self dismissWithSuccess:NO animated:YES]; 
    } else { 
    if ([_loginDelegate respondsToSelector:@selector(fbDialogLogin:expirationDate:)]) { 
     [_loginDelegate fbDialogLogin:token expirationDate:expirationDate]; 
    } 
    [self dismissWithSuccess:YES animated:YES]; 
    } 
} 

Est-ce que tout le monde avec cette demande d'émission la permission de offline_access? C'est la seule raison pour laquelle je peux voir une date d'expiration ne pas être envoyée. Peut-être essayez de ne pas demander l'autorisation offline_access.

+0

Hey merci pour cela, cela a fonctionné. BTW, j'ai également essayé de ne pas demander l'accès hors ligne et il renvoie toujours une date d'expiration nulle. – marie

+0

Facebook l'a corrigé. Cela fonctionne bien maintenant. – marie

0

J'ai eu ce problème, principalement parce que mon compte Facebook a été maxed sur la vie privée.

Il s'agit probablement des autorisations que vous avez transmises lors de la connexion. Par défaut, il ne donnera accès qu'aux informations publiques. Rappelez-vous qu'il y a de moins en moins d'informations qui sont publiques sur Facebook.

Essayez de changer la permission de quelque chose comme "read_stream", nul

Alors, au lieu de [_facebook requestWithGraphPath: @ "moi" andDelegate: self]; Essayez l'utilisation de [_facebook requestWithGraphPath: @ "me/home" etDelegate: self];

Cela devrait renvoyer votre fil de nouvelles. A travaillé pour moi il y a 5 minutes.

0

Pas grand chose à ajouter ici, ça ne marche pas ici aussi. J'utilise le SDK iOS pour publier sur le flux et cela a fonctionné jusqu'à hier. Aujourd'hui, mon client m'a appelé et s'est plaint. Pouah.

J'ai demandé l'autorisation d'accès en ligne et bien sûr le « publish_stream » permission ...

+0

OK, donc j'ai également forcé la méthode isSessionValid à retourner "YES" et cela fonctionne. Mais je ne veux certainement pas expédier avec un tel hack dans mon code qui pourrait gâcher les choses à l'avenir. J'espère qu'il y aura une communication de Facebook à propos de ce problème bientôt. –

2

réponse sur commande semble être authorize différent. Maintenant, il n'y a pas de date d'expiration comme avant. J'ai essayé de forcer isSessionValid à renvoyer TRUE, et cela fonctionne. IsSessionValid vérifie accessToken ET expirationDate.

Comme il n'y a pas de date d'expiration, la fonction retourne FALSE.

Je ne sais pas si c'est une modification temporaire de facebook, ou définitive. Dans ce cas, le SDK doit être fixé, je présume. Et un nouvel appel doit récupérer expirationDate.

+0

Merci cela fonctionne. – marie

+0

Il semble que ce soit réglé par Facebook aujourd'hui. Maintenant, il y a expirationDate (expires_in = 'valeur') si aucun accès offline_access n'est demandé, et expires_in = 0 avec un accès offline_. – ze4

+0

ouais .. ça fonctionne parfaitement maintenant. Merci pour l'info. – marie

1

J'ai eu le même problème. J'ai vérifié mes paramètres de confidentialité, les permissions, les autres méthodes etc ..., mais je n'ai pas pu le résoudre. De nombreux sites ont indiqué "vérifier l'autorisation d'accès à offline_access/read_stream/publish_stream", je pense que ceux-ci sont également importants, mais je n'ai pas pu le réparer.

Puis j'ai finalement trouvé la solution suivante, ça marche bien.

Vous devez remplacer "safariAuth: YES" par "safariAuth: NO" dans le fichier "Facebook.m".

- (void)authorize:(NSArray *)permissions 
     delegate:(id<FBSessionDelegate>)delegate { 
      [_permissions release]; 
      _permissions = [permissions retain]; 
      _sessionDelegate = delegate; 

      //[self authorizeWithFBAppAuth:YES safariAuth:YES]; 
      //You can get auth_token in iOS App! 
      [self authorizeWithFBAppAuth:YES safariAuth:NO];  
} 

Ensuite, vous pouvez utiliser la méthode suivante pour obtenir votre propre information si vous êtes connecté.

[facebook requestWithGraphPath:@"me" andDelegate:self]; 

si vous n'êtes pas connecté, vous devez vous connecter en suivant première méthode.

permissions = [[NSArray arrayWithObjects: 
      @"email", @"read_stream", @"user_birthday", 
      @"user_about_me", @"publish_stream", @"offline_access", nil] retain]; 
if (![facebook isSessionValid]) { 
    [facebook authorize:permissions delegate:self]; 
} 

Après la publication m'a sauvé.Merci beaucoup! How to retrieve Facebook response using Facebook iOS SDK

Bonne chance & Bonne codification! Merci.

Questions connexes