質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Q&A

解決済

1回答

2805閲覧

Firebaseで認証したFacebookIDを取得できますか?

noisy_max

総合スコア46

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

1グッド

0クリップ

投稿2016/07/28 08:01

FirebaseでFacebook認証を行ったユーザー情報から、そのFacebookIDを取得することはできますでしょうか。

公式ドキュメントを読み、いろいろ試してみましたが

FIRAuth.auth()?.currentUser?.providerData
FIRAuth.auth()?.currentUser?.providerID

のどちらでも取得できませんでした。
何かいい方法がありましたら、ご教授お願い致します。

参照
https://firebase.google.com/docs/reference/cpp/class/firebase/auth/user

kanemotos👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

回答が遅くなったので、すでにご解決されているかもしれませんが。。
同じ悩みを解決できたので、共有いたします。

swift

1if let facebookUid = FIRAuth.auth()?.currentUser?.providerData 2 .filter({ (userInfo: FIRUserInfo) in return userInfo.providerID == FIRFacebookAuthProviderID}) 3 .map({ (userInfo: FIRUserInfo) in return userInfo.uid}) 4 .first { 5 print ("\(facebookUid)") 6}

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で試しましたので、バージョン違いの場合はコードを修正してください。)

swift

1let req = FBSDKGraphRequest(graphPath: "/me", parameters: ["fields": "id,email,gender,link,locale,name,timezone,updated_time,verified,last_name,first_name,middle_name"]) 2req?.start(completionHandler: { (conn: FBSDKGraphRequestConnection?, result: Any?, error: Error?) in 3 if let error = error { 4 print("\(error.localizedDescription)") 5 return 6 } 7 guard let dictionary = result as! NSDictionary? else {return} 8 guard let facebookUid = dictionary["id"] as? String else {return} 9 print("facebook uid: \(facebookUid)") 10})

投稿2016/09/29 11:51

編集2016/09/29 14:24
kanemotos

総合スコア163

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

noisy_max

2016/09/29 12:04

ご回答ありがとうございます。 やはり、Firebase側には保存してくれないですよね・・・私もその方法で取得しました。 本来ならばこの質問を作成した私が自己解決方法を書き込むべきところを、情報共有していただきありがとうございます。 コードまでアップしていただいたそのお心遣いがとても嬉しいです。
kanemotos

2016/09/29 14:21

そう言われてみるとFirebase保存してないことはないはず・・・と思って試した所、 Firebaseから取得することが出来ました。 ```swift 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^)
noisy_max

2016/09/29 15:25

そんなことができたのですね…! 2度もご回答いただきありがとうございます! 次回実装するときはそっちでやってみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問