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

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

ただいまの
回答率

90.54%

  • Swift

    8583questions

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

  • iOS

    4596questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

  • Firebase

    860questions

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

firebaseで複数のSNS認証をリンクする (iOS)

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 1,506

kazy1981

score 34

お世話になります。

前提

iOSアプリをswiftで作っております。SNS(facebook, twitter, google)での個別のログインは出来るようになりました。
(こちらなど、firebaseの公式ドキュメントを参照しました)

同じくこちらの公式ドキュメントで、複数のSNSログインを相互リンクすることをしたいと考えております。

一応、公式ドキュメント通りに行うことで、例えばfacebookとgoogleのログインのリンクを行うことはできました。

問題点

上記のリンクは”手動”で行っております。つまり、すでにgoogleアカウントでログイン認証がfirebaseに渡されているユーザーに対して、以下のコードを実行することで、facebookログインとリンクしました。

//FBトークンをクレデンシャルに入れる
let credential = FIRFacebookAuthProvider.credential(withAccessToken: (result?.token.tokenString)!)                    

//現在のユーザー( googleログインはすでにfirebaseに認証が渡されている)を上記のfacebook認証とリンクさせる                            
FIRAuth.auth()?.currentUser?.link(with: credential){(user,error) in
     if (error != nil){
         print("facebookに既存認証をリンクするところでエラー!error:\(error)")
     }
}

ただしこれでは明らかに不便で、実際にはユーザーは、facebook/twitter/googleのどれに最初にログインしてくれるかわからないので、すでにこれら3つの中でfirebaseにログイン認証を渡しているかの判断分岐をいれる必要があると思っておりますが、その方法がわかりません。

おそらく、かなり基本的なことで、firebase公式にも書いてないのだと思いますが。。

なお、上記例で、すでにgoogleログインがすでに現在時点で行われているかはもちろんわかるのですが、「過去にgoogleログインされて、よってfirebaseに認証情報を渡されたことがあるものの、今現在は当該googleログインはログアウトされているユーザーがfacebookログインしようとするとき」の判定したい、という趣旨です。

わかりにくくて恐縮ですが、先人の方のお知恵を拝借できればと存じます。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

失礼いたしました、自己解決いたしました。公式の通り(https://firebase.google.com/docs/auth/ios/manage-users)以下でprovidersにtwitter.comとかfacebook.comとかの情報取得でき、それで判別可能でした。

var providers: [String] = []
//既存プロバイダー情報の取得
if let user = FIRAuth.auth()?.currentUser {
for profile in user.providerData{
providers.append(profile.providerID)
}
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • Swift

    8583questions

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

  • iOS

    4596questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

  • Firebase

    860questions

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