Adjust でディープリンクを設定する【iOS】

アプリのマーケティングツール Adjust にディープリンクを設定するのに手間取ったので、まとめてみる

# やりたいこと

おすすめの記事を SNS などで拡散
アプリを持っていないユーザーにはインストールしてもらい
すでにユーザーの場合はアプリでその記事を表示させたい

![Artboard.png](https://qiita-image-store.s3.amazonaws.com/0/52756/0b8c14a6-804e-3814-1ca3-4d7bdc624a72.png)

- アプリを持っていないユーザーにはインストール後の初回起動で対象のページが表示される（ deferred deepLink ）
- アプリをすでにインストールしているユーザーには、直接対象のページを表示させる（ ユニバーサルリンク ）

# 前提

カスタムスキーマとユニバーサルリンクが設定されていること（この辺りの説明はしない）

# 設定方法（ Adjust コンソール）

## プラットフォームの設定

![Screen Shot 2018-08-15 at 18.44.04.png](https://qiita-image-store.s3.amazonaws.com/0/52756/f0db8410-e243-a3e8-cefb-ebda66992a2a.png)

`アプリID` にはストアの ID を入れる。テストアプリだったり公開前なら適当な値で OK
`IOS BUNDLE ID` には正しい値をいれないと、ユニバーサルリンクが効かないので注意

> なので、スキーマごとに別々の `BUNDLE ID` でビルドしている場合、それぞれに Adjust のアプリ設定が必要になる

![Screen Shot 2018-08-15 at 18.45.37.png](https://qiita-image-store.s3.amazonaws.com/0/52756/314b4e74-62b4-f2ef-8e92-763b102942b4.png)

`Universal Linking` を選択する
`APP PREFIX` にはプロビジョニングファイルの先頭の文字列を入れる。これと先ほどの `IOS BUNDLE ID` を組み合わせて、ユニバーサルリンクの設定がされるので正しい値を入れる

## iOS アプリのユニバーサルリンク設定

先ほどの画面にあった `短いユニバーサルリンク` でアプリが呼び出されるので Xcode の Capability に設定する

![Screen Shot 2018-08-15 at 19.01.41.png](https://qiita-image-store.s3.amazonaws.com/0/52756/bd6bf5bf-bc05-5565-b11f-20bf028c2881.png)

## app-site-association の確認

ユニバーサルリンクがドメインの検証が必要なので確認
`短いユニバーサルリンク` + `/apple-app-site-association` にアクセスして appID が正しいかどうかを確認
`appID` が `${APP PREFIX}.${IOS BUNDLE ID}` になっていれば OK

```JSON
https://xyza.adj.st/apple-app-site-association
{
  "applinks": {
    "apps": [],
    "details": [{
      "appID": "AB123CD45E.jp.beijaflor.awesome-app",
      "paths": ["/*"]
    }]
  }
}
```

ここまで設定すれば、ブラウザなどで `短いユニバーサルリンク` = `https://xyza.adj.st/` のリンクをタップするとアプリが起動するはず
アプリが起動しないとするとユニバーサルリンクが発動しないので、設定が間違っていないか確認する

## トラッカーの設定

トラッカーの `追加パラメータ` を選択

![Screen Shot 2018-08-15 at 18.47.19.png](https://qiita-image-store.s3.amazonaws.com/0/52756/e2d4e5bb-033c-3ad4-ab5d-37cbf48e010f.png)

deeplink を設定できるのでアプリのカスタムスキーマで実装している URI を設定する

![Screen Shot 2018-08-15 at 18.49.06.png](https://qiita-image-store.s3.amazonaws.com/0/52756/2971bc78-c265-8e64-b240-2ad3a1ec0b6a.png)

出来上がったトラッカーの URL はこんな感じ
先ほどのディープリンクの URI 自体もこの中に含まれるので、記事 ID などを動的に作りたい場合は普通に URL を書き換えてしまって OK

## アプリに渡される URL

トラッカーの URL をブラウザ上でクリックすると、リダイレクトされ iTunes Store かアプリが起動されるかする
この時、アプリ側で呼び出される URL が違っているので、カスタムスキーマしか実装していないと罠にはまる（ハマった）

|種類|実行タイミング|URL|
|---|---|---|
|deferred deepLink|アプリインストール直後|`beijaflor://open_url?url=https%3A%2F%2Fbeijaflor.jp%2F123456`|
|ユニバーサルリンク|リンク直後|`https://xyza.adj.st/open_url?url=https%3A%2F%2Fbeijaflor.jp%2F123456`|

多分、こんな感じで実行される

1. `https://app.adjust.com/` のトラッカー URL がクリックされる
2. `短いユニバーサルリンク` にリダイレクトされる（これをダイレクトユニバーサルリンクと呼ぶ）
3. アプリがインストールされているとブラウザではなくアプリが起動される
4. アプリがインストールされていないとユニバーサルリンクが発動しないので、ブラウザで普通に表示される
5. レンダリングのタイミングでさらに iTunes Store にリダイレクトされる

インストールされていると `3.` で終了（ブラウザが起動されないので）するという感じかな

## 最後に

別段難しいことはないのだけれど、それぞれの技術を横断的に知ってないと詰まったりするので、もう少しドキュメントがわかりやすくなったらいいなぁ、、、なんて
あと、トラッカー設定で入力したのとは別の URL でユニバーサルリンクが発動するのは罠

## 参考

- [adjust iOS SDK](https://docs.adjust.com/ja/sdk/ios/#deeplinking-deferred)
- [ディープリンクについて](https://docs.adjust.com/ja/deeplinking/)
- [ユニバーサルリンクの実装](https://docs.adjust.com/ja/universal-links/)