2017-07-09 12 views
0

現在、FacebookのiOS SDKを使用して、アプリでメール、姓、名字を正常に取得しています。しかし、何らかの理由で、私は都市や国などの位置情報をユーザーに取り込むのが難しいです。ここでSwiftの都市と国の値を取得できません

は私の関連するコードです:

override func viewDidLoad() { 

     super.viewDidLoad() 
     fbLoginButton.delegate = self 
     fbLoginButton.readPermissions = ["email", "public_profile", "user_location"] 
} 

extension RegisterViewController: FBSDKLoginButtonDelegate { 

    func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!) { 
     print("Did log out of facebook") 
    } 

    func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) { 
     if error != nil { 
      print(error) 
      return 
     } 

     print("Successfully logged in with facebook...") 
     FBSDKGraphRequest(graphPath: "/me", parameters: ["fields": "id, name, first_name, last_name, email, location{location}"]).start { (connection, result, err) in 

      if err != nil { 
       print("Failed to start graph request:", err) 
       return 
      } 

      print(result) 

      let fbDetails = result as! NSDictionary 
      let location : NSDictionary! = fbDetails.value(forKey: "location") as! NSDictionary //code crashes here 
      let locationContents : NSDictionary! = location.value(forKey: "location") as! NSDictionary 
      let city: String! = locationContents.value(forKey: "city") as? String 
      let state: String! = locationContents.value(forKey: "state") as? String 
      let country: String! = locationContents.value(forKey: "country") as? String 

      print(fbDetails) 
      print("city:", city) 
      print("state:", state) 
      print("country:", country) 


     } 
    } 
} 

私は、コードを実行すると、私のコンソールでは、私は、電子メール、FIRST_NAME、LAST_NAME、ID、名前、しかし、場所について何も、そして私のアプリのための出力を参照してください

let location : NSDictionary! = fbDetails.value(forKey: "location") as! NSDictionary 

は誰もが、それは私がWRをやっているかを見ることができます:それはラインに到達したとき

fatal error: unexpectedly found nil while unwrapping an Optional value 

:でクラッシュそれとも?

+0

事はあなたが力アンラップオプションの値をしていることです。なぜそれらの値を得ることができないのかについては、プライバシーの許可? – Paulw11

+0

オプションの値をアンラッピングする方法と、プライバシーのアクセス許可が適切に設定されているかどうかを確認する方法はありますか? – syedfa

+1

あなたは 'let city = locationContents.value(forKey:" city ")のようなものを言うべきですか? String {//都市で何かする} '。権限については、下記の回答を参照してください – Paulw11

答えて

0

あなたのread_permissionに 'user_location'を追加する必要があります。クラッシュに直接つながっている

fbLoginButton.readPermissions = ["email", "public_profile", "user_location"] 

あなたのFBのアプリケーションにこの権限を確認することを忘れないでください。(USER_LOCATIONが許可されたアクセス権をデフォルトではない)

+0

あなたの答えは大変ありがとうございます。私はコードに適切な変更を加えましたが、残念ながら私はまだ応答の場所の詳細を取得していません。私はFacebookのプロフィールからアプリを削除しようとしましたが、コードを変更して新鮮な "ハンドシェイク"プロセスを実行するたびに残念ながら、値を受け取っていません。私は私の個人的なfbページの私のプライバシー設定を変更する必要があるかどうか疑問に思っています。 – syedfa

+1

'場所'のデータは、あなたのfbプロフィールの「約」 - >「あなたが住んでいた場所」 - >「現在の都市」のデータです。あなたのプロフィールにこの情報が含まれていることを確認してください。私はこの情報を変更して再度ログインするようにテストします。その後、私は別の場所のデータを取得します。 「場所」権限が確認されていること、またはfbアプリケーションの管理者アカウントでログインしていることを確認してください。 – Codus

+1

user_locationの許可を得るには、fbアプリケーションで 'user_location'の提出を開始してください。 'developers.facebook.com' - > 'App Review' - > '承認用アイテムの送信' – Codus

関連する問題