アプリにお問い合わせ窓口を作るとする。
設定画面で「メールでお問い合わせ」をタップしたらメール作成画面に遷移する、というイメージですよね。
でも、ひと口にメール作成画面と言ってもいくつかのパターンがあります。
- アプリ内でメール作成する
- 別のアプリに飛ばす
本エントリーでは、開発者にとってそしてユーザ側にも自然で正しい仕様について考えてみます。
iOS 14 でのメールApp周りの変更点
「デフォルトメールApp」をユーザ側で選択できるようになりました。
例えば GoogleのGmail だったり Microsoftの Outlook をデフォルトに設定できます。
デフォルトの定義って何だっけ?と思った方、するどい。
mailto URLスキームで呼び出されるアプリがデフォルトと思っていいはずです。
Webブラウザでメールリンク踏んだ時にメール作成画面が起動するアプリです。
1. よくある仕様
アプリの設定画面とかからメール送信するために、よくある仕様。
MessageUI フレームワークでメール作成画面を表示する。つまり、AppleのメールAppで送信することになる。
- メリット: App内のモーダルで完結するので使いやすい。
- デメリット: メールAppがインストールされている必要がある。
ちなみに GmailをデフォルトメールAppに設定していて、かつAppleのメールAppをアンインストールしている場合、OSによって「メールをインストールしますか?」のアラートが表示される仕様となっている。
これはないよね。何のためのデフォルトメールAppなの?ってなっちゃう。
2. デフォルトメールAppを利用する仕様
これは簡単です。
UIKit の open() で mailto URLスキームを投げるだけ。
- メリット: 実装が超簡単。
- デメリット: Appleのメールを利用しているユーザの場合でも、別アプリに飛ばされちゃう。
3. ちょっとひねった仕様
ちょっと複雑になるんだけどこんなのも考えてみた。
もしAppleのメールAppが利用可能であれば、アプリ内でモーダルで送信。
もし利用不可なら URLスキームでアプリ連携する。
- メリット: ほとんどのユーザにはいい感じで動作する
- デメリット: 次のようなユーザでは問題がある。
問題のあるケース
- デフォルトメールAppはGmailに設定している。
- Gmail アプリのメールアカウントにはGmailを設定しており、普段のメール送信にはGmailを利用している。
- AppleのメールAppもインストールしており、こちらは appleのiCloudメールを設定している。
- iCloudメールは全く利用していない。
こんな人いるかな笑
まあ、あくまでもモデルケースです。
この方の場合、アプリからのお問い合わせはGmailを利用するのが自然ですよね。
アプリ側の判断で iCloudメールの作成画面を開いちゃうとユーザは混乱します。
結論
つーか俺自身、結論は出てない。
とりあえずだけど、自分は3の方針でやってます。
ユーザビリティ的にはバランスがいいのかなと。
今後、iOS側の仕様変更、挙動変更とかもあるかもしれないし、じっくりウォッチしていきたいと思っています。
設定されている デフォルトメールapp を取得できるAPIなんてなさそうだし・・・