SMS を Web サイトのリンクと QR Code で起動する方法についてのまとめと、それに対する問題点を残す
結論
Web サイトの Link で SMS を起動する場合 Delimiter が異なることに注意する
- Android:
sms:<電話番号>?body=<URIエンコードされたメッセージ>
- Android 以外:
sms:<電話番号>&body=<URIエンコードされたメッセージ>
QR Code で SMS を起動する場合はエンコードしない
- QR Code:
smsto:<電話番号>:<メッセージ>
ただし Android の端末デフォルトアプリである スキャナー
で QR Code よ読み込む際は国番号(+81)が利用できない
そこに対応したい場合は sms:
を利用することになるが body に :
があると正常にメッセージが展開されない可能性があることに注意が必要
検証に用いた情報
宛先
- 国番号有り:
+819000000000
- 国番号無し:
09000000000
メッセージ
テストメッセージです
改行も入っています。
URL (https://localhost/testurl)
長文用パディング長文用パディング長文用パディング長文用パディング長文用パディング長文用パディング長文用パディング長文用パディング長文用パディング
URI Scheme
SMS起動するURI Schemeとして下記の2つを試した
sms:
smsto:
sms: の問題点
body を指定するための Delimiter が異なる
WebサイトのLinkとする場合にメッセージ付きの SMS の起動がそれぞれ下記で行えた。
- Mac/iPhone:
sms:<電話番号>&body=<URIエンコードされたメッセージ>
- Android:
sms:<電話番号>?body=<URIエンコードされたメッセージ>
つまり Android の Delimiter は ?
だが、それ以外では &
となるため User-Agent 等で分岐する必要がある
QR Code では指定できない場合がある
QR Code で sms:
を指定したものを iPhone で読み込んだ場合に :
が body に含まれる場合に正常にメッセージとして展開されない
利用した QR Code は下記となる。(未検証だが Android 用も添付する)
smsto: の問題点
HTML の a タグの href 属性で指定できない
Web サイトのリンクとして利用したい場合には通常 HTML の a タグの href 属性に指定するが Mac の Google Chrome と iPhone の Google Chrome の両方で起動することができないことを確認
国番号を指定すると QR Code から開けない場合がある
Android のデフォルトアプリである スキャナー
で読み込むと、国番号有りの宛先の場合にテキストとして読み込まれる問題がある
Googleレンズ等の別のアプリで読み込んだ場合は問題なく開けるため、スキャナーのバグ?のようなものなのでよほどのことがなければ気にする必要は無いかもしれない