Facebook autorisation échoue sur iOS6 lors de la commutation de compte FB sur le périphérique
Je suis l'aide de mourir Facebook SDK 3.1.1 à mettre en œuvre FB Connect dans mon application iOS. Cela fonctionne bien dans le cas simple avec le nouveau FB intégration (connecté sur iOS) ou de revenir à la normale d'autorisation via l'affichage web (je n'ai pas la native Facebook application installée dans les deux cas).
Le problème survient lorsque je passe du compte sur iOS niveau. De vous déconnecter et de vous connecter avec un autre FB compte d'utilisateur.
De connexion/autoriser j'ai effectuer:
[FBSession openActiveSessionWithReadPermissions:nil allowLoginUI:allowLoginUI
completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {
[self sessionStateChanged:session state:state error:error];
}];
Si ensuite obtenir un FBSessionStateClosedLoginFailed à chaque fois, même si j'ai effectuer une closeAndClearTokenInformation
lorsque cet état est atteint:
- (void)sessionStateChanged:(FBSession *)session
state:(FBSessionState) state
error:(NSError *)error
{
NSLog(@"Session State Changed: %u", [[FBSession activeSession] state]);
switch (state) {
case FBSessionStateOpen:
break;
case FBSessionStateClosed:
case FBSessionStateClosedLoginFailed:
NSLog(@"FBSessionStateClosedLoginFailed ERROR: %@", [error description]);
[[FBSession activeSession] closeAndClearTokenInformation];
break;
default:
break;
}
Cependant, je reçois le même état à chaque nouvelle tentative. Mon journal est dit ce qui suit:
FBSDKLog: FBSession **INVALID** transition from FBSessionStateCreated to FBSessionStateClosed
FBSDKLog: FBSession transition from FBSessionStateCreated to FBSessionStateCreatedOpening
FBSDKLog: FBSession transition from FBSessionStateCreatedOpening to FBSessionStateClosedLoginFailed Session State Changed: 257
FBSessionStateClosedLoginFailed TOKEN: (null)
FBSessionStateClosedLoginFailed ERROR: Error Domain=com.facebook.sdk Code=2 "The operation couldn’t be completed. (com.facebook.sdk error 2.)" UserInfo=0xb24cc20 {com.facebook.sdk:ErrorLoginFailedReason=com.facebook.sdk:ErrorLoginFailedReason}
Quelqu'un peut-il reproduire ce ou a une idée d'où le problème pourrait se situer?
comment avez-vous transformer sur le FBSDKLog l'exploitation forestière?
J'ai trouvé cette méthode quelque part par ici:
[FBSettings setLoggingBehavior:[NSSet setWithObjects:FBLoggingBehaviorFBRequests, FBLoggingBehaviorFBURLConnections, FBLoggingBehaviorAccessTokens, FBLoggingBehaviorSessionStateTransitions, nil]];
BTW, il semble être au travail maintenant, pour moi, bien que je ne suis pas sûr pourquoi. J'ai eu incorporatedd la solution de this problème dans mon sessionStateChanged gestionnaire, mais il ne fonctionne pas. Jusqu'à ce que j'ai essayé de nouveau plus tard. Pour une raison quelconque, le comportement semble maintenant comme suit. Je passe le travail en cours FB utilisateur sur iOS, dans l'application de la session est ouverte, mais une demande échoue. Lors de la prochaine tentative d'une nouvelle session avec un bon jeton est ouvert et que la demande suivante à FB fonctionne.
OriginalL'auteur Kathrin Holweger | 2012-10-11
Vous devez vous connecter pour publier un commentaire.
Une autre réponse donne une manière manuelle de re-synchroniser l'appareil avec le serveur. J'ai défini une méthode appelée
fbRsync
appeler ce code. Assurez-vous de#import <Accounts/Accounts.h>
dans votre fichier de mise en oeuvre et ensuite définir cette méthode:}
Je puis appeler
fbResync
siopenActiveSessionWithReadPermissions
génère une erreur:La une demi-seconde de retard est probablement inutile, mais elle me donne la tranquillité d'esprit.
Cela semble résoudre le problème pour moi. Je peux désormais passer entre Facebook comptes et suis en mesure de vous connecter. Yay!!!
fbAttemptConnection
et ensuite utiliser[self performSelector:@selector(fbAttemptConnection) withObject:nil afterDelay:0.5]
au lieu d'utilisersleepForTimeInterval:
et le blocage du thread.Aussi, ce ne sera pas rétro-compatible avec iOS 5. Et pour une raison
fbAccounts
renvoie un tableau vide pour moi, même sur iOS 6. stackoverflow.com/a/12811583/190657Au lieu d'utiliser tout type de retard, créer un achèvement bloc pour fbResync pour appeler à l'intérieur de
([accountStore renewCredentialsForAccount:account completion:^(ACAccountCredentialRenewResult renewResult, NSError *error) {<here>}];)
. Le seul inconvénient est que si vous êtes tout appel de méthodes sur FBSession, ils doivent arriver sur le thread principal, mais qui est facilement résolu par emballage de la méthode dans[[NSOperationQueue mainQueue] addOperationWithBlock:^ {<here>}]
ce qui se passe si vous n'avez pas autorisé de VOTRE APPLICATION pour l'utilisateur facebook à partir de paramètres.
OriginalL'auteur ill_always_be_a_warriors
J'ai eu le même problème. Vérifiez que votre FB Application est activée dans les Paramètres -> Facebook.
Le mien a été désactivé (même si je ne me souviens pas de le désactiver) et une fois que je l'ai activé, il a été fixé.
Dans mon processus de test, je l'ai ajouté et enlevé mon FB App plusieurs fois à partir de mon Compte FB, qui est lié avec mon iPhone. Cela peut expliquer pourquoi, comme par magie, mon application a été désactivé.
J'ai eu le même problème et j'étais au volant de fou. Pour la première fois l'application ouverte, je l'ai touchée "ne pas autoriser" quand il m'a demandé de facebook autorisations à des fins de test. Après cela, il n'est jamais apparu de nouveau. Au moins j'ai réussi à l'allumer de nouveau sur les Paramètres de l'iPhone.
OriginalL'auteur Pierre-Olivier Simonard
Dans ios 6 avec fb sdk 3.1.1. Merci de transmettre des autorisations de param nulle ou e-mail" dans "[FBSessio openActiveSessionWithReadPermissions..." la méthode. Voici mon code fonctionne très bien.
OriginalL'auteur loganathan
J'ai le même problème sur 3.1.3 FB SDK avec iOS7.1. Et j'ai trouver une solution ici. Espérons qu'il aide!!
J'ai essayé toutes les réponses ici.
@loganathan néant autorisations, @ill_always_be_a_warriors fbResync.
Tous ceux qui ne fonctionnent pas pour moi.
Mais j'ai trouvé ça fonctionne bien lorsque je lance le même code dans iPhone 7.1 simulateur
(sans authentification unique"Single Sign on")
Le même code fonctionne bien sur l'ancienne version de l'iOS FB SDK(pas sûr de la version, mais pas 3.13)
(mais pas de SSO s'affichera lorsque vous essayez de vous connecter)
Donc, j'ai essayer de ré-écrire un échantillon de problème. J'ai trouvé plusieurs ici.
1. https://developers.facebook.com/docs/ios/getting-started Ajouter de nouveaux FacebookDisplayName
2. - Je modifier mes ayez localisé pour iTune connecter mais je ne suis pas de mise à jour de nouveau à Faceboook App Dev
Après avoir modifier les paramètre, il fonctionne sur mon application iOS avec la fonctionnalité d'authentification unique.
Espérons qu'il aide!!
OriginalL'auteur Evan Lin
Avez-vous essayé le RenewSystemCredential Méthodes? Jetez un oeil à ce post:
Facebook SDK iOS extendAccessToken pas de Travail - fbDidExtendToken pas être appelé
OriginalL'auteur Hernan Arber
J'ai eu le même message d'erreur. Mais j'ai utilisé @ill_always_be_a_warriors méthode:
-(void)fbResync
mais ne fonctionne pas pour moi.Je trouve enfin c'est mon problème d'autorisations, j'ai enlevé
offline_access
autorisation, il fonctionne, j'espère que ça aide quelqu'un.OriginalL'auteur William Hu