質問: FirebaseでFacebook認証を行ったユーザー情報から、そのFacebookIDを取得することはできますでしょうか。 公式ドキュメントを読み、いろいろ試してみましたが FIRAuth.auth()?.currentUser?.providerData FIRAuth.auth()?.currentUser?.providerID のどちらでも取得できませんでした。 何かいい方法がありましたら、ご教授お願い致します。 参照 https://firebase.google.com/docs/reference/cpp/class/firebase/auth/user
回答: 回答が遅くなったので、すでにご解決されているかもしれませんが。。 同じ悩みを解決できたので、共有いたします。 ``` if let facebookUid = FIRAuth.auth()?.currentUser?.providerData .filter({ (userInfo: FIRUserInfo) in return userInfo.providerID == FIRFacebookAuthProviderID}) .map({ (userInfo: FIRUserInfo) in return userInfo.uid}) .first { print ("\(facebookUid)") } ``` providerDataでFIRUserInfoの配列で取得できるので、その中にあるproviderIDが"facebook.com"(FIRFacebookAuthProviderID)である物を絞りました。 FIRUserInfoのuidにFacebookのIDが入っていました(^o^) ===以下、最初の回答=== Firebase Authでは、facebook以外にもtwitterなどのSNS認証や、メールアドレスでも認証可能になっています。 なので、FIRAuthで取得できるuidは、Firebaseで採番しているユーザーIDとなります。 (このIDはFirebaseのAuthのコンソールで確認できるユーザーUIDです。) 試されたコードから推察するに、SwiftでFirebaseを利用されているものと思います。 SwiftでFacebook認証しているのであれば、 FBSDKライブラリを利用してログインボタンを設置しているのではないかと思いますが、 FacebookのユーザーIDは、FBSDKライブラリを使って取得することが出来ます。 以下はサンプルコードです。 (Xcode8のswift3.0で試しましたので、バージョン違いの場合はコードを修正してください。) ``` let req = FBSDKGraphRequest(graphPath: "/me", parameters: ["fields": "id,email,gender,link,locale,name,timezone,updated_time,verified,last_name,first_name,middle_name"]) req?.start(completionHandler: { (conn: FBSDKGraphRequestConnection?, result: Any?, error: Error?) in if let error = error { print("\(error.localizedDescription)") return } guard let dictionary = result as! NSDictionary? else {return} guard let facebookUid = dictionary["id"] as? String else {return} print("facebook uid: \(facebookUid)") }) ```