アプリ開発の中でお問い合わせ機能を実装したい場面があります。内容は不具合の報告などアプリの内容によって様々ですが、少なくとも以下の2点は注意しておきたい点です。
・できるだけ詳細な情報を送信してもらう
・ユーザーが入力、送信しやすいようにしておく
特にアプリやiOSのバージョンなどといった情報は開発側からすれば重要ですが、ユーザー側にとっても必ずしもそうだとは限りません。必要な情報はユーザー側に入力を促せるような仕組みを導入したいところですが、それをUIで作るのは大変です。そこでGoogleフォームの出番です。
#ブラウザを利用する
以下のようにアプリ側のコードとしてはSFSafariViewController
をSwiftUIで使えるようにします。後は作ったGoogleフォームのURLを指定するだけでOKです。
import SwiftUI
import SafariServices
struct SafariView: UIViewControllerRepresentable {
var urlString: URL
func makeUIViewController(context: UIViewControllerRepresentableContext<SafariContent>) -> SFSafariViewController {
let safariViewController = SFSafariViewController(url: urlString)
safariViewController.dismissButtonStyle = .done //閉じるボタンの形式を変更できる
return safariViewController
}
func updateUIViewController(_ uiViewController: SFSafariViewController, context: UIViewControllerRepresentableContext<SafariContent>) {
}
}
以下のViewをNavigationLink
の遷移先や.sheet
で表示されるように設定しておけばフォームを呼び出すことができます。
struct FormView: View {
var body: some View {
if let urlString = URL(string: "https://forms.gle/sample") {
SafariContent(urlString: urlString)
.ignoresSafeArea()
}
}
}
これ以外にもWeb上のページを表示する方法はありますが、SFSafariViewController
には拡大表示や、閉じるボタンのローカライズを自動で行ってくれるというメリットがあります。
Googleフォームを利用すれば、チェックボックスなど様々な入力型式が使えます。あらかじめ質問を用意しておいて手間を減らしておけばユーザーの負担も少なくて済みますし、作るのも簡単なので個人的にはこの方法がおすすめです。
#余談
今回この記事を作るにあたって有名なアプリのお問い合わせ機能を調査してみたのですが、やはり大手のものはアプリ内で完結させているものが多い印象です(Instagram、Google製アプリなど)。
それらは不具合の報告なのか、機能の追加要望なのかといった目的ごとに入力画面の出し分けが行われていました。もし上記のようにアプリ内UIとしてお問い合わせ機能を実装する場合はそちらを参考にするとよいと思います。