IOS Facebook SDK: le login ne renvoie pas l'email malgré les autorisations accordées
Je vais essayer d'obtenir des informations par le biais de l'facebook sdk mais jusqu'à présent, je suis seul l'id et le nom de l'utilisateur, même si je suis sûr qu'il ya un email disponible, comme c'est mon compte. J'ai regardé plusieurs de réponse ici, mais aucun n'a résolu mon problème jusqu'à présent.
Ce que je fais mal, et pourquoi n'est-il pas de retourner plus de données que j'ai fais une demande de plusieurs autorisations?
Voici mon code:
fbLoginManager.logInWithReadPermissions(["public_profile", "email", "user_friends", "user_about_me", "user_birthday"], handler: { (result, error) -> Void in
if ((error) != nil)
{
//Process error
println("There were an error: \(error)")
}
else if result.isCancelled {
//Handle cancellations
fbLoginManager.logOut()
}
else {
var fbloginresult : FBSDKLoginManagerLoginResult = result
if(fbloginresult.grantedPermissions.contains("email"))
{
println(fbloginresult)
self.returnUserData()
}
}
})
Et de la fonction pour obtenir les données de l'utilisateur:
func returnUserData()
{
let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: nil)
graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in
if ((error) != nil)
{
//Process error
println("Error: \(error)")
}
else
{
println("fetched user: \(result)")
if let userName : NSString = result.valueForKey("name") as? NSString {
println("User Name is: \(userName)")
}
if let userEmail : NSString = result.valueForKey("email") as? NSString {
println("User Email is: \(userEmail)")
}
}
})
}
Qui retourne:
fetched user: {
id = 55555555;
name = "Kali Aney";
}
User Name is: Kali Aney
source d'informationauteur Kali Aney
Vous devez vous connecter pour publier un commentaire.
Facebook API Graphique a cassé la compatibilité descendante (lorsqu'il est utilisé par défaut de la mode) Depuis Graph API de la version 2.4 (Pod Version 4.4.0).
FB Graphique-API 2.4 ne retourne PAS tous les champs par défaut pour l'utilisateur
Pour résoudre ce problème, vous pouvez utiliser explicitement graphique de la version 2.3:
[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:nil tokenString:[FBSDKAccessToken currentAccessToken].tokenString version:@"v2.3" HTTPMethod:nil]
auquel cas FB assure v2.3 sera disponible au moins 2 ans à partir de maintenant.
https://developers.facebook.com/docs/graph-api/overview:
OU
vous pouvez utiliser le nouveau Graphe (API v2.4) en posant pour des domaines spécifiques qui vous intéressent:
[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields" : @"email,name"}]
J'ai du mal avec ce problème pendant presque une journée en attendant de trouver la réponse par @HeTzi, qui a parfaitement fonctionné. La swift version d'une telle demande est:
N'oubliez pas que vous devez d'abord demander la lecture correcte des autorisations à obtenir des données à l'aide de cette demande.
Dans mon cas, l'email n'a pas été vérifiée par l'utilisateur c'est pourquoi ne pas l'obtenir, même après l'octroi des autorisations 😉
cela fonctionne... espérons que cela aide..
Une fonction dans swift comme ceci:
Testé dans Swift 2.2
Je n'ai jamais travaillé avec IOS, mais j'ai beaucoup d'expérience avec Facebook. Ma première observation est que chaque fois que vous demandez un Facebook autorisation, vous devez vous assurer que:
- vous permettez aux utilisateurs de savoir pourquoi vous avez besoin de cette autorisation
- vous respectez Facebook termes
- vous aurez sûrement besoin de cette autorisation dans un avenir proche
Cette liste
semble être vague. Vous devez vous assurer que vous demandez pour l'ensemble minimal de privilèges, vous aurez sûrement besoin dans un avenir proche.
Que sur la demande elle-même, vous devez vous assurer que vous utilisez valide Facebook de la session. Je fais comme ça en PHP:
Je suis sûr que vous devez avoir quelque chose comme
getGraphObject
dans le kit de développement logiciel ainsi.Utiliser ces fonctions, ce sera le travail pour assurer
et connecter le
fbsignup(_sender: Any)
fonction avec votre bouton