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

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

ただいまの
回答率

87.51%

【Firebase】【Swift】メール認証の本人確認メールのdynamic linkの設定

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,686

score 34

お世話になります。

Firebaseのメール認証で、本人確認メールのdynamic linkを設定し本人確認メールからアプリへ遷移リンクを設定するために実装しましたが、sendEmailVerificationにエラーが返ってきてしまい、本人確認メールが届きません。
手順と実装が正しいかどうか教えて頂きたいです。

なおアプリはまだAppStoreへはリリースしておりません。

■ 手順
Firebaseコンソールで以下を実施
・プロジェクトの設定より「バンドルID」「1344894983」「App ID Prefix」を設定
・Dynamic Linksで新しいダイナミックリンクを作成

■ 実装
・Associated DomainsをON、ドメインを追加
【AppDelegate】

import UIKit
import Firebase
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

〜省略〜
    func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {

        // ■ ダイナミックリンク用.
        return application(app, open: url,
                           sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,
                           annotation: "")

        //return true
    }


    func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
        if (DynamicLinks.dynamicLinks()?.dynamicLink(fromCustomSchemeURL: url)) != nil {
            // Handle the deep link. For example, show the deep-linked content or
            // apply a promotional offer to the user's account.
            // ...
           return true
        }
        return false
    }

    func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
        guard let dynamicLinks = DynamicLinks.dynamicLinks() else {
            return false
        }
        let handled = dynamicLinks.handleUniversalLink(userActivity.webpageURL!) { (dynamiclink, error) in
            // ...
        }

        return handled
    }
}

【SignupViewController】

import Firebase

class SignupViewController: UIViewController {
       〜省略〜
    private func signup_() {
        guard let email = emailText.text else { return }
        guard let password = passwordText.text else { return }

        Auth.auth().createUser(withEmail: email, password: password, completion: { [weak self] (user, error) in
            if nil == error {

                let credential = EmailAuthProvider.credential(withEmail: email, password: password)
                user?.reauthenticate(with: credential) { error in
                    let actionCodeSetting =  ActionCodeSettings.init()
                    actionCodeSetting.handleCodeInApp = true
                    actionCodeSetting.url = URL(fileURLWithPath: "http://XXXXXX/XXX/")      // ディープリンク
                    actionCodeSetting.setIOSBundleID("com.XXXX.XXXX")                       // バンドルID
                    user?.sendEmailVerification(with: actionCodeSetting, completion: { [weak self] (error) in
                        if nil == error {
                            print("成功")
                        } else {
                            print((error?.localizedDescription)!)
                        }
                    })
                }
            }
        })
    }

■ エラー内容
print((error?.localizedDescription)!)のエラー内容は
An internal error has occurred, print and inspect the error details for more information.
というもので、エラー内容から原因はわかりませんでした。

またFirebaseコンソール画面よりダイナミックリンクを確認したところ以下のワーニングがでていました。
ただコンソールではPrefixは設定済みなのになぜこんなワーニングがでているのかわかりません。
The dynamic link has 1 warning(s)
iOS app 'com.XXXX.XXXX' lacks App ID Prefix. UniversalLinks is not enabled for the app

Firebaseのヘルプを見ても正しく設定してとしか書かれておらず。。。
iOS app lacks App ID Prefix. UniversalLinks is not enabled for the app.
※https://firebase.google.com/docs/dynamic-links/debug#ios-app-id-prefix-absent

解決手段がなく、かなりハマっています。。。
正しい設定をするためには何が足りていないのでしょうか。
お手数ですがご教示して頂きたいです。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

check解決した方法

0

自己解決しました。

1.実装ミス
actionCodeSetting.url = URL(fileURLWithPath: "http://XXXXXX/XXX/") 
→ actionCodeSetting.url = URL(string: "http://XXXXXX/XXX/") 

2.Authenticationにドメインを追加していなかった

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

  • ただいまの回答率 87.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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