Firebaseの電話認証ログインとAppleのAPNs

この投稿はコンセプトを掴むための説明を行うものであり、詳細な作業ステップを一つ一つ追うものではありません。この投稿でコンセプトを掴み、他のインターネット投稿を見ながら詳細作業を行うことをお勧めします。

iOSアプリを作るとき、Firebase Authenticationの電話認証を使いたい場合はどうすればいいのでしょうか?📱

まず電話番号認証について直感的に考えると、1) アプリから電話番号をFirebaseに送信し、2) Firebaseはその電話番号に6桁のピンコードを送信し、3) SMSで送信されたそのピンコードをユーザーがアプリに入力し、4) アプリはそのピンコードをFirebaseに送信して、5) Firebaseがアプリから受け取ったピンコードが自分が送ったものと一致するか確認すれば完了という感じですよね?でも、電話番号認証を使用する際、Firebaseはその認証リクエストが正しいアプリからのものか確認するため、かなり多くのステップを踏むことになります。

つまり、1)と2)の間でFirebaseは電話番号認証リクエストが正当なアプリから送信されたものかを確認し、その後SMSを送信します。この確認作業にはSilent APNs通知を利用します。初めてログインする電話番号がログインを試みると、FirebaseはSilent Push Notificationを使ってトークンをデバイスに送信します。結局、APNsの設定をしなければならないことが分かりますね。

APNsはこのような構造で動作します。その中でProviderというバックエンドサーバーの役割をFirebaseが担います。(iOSではなくAndroidの場合、FirebaseのFCMを使用することになりますので、外から見える作業プロセスは少し簡単になるでしょう)。では、APNs設定をどの順番で行えば良いのでしょうか?私は開発環境を基準に説明しますね。どうせそれが最初ですから。

まずAppleの開発者サイトでPush Notificationを使用したいアプリのIdentifierにPush Notification機能を有効にする必要があります。説明は不要でしょう。

次に開発/テストを行うユーザーのCertificationを取得する必要があります。まず開発用ラップトップのキーチェーンでAPNs Certificationを生成するための証明書リクエストを生成します。そして、同様にApple開発者サイトでその証明書リクエストを使用してAPNsを使用するアプリのAPNsサービスCertificateを生成します。最後にこのCertificationをダウンロードしてキーチェーンに登録すれば、開発者のMacBookでAPNsをテストできるようになります。

最後に残っているのは何でしょう?そうです。バックエンドサーバーの設定がまだです。バックエンドサーバーにAPNsキーを登録しなければ、APNsに正しくメッセージリクエストを送ることができません。Apple開発者サイトに入るとKeyメニューがありますが、このメニューでバックエンドサーバー用のAPNsキーを発行できます。ダウンロードしたこのキーをバックエンドサーバーに登録すればいいです。上記の場合、Firebaseサーバーに登録する必要があり、Firebase設定でその作業を行うことができます。

この作業以外にもreCAPTCHA認証作業(Push Notificationを受け取れない場合に使用)設定も必要ですが、これはreCAPTCHAのためのURLをカスタムURLスキームに追加するだけです。このURLはGoogleService-Info.plistを調べてもいいですが、設定しないで実行するとエラーメッセージに親切に貼り付けるように表示されます。お好きなように作業すれば大丈夫です。

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *