2016-10-10 8 views
2

Ich bin zur Umsetzung Facebook-Login für meine app, und ich versuche, die folgenden Informationen aus dem Profil zu holen:Swift FBSDK Get user Land

Vorname, Nachname , Geschlecht, und Land.

Ich kann jedoch scheinen, nur alles außer dem Benutzerland zu holen. Ich habe versucht, meine Parameter meiner FBSDKGraphRequest so zu setzen:

let parameters = ["fields": "email, gender, user_location, id, first_name, last_name, picture.type(large)"] 

sowie meine readPermissions zu:

loginButton.readPermissions = ["public_profile", "email", "user_location", "user_friends", "user_education_history", "user_birthday"] 

Was mache ich falsch hier? Wie kann ich das Land des Benutzers erhalten?

Hilfe wird sehr geschätzt!

Antwort

3

Ihre readPermissions user_location ist korrekt, aber der Parametername für Land/Standort lautet nicht user_location.
Es ist location.

let parameters = ["fields": "id,location,name,first_name,last_name,picture.type(large),email,birthday,gender,bio,relationship_status"] 

Vergewissern Sie sich ein Ort in Ihrem Facebook-Konto hinzugefügt haben und gemacht, dass öffentlichen, in dem Ihr in sich anmelden, und Sie werden getan werden. Versuchen Sie es mit demselben Facebook-Konto, von dem Sie die Facebook-App erstellt haben.

Sie können Ihren Standort mit einer Warnmeldung (wie unten gezeigt) zu Testzwecken abrufen. Bevor Sie jedoch Ihre App an den Appstore senden, müssen Sie die Anmeldebestätigung von Facebook durchgehen, da user_location keine Genehmigung für vorab genehmigte Apps ist.

Für weitere Informationen gehen Sie API Explorer Graph

Sie zum Graph API Explorer gehen und versuchen, mit der App heraus. Generieren Sie ein Token, indem Sie auf klicken. Token und erhalten Token zum Benutzerzugriff. Wenn Sie darauf klicken, werden die Berechtigungskästchen geöffnet. Keep user_location überprüft.

Graph Api Explorer Page

enter image description here

Weiter klicken Sie einfach mit der folgenden auf Senden Get Parameter. Stellen Sie sicher, dass der Standort Parameter dort ist und Sie können ein JSON wie folgt sehen.
Es gibt eine Position Wörterbuch mit Name Schlüssel, die aus Ihrem Land und Stadt Name bestehen.

{ 
    "id": "338058996547981", 
    "name": "Rajan Maheshwari", 
    "birthday": "04/29/1990", 
    "location": { 
    "id": "106517799384578", 
    "name": "New Delhi, India" 
    } 
} 

enter image description here

HINWEIS: - Außerdem müssen Sie sicherstellen, dass Sie einen Platz in Ihrem Facebook-Profil eingegeben haben und dass die Öffentlichkeit zugänglich gemacht.

enter image description here

Wenn Sie die App mit den Berechtigungen ausgeführt werden, erhalten Sie eine Facebook-Authentifizierung mit einem Warnbildschirm, wie diese erhalten.

enter image description here

Es wird für einen einzuloggen um einen Bericht bitten als einige der Berechtigungen hier müssen überprüfen. Die grundlegenden Berechtigungen kostenlos zur Verfügung gestellt von Facebook, die brauchen keine Bewertung sind: -

enter image description here

aber für Sie zu Testzwecken ohne dass eine Prüfung der Lage zu bekommen. Bevor Sie jedoch die iOS-App an Appstore senden, müssen Sie die Login-Überprüfung von Facebook bestehen, um diese Warnmeldung zu vermeiden und den Standort des Benutzers abzurufen.

+0

Hallo, danke für die Antwort Rajan. Das ist merkwürdig, es funktioniert im Graph API Explorer, aber nicht in meiner App (obwohl ich es in 'location' geändert habe. Hmm, noch mehr habe ich vergessen vielleicht? – askaale

+0

@askale in meiner App es funktioniert, stellen Sie sicher, dass Sie Ihren Platz ist öffentlich und versuche dich mit demselben Account anzumelden, von dem du die App erstellt hast –

+0

Ich kann dieses Problem immer noch nicht lösen Ich bemerkte, dass mein Platz nicht öffentlich war, aber ich änderte das. Es half jedoch nicht , wäre es eine einfache Möglichkeit, nur den Ländernamen des Benutzers zu erhalten, oder müsste ich das einfach durch Trennen der Zeichenfolge mit einem Komma erhalten? – askaale

0

Wenn Sie das Land separat benötigen, können sie Standort verwenden {location}

FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "location{location}"]).start(completionHandler: { (connection, result, error) -> Void in 
     if let error = error { 
      self.alertTheUser(title: "Error", message: error.localizedDescription) 
      print(error) 
     }else{ 
      let fbDetails = result as! NSDictionary 
      let location : NSDictionary! = fbDetails.value(forKey: "location") as! NSDictionary 
      let locationContents : NSDictionary! = location.value(forKey: "location") as! NSDictionary 
      self.registerCityField.text = locationContents.value(forKey: "city") as? String 
      self.registerStateField.text = locationContents.value(forKey: "state") as? String 
      self.registerCountryField.text = locationContents.value(forKey: "country") as? String 
     } 
    })