技術と趣味の亜空間

主にゲームプログラミングとその周辺に関する記事を不定期で上げていきます

Unity + Adjust でiOSのディープリンクを実装する

概要

スマホでWebサイトやアプリ内ブラウザでリンクを踏むと、もし対象のアプリがインストールされている場合はそのまま起動し、
インストールされていない場合はストアへ遷移する機能(ディープリンクと言います)を、
Unity と Adjust を利用して実装したのでその備忘録です。
Adjustの設定諸々は省略して、今回はAdjustを利用したiOSディープリンク実装だけに焦点を絞ります。
Unity対象バージョン: 2018.4 以降

追記

2021年2月現在、Adjustのサイトもリニューアルされていたのでそれに合わせて更新しました。
合わせて末尾のその他の欄にOAuth認証のリダイレクトに関しても追記しました。

Adjustについて

簡単に言うとマーケティングサービスの1つです。
KPIとかの記録を取るのに役立つものです。
ディープリンク自体は別にAdjust利用しなくても実現できますが、
アプリがインストールされていれば起動・無ければストア遷移というのをAdjustのサーバー側で良しなにやってくれます。
https://www.adjust.com

Unity SDKの導入

AdjustにはUnity SDK が用意されているので、それを導入します。
Adjustのドキュメントに記載してある通りに進めばOKかと。

ディープリンクの実装

実装はAndroidiOSで利用する機能が異なります。今回はiOSの方を実装していきます。

iOSはユニバーサルリンクという、Appleが用意したディープリンク機能を利用します。
iOS9以前はAndroidと同じカスタムスキーム方式だけでしたが、セキュリティ的な問題から独自のユニバーサルリンクが追加されました。
なので、iOS9以降はこのユニバーサルリンクが推奨されています(カスタムスキームだけの利用も一応できます。)

Adjustとの連携設定

Adjustの設定ページからユニバーサルリンクをONにしたりカスタムスキームの設定をする必要がありますが、
この辺は公式ドキュメントや以下の記事を見ていただくとわかりやすいかと。

qiita.com

Adjustのユニバーサルリンクの設定ドキュメントではユニバーサルリンクを実装できると書かれています。

Rawユニバーサルリンク
書き方: https://abcd.adj.st/?adjust_t=<トラッカートークン>&CustomParam1=abc123&CustomParam2=cdf456&.....

サイト上から設定したRawユニバーサルリンクをユーザーが直接タップすることで、アプリがインストールされてなければストアへ移動し、インストールされていればアプリが起動します。
注意点として、ユーザーが直接操作でそのURLを踏む手順が必要ということです。後述しますが、リダイレクトは機能しない(アプリがインストールされていても必ずストアにしか飛ばない)ので気をつけてください。

Xcode の Capability設定自動化

XcodeのAssociated Domainsに設定するapplinksを毎回手動で追加するのは煩わしいのでUnity内で自動化スクリプトを実装します。

ユニバーサルリンク経由で得たURLをアプリ内で取得する

ユニバーサルリンク経由でアプリを起動した時に受け取るURLを取得するネイティブプラグインを実装します。
以下のファイルをPluginsフォルダ以下に設置します。プラットフォーム設定はもちろんiOSだけです。


次にUnity側で呼び出してURLを受け取るためのクラスを実装します。


これでGetLocalUniversalLink() を呼び出せばURLを受け取れます。
あとはURLに設定したカスタムパラメーター等をパースして活用すれば良いと思います。

その他

先程も言ったようにユニバーサールリンクはリダイレクト機能が利用できないので、例えばTwitterでツイートされたリンクにユニバーサルリンクを設定してもストアにしか飛びません。
これはTwitter側で自動的に短縮されたURL経由でリダイレクトされるためです。
解決策としては専用のサイトを作成し、ツイッターのリンクはそのサイトへ飛ばすだけにして、ユニバーサルリンクはそのサイトの中に設置する必要があります。

また、OAuth認証で設定するリダイレクトURLも同様に機能しません。
これもTwitterのパターンと同じようにリダイレクト先のWebページを自作して、そのページ内にユニバーサルリンクを埋め込んだボタン等を設置させてユーザーを誘導する必要があります。