Help us understand the problem. What is going on with this article?

【iOS Firebase Dynamic Links】アプリインストールを経由するときに注意すること

はじめに

Firebase Dynamic Links を用いて、 Web ページ等から AppStore を経由して新規インストール、その後の起動でリンクに基づいた処理をアプリで行う場合の注意点等をまとめます。
基本的な実装方法に関しては日本語ドキュメント等もありますのでそちらをご覧ください。

なお、 iOS10 以降をサポートバージョンとするアプリを前提として話を進めます。
また、 Firebase Dynamic Links によって流れてくるリンクのことを別のリンクと区別するためにここでは Dynamic Links と呼ぶことにします。

呼ばれるメソッドが違う

最後に、application:openURL:sourceApplication:annotation: メソッド(iOS 8 以前)と application:openURL:options: メソッド(iOS 9 以降)で、アプリのカスタム URL スキームを通して受信したリンクを処理します。これらのメソッドが呼び出されるのは、アプリが iOS 8 以前でリンクを受信したときと、iOS(バージョンを問わず)にアプリをインストールした後にアプリが初めて開かれたときです。

iOS でダイナミック リンクを受信する

iOS のサポートバージョンによって実装方法も異なってくることは多くの方がご存知だと思いますが、「アプリをインストールした後にアプリが初めて開かれるとき」も関係してくる話であることを見落としてはいけません。

// インストール後2回目以降で Dynamic Links が来る
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
    // DynamicLinks.dynamicLinks().dynamicLink(fromUniversalLink: URL) で判別
}
// インストール後初起動で Dynamic Links が来る
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any]) -> Bool {
    // DynamicLinks.dynamicLinks().dynamicLink(fromCustomSchemeURL: URL) で判別
}

ここでもう一つ注意したいのが、 インストール後初起動では必ず Dynamic Links が流れてくる という点です。なので、インストール後初起動のタイミングで行う処理がなかったとしても Dynamic Links を受信可能にしたアプリの場合、 url のパース処理で Dynamic Links が流れてくることを考慮しなければなりません。
ちなみに、Web ページ等から該当のリンクを経由していない場合に流れてくる Dynamic Links は url が nil になっています。

プレビューページスキップは非推奨

AppStore もしくはアプリに直接遷移させることもできますが、推奨しないとコンソールにも書かれています。実は、 AppStore を経由した場合に、アプリ側に流れてきた Dynamic Links がどれだけ信頼できるものであるかを決めるのに役立っているのがこのプレビューページとのことです。
また、スキップした場合に挙動が安定しない(リンクが渡ってこない)などが発生する可能性もあるため、基本的にはプレビューページは有効にしておくべきと言えます。

プレビューページを通過後にクリップボードを確認してみると、その仕組を少し覗き見ることができるかもしれません。

動作確認

AppStore からインストールされる必要はありません。
一度対象のアプリをデバイスから削除しておき、その状態でリンクを踏んで AppStore まで遷移後、 Xcode でいつもどおり実機インストールを行うことでインストール後初起動の挙動を再現することが可能です。
また、 TestFlight などでインストールするときも Xcode でインストールするときとタイミングは同じなのでテスターさんも比較的簡単に動作確認を行うことが可能です。

おわりに

実際のプロダクトで動作確認を行ったときの挙動をもとに記事にしているため、環境によっては異なる挙動を見せるかもしれません。挙動の違いや、間違いと感じる箇所があればコメント等よろしくお願いします。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした