Mon application iOS utilise la requête Graph API de Facebook lors de l'inscription pour obtenir des informations sur l'utilisateur, ce qui a bien fonctionné avant la mise à niveau vers le dernier SDK de Facebook. Après la mise à niveau, une erreur d’exécution s’affiche: "FBSDKLog: à partir de Graph API v2.4, les requêtes GET pour/me doivent contenir un paramètre" champs "explicite.
Voici le code:
func requestFacebook() {
let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: nil)
graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in
if ((error) != nil)
{
// Process error
println("Error: \(error)")
}
else if error == nil
{
let birthday : NSString = (result.valueForKey("birthday") as? NSString)!
var currentDate = NSDate()
var birthdayFormatter = NSDateFormatter()
let userCalendar = NSCalendar.currentCalendar()
birthdayFormatter.dateFormat = "MM/DD/YYYY"
var birthdayNSDate = birthdayFormatter.dateFromString(birthday as String)
var userAge = self.calculateAge(birthdayNSDate!)
PFUser.currentUser()!["age"] = userAge
var facebookID: NSString = (result.valueForKey("id") as? NSString)!
var pictureURL = "https://graph.facebook.com/\(facebookID)/picture?type=large&return_ssl_resources=1"
var URLRequest = NSURL(string: pictureURL)
var URLRequestNeeded = NSURLRequest(URL: URLRequest!)
NSURLConnection.sendAsynchronousRequest(URLRequestNeeded, queue: NSOperationQueue.mainQueue(), completionHandler: {(response: NSURLResponse!,data: NSData!, error: NSError!) -> Void in
if error == nil {
var picture = PFFile(data: data)
PFUser.currentUser()!["picture"] = picture
PFUser.currentUser()!.saveInBackgroundWithBlock({ (success, error) -> Void in
if error == nil {
var userPicture:PFFile = PFUser.currentUser()!.valueForKey("picture") as! PFFile
userPicture.getDataInBackgroundWithBlock { (imageData, error) -> Void in
if error == nil {
self.meProfileImageView.image = UIImage(data: imageData!)
var userName:String = PFUser.currentUser()!.valueForKey("username") as! String
var userAge:Int = PFUser.currentUser()!.valueForKey("age") as! Int
self.meLabel.text = "\(userName), \(userAge)"
self.findFriends()
}
}
} else {
println(error)
}
})
}
else {
println("Error: \(error.localizedDescription)")
}
})
}
})
}
Le message d'erreur est à la ligne:
let birthday : NSString = (result.valueForKey("birthday") as? NSString)!
Ce code fonctionnait parfaitement avant la mise à niveau vers le SDK v4.5.1 de Facebook, mais je ne sais pas quoi changer pour que cela fonctionne maintenant. Un grand merci à tous ceux qui peuvent m'aider!
cette ligne a besoin d'une valeur de paramètre non nulle
let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: nil)
Je développerai plus, par exemple, et voici le code de psuedo:
donc, pour ObjC, ce serait ceci, par exemple, donc ce qui précède se lirait comme suit:
parameters:@{@"fields": @"id, name"}
Dans Swift ce serait quelque chose de similaire
quelque chose comme ça:
parameters:["fields": "email"]
Ceci est pour seulement deux champs, et encore une fois c'est du code psuedo, mais vous devez spécifier les paramètres
En ajoutant cette mise à jour pour montrer aux personnes où vous trouvez les paramètres pour les champs décrits ci-dessus, voici un lien rapide:
https://developers.facebook.com/docs/graph-api/reference/user
Le format de l'information ci-dessous est le suivant, en quelque sorte, je viens de le faire rapidement:
"paramètre" "type"
"description"
id chaîne numérique
L'identifiant du compte utilisateur de cette personne. Cet identifiant est unique pour chaque application et ne peut pas être utilisé dans différentes applications. Notre guide de mise à niveau fournit des informations supplémentaires sur les ID spécifiques à une application.
à propos de chaîne
La section À propos de moi du profil de cette personne
age_range AgeRange
La tranche d'âge de cette personne exprimée en âge minimum et maximum. Par exemple, plus de 18 ans, moins de 21 ans.
bio chaîne
La bio de la personne
anniversaire chaîne
L'anniversaire de la personne. C'est une chaîne de format fixe, comme MM/JJ/AAAA. Cependant, les personnes peuvent contrôler qui peut voir l'année de leur naissance séparément du mois et du jour, de sorte que cette chaîne ne peut être que l'année (AAAA) ou le mois + jour (MM/JJ)
contexte UserContext
Contexte social pour cette personne
devise devise
Informations sur la devise locale de la personne
liste des périphériques
La liste des périphériques que la personne utilise. Cela ne renverra que les appareils iOS et Android
liste d'éducation
L'éducation de la personne
email chaîne
Adresse e-mail principale de la personne répertoriée dans son profil. Ce champ ne sera pas retourné si aucune adresse email valide n'est disponible
favorite_athletes liste
Athlètes que la personne aime
favorite_teams liste
Équipes sportives que la personne aime
prenom chaîne
Le prénom de la personne
sexe chaîne
Le sexe choisi par cette personne, homme ou femme. Cette valeur sera omise si le genre est défini sur une valeur personnalisée.
ville natale Page
La ville natale de la personne
inspirational_people liste
Les personnes inspirantes de la personne
install_type enum
Type d'installation
installé bool
L'application faisant la demande est-elle installée?
interest_in liste
Genres auxquels la personne s'intéresse
is_shared_login bool
S'agit-il d'une connexion partagée (par exemple, un utilisateur gris)
is_verified bool
Les personnes ayant un grand nombre d'abonnés peuvent faire vérifier l'authenticité de leur identité manuellement par Facebook. Ce champ indique si le profil de la personne est vérifié de cette manière. Ceci est distinct du champ vérifié
liste des langues
Pages Facebook représentant les langues que cette personne connaît
last_name chaîne
Le nom de famille de la personne
lien chaîne
Un lien vers la chronologie de la personne
location Page
La position actuelle de la personne telle qu’elle a été entrée dans son profil. Ce champ n'est pas lié aux check-ins
locale chaîne
Le lieu de la personne
meeting_for liste
Ce que la personne est intéressée à rencontrer pour
** chaîne de prénom
Le deuxième prénom de la personne
name string
Le nom complet de la personne
CoreDefault
name_format chaîne
Nom de la personne formaté pour traiter correctement les commandes en chinois, japonais ou coréen
payment_pricepoints PaymentPricepoints
Les points de paiement de la personne
test_group unsigned int32
Groupe de test de la plateforme
politique chaîne
Les opinions politiques de la personne
relationship_status chaîne
Le statut relationnel de la personne
religion chaîne
La religion de la personne
security_settings SecuritySettings
Les paramètres de sécurité
significatif_other Utilisateur
L'autre significatif de la personne
sports liste
Sports que cette personne aime
guillemets chaîne
Citations préférées de la personne
third_party_id chaîne
Une chaîne contenant un identifiant anonyme, mais unique pour la personne. Vous pouvez utiliser cet identifiant avec des tiers
fuseau horaire float (min: -24) (max: 24)
Décalage horaire actuel de la personne par rapport à UTC
token_for_business chaîne
Un jeton identique dans les applications d'une entreprise. L'accès à ce jeton nécessite que la personne soit connectée à votre application. Ce jeton changera si l'entreprise propriétaire de l'application change
updated_time datetime
Heure mise à jour
shared_login_upgrade_required_by datetime
Heure à laquelle le login partagé doit être mis à niveau vers Business Manager par
vérifié booléen
Indique si le compte a été vérifié. Ceci est distinct du champ is_verified. Une personne est considérée comme vérifiée si elle effectue l'une des actions suivantes:
Register for mobile Confirm their account via SMS Enter a valid credit card
video_upload_limits VideoUploadLimits
Limites de téléchargement de vidéos
viewer_can_send_gift bool
Le spectateur peut-il envoyer un cadeau à cette personne?
site Web chaîne
Le site de la personne
liste de travail
Détails de l'expérience de travail d'une personne
public_key chaîne
La clé publique PGP de la personne
cover CoverPhoto
"Edge"
"Description"
favorite_requests
Requêtes préférées des développeurs à l'API Graph
request_history
Historique des requêtes de l'API graphique des développeurs
comptes
Pages Facebook que cette personne administre/est un administrateur pour
réalisations
Réalisations dans les jeux Facebook
adaccounts
Les comptes publicitaires auxquels cette personne a accès
adaccountgroups
Groupes de comptes d'annonces
adcontracts
Les contrats publicitaires de la personne
admined_groups
Regroupe les administrateurs utilisateurs
adnetworkanalytics
Données Insights pour les applications du réseau Audience de la personne
albums
Les albums photo que cette personne a créés
apprequests
Demandes en attente de cette personne à partir d'une application
apprequestformerrecipients
Demandes d'applications
livres
Les livres figurant sur le profil de cette personne
domaines
Les domaines que l'utilisateur admin
événements
Événements pour cette personne. Par défaut, cela n'inclut pas les événements auxquels la personne a refusé ou auxquels il n'a pas répondu.
famille
Les relations familiales de cette personne.
stream_filters
Liste de filtres pouvant être appliqués à Edge de fil d'actualité
friendlists
Les listes d'amis personnalisées de la personne
ids_for_business
Les entités commerciales peuvent revendiquer la propriété de plusieurs applications à l'aide du Gestionnaire de l'activité commerciale. Cet Edge renvoie la liste des identifiants de cet utilisateur dans l'une de ces autres applications.
invitable_friends
Une liste d'amis pouvant être invités à installer une application Facebook Canvas
jeux
Jeux que cette personne aime
groupes
Les groupes Facebook auxquels la personne appartient
aime
Toutes les pages que cette personne a aimé
films
Films que cette personne aime
musique
Musique que cette personne aime
objets
Objets
autorisations
Les autorisations que la personne a accordées à cette application
photos
Photos dans lesquelles la personne est taguée ou a téléchargé
image
La photo de profil de la personne
tagged_places
Liste des lieux marqués pour cette personne. Il peut inclure des balises sur des vidéos, des publications, des statuts ou des liens.
promotable_domains
Tous les domaines que l'utilisateur peut promouvoir
promotable_events
Tous les événements que l'utilisateur peut promouvoir.
taggable_friends
Amis pouvant être marqués dans un contenu publié via l'API Graph
télévision
Émissions de télévision que cette personne aime
vidéos
Vidéos dans lesquelles la personne est taguée ou téléchargée
video_broadcasts
Émissions vidéo de cette personne
applications
Les applications Facebook dont cette personne est un développeur.
checkins
Les checkins que cette personne a faits.
feed
Flux des publications (y compris les mises à jour de statut) et des liens publiés par cette personne.
friendrequests
Les demandes d'ami en attente d'une personne.
amis
Les amis d'une personne.
home
Flux de la page d'accueil Facebook d'une personne.
boîte de réception
Une boîte de réception de messages Facebook d'une personne.
lieux
Un flux de messages et de photos contenant des informations de localisation et dans lesquels cette personne a été étiquetée. Ceci est utile pour construire une chronologie des lieux visités par la personne.
amis communs
La liste des amis communs entre deux personnes.
notifications
Les notifications Facebook non lues qu'une personne a.
boîte d'envoi
La boîte d'envoi de messages Facebook d'une personne.
questions
Les questions qu'une personne a créées.
scores
Les scores que cette personne a reçus des jeux Facebook auxquels ils ont joué.
abonnés
Les profils qui suivent cette personne.
subsignedto
Le profil que cette personne suit.
utilisez "champs" comme clé, puis séparez vos valeurs par une virgule
let params = ["fields": "email, friends"]
Dans Obj-C insérez dans la méthode logInWithReadPermissions:
parameters:@{@"fields": @"id, name, email"}
si vous ne laissez aucun paramètre dans les paramètres, vous ne recevez que l'id et le nom dans l'objet de résultat, bien que vous ayez défini par exemple:
NSArray *permissionsArray = @[ @"email", @"public_profile"];
Ce n'est pas très clair dans la documentation, j'espère que ça peut aider.
J'ai eu le même problème, mais l'ajout d'options de champ générerait une erreur de requête lors de l'extraction de la photo de l'utilisateur. J'ai résolu ce problème en ajoutant un simple parameters:@{@"fields": @""}
au code:
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:@"me/picture"]
parameters:@{@"fields": @""}
HTTPMethod:@"GET"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection,
id result,
NSError *error) {
if (!error) {
// success
} else {
// fail
}}
];
Dans Swift, vous pouvez déclarer plusieurs paramètres comme ceci:
let graphRequest: FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "email, first_name, last_name, gender, picture"])