活用した状況
checka!というiOSアプリを開発しています。このアプリはTrelloのような、グループで使えるチェックリスト管理アプリです。このなかで、自分のグループに知人を招待するためにはID文字列を渡す必要がありました。その際にUniversal Linksを使えば簡単に実現できることはわかっていたのですが、
- バックエンドを用意したくない
- ドメインもめんどくさいからとりたくない
- FirebaseHostingやAmazonS3のドメインそのままの感じは嫌だ
という感じでした。そのときにFirebase Dynamic Linksを使えば簡単に、しかもドメインもそれなりのもので実現することができた話です。
TL;DR
- Dynamic Linksのドメインは
*.page.link
なのでそれなりのドメインにできる - アプリがインストールされている場合はアプリが開かれ、インストールされていない場合のリダイレクト先を設定できる
- バックエンドいらずでお手軽Universal Linksができる
事前準備
Firebase側
Firebaseのセットアップを行ってください。下記が公式リファレンスなのでこれに従ってやれば詰まることはないかと思います。
https://firebase.google.com/docs/guides/?hl=ja
iOS側
Associated Domainsの設定が必要です。2つやることがあります。
1. AppIDにAssociated Domainsの設定をする
Apple Developerのサイトに行って、対象のApp IDを開いて下記のようにAssociated DomainsをEnabledにしてください。
2. XcodeからCapabilitiesでAssociatedDomainsの設定をする
この部分で、AssociatedDomainsをONにしておいてください。Dynamic Linksの設定が終わったら追加で記入します。
Dynamic Linksの設定
利用開始
Firebaseのコンソールを開き、対象のプロジェクトを選択して、左側のメニューから「Dynamic Links」を開いてください。この画面はころころ変わりそうな気もするのであれですが、下の画像のような内容が出てると思うので、「始める」を押してください。
サブドメインの設定
サブドメインの設定を求められるのでいい感じのサブドメインを決めましょう。checka!の場合は、 checka.page.link
です。そのままですね。この部分は早いものがちだと思うので、取られていたら仕方ないという感じですね。
Dynamic Linkの作成
新規作成
こんな感じの画面になっていると思うので、「新しいダイナミックリンク」を押してください。
パスの設定
Dynamic Linksは短縮URLの作成ができるので、今回の用途的には少し違和感があるかもしれません。URL接頭辞として、すきな文字列を入力しましょう。checka!のグループ参加の場合は /join_group
しました。ちなみに、2019/02/11現在ではパスを切ることはできませんので、/group/join
にはできませんでした、残念。
ディープリンクの設定
今回は使わないので、ディープリンクURLはAppStoreのURLを入れて、リンク名もアプリ名を入れておきましょう。
iOS用の設定
下の「ディープリンクをiOSアプリで開く」にチェックを付けて、セレクトボックスから対象のアプリを開きましょう。ここで選択されたアプリのbundleIDが、端末にインストールされているアプリのbunldeIDと異なっていると、Universal Linksによるアプリ起動ができないのでご注意ください。また、AppStoreIDやTeamIDの入力が必要になります。AppStoreIDは、checka!だとhttps://itunes.apple.com/jp/app/id1451433619
の数字の部分、TeamIDはAppleDevelopterのAppIDのPrefixの部分です。
選択すると、下記のような項目がでてきます。ここでは、アプリがインストールされていない場合の挙動を設定できます。自分は上の「アプリのAppStoreページ」を選択しましたが、必要であればカスタムURLの設定を行うことができるようです。
Android用の設定
Androidでも利用する場合は設定を行う必要があります。今回は割愛します。
詳細オプション
checka! では、一番下のチェックボックスにはチェックを入れています。ここのチェックを入れていない場合、インストールされていない端末で開くと、Firebase側の画面に一度アクセスして、そこにボタンがあり、そのボタンを押すとAppStoreへアクセスすることになってしまい、自分としては微妙でした。よって、チェックをいれています。
完了
ここまででDynamic Linksの設定は完了です。ここまでやれば、https://[your subdomain].page.link/apple-app-site-association
にアクセスすると、Universal Linksに必要な設定項目がJSONとして返却されているかと思います。
アプリの設定
Associated DomainsのAppLinks設定
先程のXcodeのCapabilitiesの設定を開き、Associated Domainsの項目の+を押して、applinks:[your subdomain].page.link
を追加しましょう。これがないとアプリで起動できません。
試す
Dynamic Linksで設定した項目に応じたURL https://[your subdomain].page.link/[your path]
に、今までの設定がされたアプリをインストールした端末でアクセスしてみましょう。アプリが起動するはずです。
ハンドリング
Dynamic LinksのページにはSDKを使ってハンドリングしていますが、今回は不要です。 AppDelegate.swift
で下記のような感じでハンドリングできます。
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let incomingURL = userActivity.webpageURL else {
return false
}
// incomingURLをゴニョゴニョする
return true
}
checka!では
https://checka.page.link/join_group?id=[id]
でアクセスされた場合、パラメータに渡されたidを入力した状態でグループ参加の画面を開いくようにしています。ちなみに、この機能は2019/02/11審査に出したので、執筆時点ではまだリリースされていません。
おわりに
自分としてはとても楽をして、ユーザー体験を高めることができたのでとてもありがたかったです。よければTwitterフォローしてください。
Twitter: @_mogaming