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

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

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

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

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1742閲覧

swift3でFacebookログイン連携でFirebaseでsignIn後にEmail取得不可

yamayamak

総合スコア131

Firebase

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

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2018/01/01 04:53

swift3でFacebookログイン連携でFirebaseでsignIn後にEmail取得ができません。

Facebookのログインはできていて、FirebaseのAuth.auth().signInも成功しています(エラーもなく、displayNameも取得できるため)。

同じアカウントで他のSwiftプロジェクトでは取得できていますので、Facebookのアカウント設定は問題ありません。GoogleService-Info.plistやInfo.plistは何度も見直していますし、ダウンロードや貼り付けも何度も行ったので、問題無いと思います。

何か考えられる原因をご教授ください。

let fbLoginManager = FBSDKLoginManager() fbLoginManager.logIn(withReadPermissions: ["public_profile", "email"], from: self) { (result, error) in if let error = error { print("DEBUG:Failed to login: (error.localizedDescription)") return } guard let accessToken = FBSDKAccessToken.current() else { print("DEBUG:Failed to get access token") return } let credential = FacebookAuthProvider.credential(withAccessToken: accessToken.tokenString) // Perform login by calling Firebase APIs Auth.auth().signIn(with: credential, completion: { (user, error) in if let error = error { self.showAlert(1) print("DEBUG:Login error: (error.localizedDescription)") } // FireBaseにログインしたので、User登録しPassportでToken取得 if let user = Auth.auth().currentUser { if let value: String = user.email { print ("DEBUG111:(value)") } print ("DEBUG222!") } }) }

上記では、DEBUG111は表示されません。DEBUG222は表示されます。

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

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

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

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

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

CHERRY

2018/01/01 05:54 編集

API v2.5 ぐらいから、id と 名前以外の情報取得には、「アクセストークンを取得時」にアクセス許可(Permissions)の設定が必要になっていますが、どのような設定になっているでしょうか?
yamayamak

2018/01/01 05:59 編集

withReadPermissions: ["public_profile", "email"] で良いと思っています。 あと、こちらでチェックした同じプログラムの他プロジェクトで取得できてます。 本プロジェクトでもFirebaseを利用せずにFBSDKで個別に、FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "email"]).start で取得できてます。 何かある気がします。。。 最悪は上記で個別取得して対応しようと思っています。2月にも同様の質問があって回答が無いので何か原因を把握したいと思っています。
komo_ta

2018/01/02 14:56

少し違うかもしれませんが、http://mushikago.com/i/?p=7766 こちらの記事の中盤あたりにFacebookの認証のメール取得に関する記述がありました。アクセス許可する際の情報に「メールアドレス」がオフになっているかどうか確認してみてはいかがでしょうか?
yamayamak

2018/01/02 15:18

情報大変ありがとうございます。再度、確認しましたがFacebookの許可をするときにメールアドレスを許可しています。あと、Facebookの設定からアプリを選択して中の情報を確認すると問題なく取得できていました。FirebaseのConsoleでもFacebookマークでメールアドレスが確認できていますが、Auth.auth().currentUserで取得した場合にemailが取得できません。どちらかというとFirebaseの設定も何度も見直しましたがわかりませんでした。また、何か情報がわかりましたらご教授ください。今回、頂いた内容は問題なさそうです。
kanemotos

2018/01/06 06:46

firebase auth:exportの結果では該当ユーザーの情報はどのようになっていますでしょうか?https://firebase.google.com/docs/cli/auth?hl=ja#authexport Facebookアカウントの作成は、必ずしもメールアドレスを必要としない(電話番号で作ることも可能)ので、そのせいで取得できていないのかもしれません。
yamayamak

2018/01/07 02:33

ありがとうございます。FireBaseのConsoleでユーザー管理にE-mailは取得できていますので、FirebaseとしてはEmailを保持しています。また、なんどやっても取得できないのでシンプルにアカウント連携だけの別プロジェクトを新規に作成してみたらE-mailを取得できました。FireBase,Facebookサイト、GoogleService-Info.plistやInfo.plistは何度も設定し直しましたが、同じでした。何か原因がありそうなのですが不明でしたので、質問させて頂きした。何か設定にこころあたりがないかおお伺いしている次第です。(現状はFacebookにログイン後に個別でFBSDKGraphRequestでFacebookに直接E-mailを取得してますので、綺麗ではないなーと思っています。)
guest

回答1

0

自己解決

結局、Firebaseの設定で、1 つのメールアドレスにつき複数アカウント作成できるようにすると、メールアドレスが取得できないことがわかりました。私はその問題でした。

とりあえずの回避方法はEmailが取得できていない場合にFBSDKGraphRequestでFacebookに直接E-mailを取得すれば回避できますが。。。複数アカウントを許容した場合の取得方法を模索中です。

投稿2018/01/20 08:14

編集2018/01/20 13:52
yamayamak

総合スコア131

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

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

yamayamak

2018/01/20 13:52 編集

補足してましたが、上記の回答に修正しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問