生涯未熟

生涯未熟

プログラミングをちょこちょこと。

Firebase Authenticationの電話番号認証でOTP Autofillを体験したかったけど敗北した

前段

Firebase Authentication、便利ですよね。各種主要な認証をポチポチっと様々なプラットフォームで実現できる、素晴らしい。
ただ、電話番号認証でOTPのAutofillをやる際には🤔となったのでメモ書き。

やったこと

きっかけとして何がやりたかったかというと、電話番号認証で認証コードがSMSで届いたら入力フォームにタップ一発でシュッとコードが入って欲しかった。
どんな挙動かというとこちらの記事内のGIFを見るとわかります。

akaki.io

で、これを実現しようと思うと以下のようなコードを書く必要がある。

<input autocomplete="one-time-code"/>

これだけ。スンバラシイ。
意気揚々とiOS/Androidで挙動確認してみたところ、iOS x Safariは想定通りにうま〜く動いてくれました。やったぜ。
ただし、Android x Chromeで試したところなんとまぁ動かない。

首をひねりながら調べていたところ、先程のサイトをよく読むと「Androidでは日本語のメッセージでの発動を確認できなかった」と・・・
Firebase Authenticationから届いてるメッセージはたしかに日本語で、それが原因かいなと対応策を探すことに。


暫く調べているとこんな記事が👀

qiita.com

Android: 日本語SMSメッセージでは自動では行われない様子。スクリプトで対応。

ここでWebOTP APIの存在を知ることに。コード書けばいいのね〜と書いて試してみました。
ちなみに navigator.credentials.getlocalhostHTTPS の場合のみしか動かないのでご注意を。

stackoverflow.com

で、やってみましたがこりゃまた動かない。どのように動かないかというと navigator.credentials.get で取れてくるべきOTPが取れずtimeoutエラー・・・
またまたなんでじゃと首を傾げていましたが、そもそもFirebase Authenticationから降ってくるメッセージってWebOTP APIの形式に合っているのか?と疑問に。
ちなみに欲しい形式は以下に載ってるように

Your OTP is: 123456.

@web-otp.glitch.me #12345

な感じ。

web.dev

どうなってるのかFirebaseのGitHub探った方が早いかなと調べたところ、こんな感じのissueが。

github.com

あー・・・これはサポートされてませんね・・・
というわけでFirebase Authentication側で対応してくれないことには実現できないのかーと敗北しました😇

※もし「いや!出来るよ!」という方がいらっしゃいましたらコメントに書いてもらえると助かります・・・🙇