テクノロジー戦略本部でアプリのエンジニアをしております、一ノ瀬です。
CASH iOSに、アプリインストール後の体験を変えることができるDeferred Deep Linkを導入した話をしたいと思います。
Deep Linkとは
まずDeep Linkとは、別のWEBサイトやネイティブアプリから、自社アプリの特定画面に遷移させる仕組みのことです。
アプリがインストールされている場合は指定の画面を表示して、インストールされていない場合はストアのアプリの画面を表示することができます。
インストール直後に起動した場合は、アプリのホーム画面が表示されます。
Deferred Deep Linkとは
次にDeferred Deep Link(ディファードディープリンク)ですが、Deep Linkの機能に加えて、どこからアプリがインストールされたのかがわかる仕組みです。
例えば、マンガアプリの広告が面白かったからインストールしたというとき、どのマンガの広告からインストールしたのかが特定できるため、アプリ起動時に広告に掲載されていたマンガを自動で表示してあげるということができます。
このようにユーザーのインストールの動機にもとづいて、アプリの初回の体験を変えることができます。
CASHでは、特定のURLからアプリをインストールしたユーザーに対して、査定から成約、成約額の振込までをサポートしたいという背景がありました。
CASHは広告を配信していることもあり、数値の計測にAppsFlyerを導入していたのでOneLinkを使ってDeffered Deep Linkを導入しました。
仕組みとしては、AppsFlyerのOneLink(Deep Link)のURLを踏んだ際、AppsFlyer側でOneLink情報を保持し、アプリ初回起動時にAppsFlyerライブラリがサーバーから保持されたOneLink情報を取得してきてくれます。
取得されるOneLinkの情報の例
[
"agency": null,
"is_first_launch": 0,
"esp_name": null,
"adset_id": null,
"orig_cost": 0.0,
"engmnt_source": null,
"iscache": 1,
"media_source": SMS,
"af_sub4": null,
"campaign": {キャンペーン},
"cost_cents_USD": 0,
"adgroup": null,
"campaign_id": null,
"retargeting_conversion_type": none,
"is_branded_link": null,
"click_time": {クリックした時間},
"is_universal_link": null,
"af_sub5": null,
"af_siteid": null,
"af_status": Non-organic,
"shortlink": ed1ed0aa,
"install_time": {インストールされた時間},
"af_sub2": null,
"match_type": probabilistic,
"af_dp": {設定したURLスキーム},
"af_click_lookback": 7d,
"af_sub3": null,
"redirect_response_data": null,
"adset": null,
"af_cpi": null,
"af_sub1": null,
"adgroup_id": null
]
導入方法
前提として Apple Developer ページのApp ID にて、該当のアプリのAssociated Domains
をオンにしておく必要があります。
その後、OneLinkでディープリンクを作成して、Xcode上からは Associated Domains の Domains にapplinks:xxxx.onelink.me
(OneLinkでリンク作成時に指定したドメイン)を設定することから始まります。
OneLinkの作成は、以下を順に作業するのがわかりやすいです。
OneLink™ 1/4:オウンドメディアからユーザーを獲得する – ヘルプセンター
アプリ側の実装も簡単で、AppDelegateでDelegateメソッドを実装すれば良いだけです。
class AppDelegate: UIResponder, UIApplicationDelegate {
...
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
AppsFlyerTracker.shared().appsFlyerDevKey = AppsFlyerの開発キー
AppsFlyerTracker.shared().appleAppID = アプリのId
AppsFlyerTracker.shared().delegate = self
...
}
extension AppDelegate: AppsFlyerTrackerDelegate {
func onConversionDataSuccess(_ data: [AnyHashable: Any]) {
// 特定の処理を実装
}
}
func onConversionDataFail(_ error: Error) {
print(error)
}
}
デバッグ時の注意点
デバッグの注意点は、AppsFlyerのTest Devices にデバッグしたい端末のIDFAを登録しないといけない点です。
これを行わないと特定のOneLinkを踏んでアプリをインストールしても、どのOneLinkからインストールしたのかの情報を取得することができません。
また、iOSではUniversal LinkのURLを直接SafariのURLバーで入力しても起動できないので、AppsFlyerが生成してくれるOneLinkのQRコードからOneLinkを開くか、メールやメモなどでOneLinkのURLを保存しておいてURLタップでOneLinkを開く必要があります。
おわりに
CASHでは特定ユーザーに向けた施策としてDeffered Deep Link を使用しました。改めてこの機能について考えると、広告とアプリ体験をセットにして施策を考えることができる可能性のある仕組みなのでオススメです。
BuySell Technologiesではエンジニアを募集しておりますので、ご興味持っていただけた方は是非お問い合わせください。