web-dev-qa-db-fra.com

Requête GET de Facebook Graph API - Devrait contenir le paramètre "fields" (Swift, Facebook SDK v4.5.1)

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!

55
Armin

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


UPDATE:

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:

Voici les informations du champ Paramters (cela devrait rester à peu près statique avec FBSDK, une partie est "principale" ce qui signifie que cela ne changera pas vraiment, mais je mettrai à jour autant que je peux):

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


En outre, voici l'actuel "Edge": Le format de "Edge" est le suivant: je l'ai fait rapidement:

"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.

121
Loxx

utilisez "champs" comme clé, puis séparez vos valeurs par une virgule

let params = ["fields": "email, friends"]
26
Hugo Perez

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.

12

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"])
4
dylankbuckley