【iOS/Swift】AppsFlyerの導入方法!インストール経路の計測
この記事からわかること
- Xcode/iOSアプリでAppsFlyerを導入する方法
- アトリビューション計測
- AppsFlyerLibDelegateの使い方
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
環境
- Xcode:15.4
- iOS:17.0
- Swift:5.9
- macOS:Sonoma 14.1
AppsFlyerとは?
「AppsFlyer」とはモバイルアプリのアトリビューションやアナリティクスを計測するためのサービスです。「アトリビューション計測」とはユーザーがアプリをインストールした経路やその前に行ったアクションなどの計測のことを指します。
これによりアプリをインストールされるに至った試作の貢献度を把握することができるようになります。
サービス自体は「無料プラン(Zero)」も用意されていますが、機能が制限されているため導入テストなど以外は「有料プラン(Growth/Enterprise)」を活用することのが多いかと思います。
AppsFlyerでできること
- アトリビューション計測
- アナリティクス分析
- アプリ内イベントトラッキング
- キャンペーン管理
- ディープリンク
- etc...
AppsFlyerの仕組みなどは以下の記事を参考にするとわかりやすいです。
アカウント作成
「AppsFlyer」は基本的に企業単位でしかアカウント生成ができないようです。アカウントを登録する際は以下の新規作成画面にアクセスして、必要な情報を入力します。
登録できたら管理画面に移動してアプリを追加します。
iOSアプリの場合は「iOS、tvOS、MacOS」を選択し、既に公開済みのアプリであれば「ストア公開中」に、未公開であれば「承認待ち/未公開」を選択します。
iTunesアプリIDはApp StoreのURL末尾のIDを指定します。未公開であればApp Store Connect>対象アプリ>アプリ情報から確認できます。AppsFlyerを試したいだけの場合は適当な番号を入力して進めておきます。
通貨やタイムゾーンを設定します。
アプリ側に共有が必要な「DEV KEY」が発行されるのでコピーしておきます。このキーは左メニュー>「設定」>「アプリ設定」からいつでも確認することができます。
iOSアプリに導入する方法
iOSアプリにAppsFlyerを導入してインストールされたことを検知できるように実装していきたいと思います。
- AppsFlyer SDKの導入
- AppDelegateでセットアップ
1.AppsFlyer SDKの導入
AppsFlyer SDKはCarthageやCocoa Podsなどでの導入が可能になっています。Cocoa Podsの場合は「Podfile」に以下を追加してpod install
を実行します。
pod 'AppsFlyerFramework'
2.AppDelegateでセットアップ
AppDelegate
クラスを用意してアプリ起動時にセットアップを行います。ここで先ほど取得したDEV_KEYとアプリIDをセットします。
AppsFlyerLib.shared().appsFlyerDevKey = "DEV_KEY"
AppsFlyerLib.shared().appleAppID = "アプリID"
start
メソッドを呼び出すことでAppsFlyer SDKを開始します。※公式にはapplicationDidBecomeActive
で呼び出していましたが、applicationDidBecomeActive
では期待通りに動作できませんでした。
import SwiftUI
import AppsFlyerLib
class AppDelegate: NSObject, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
// セットアップ
AppsFlyerLib.shared().appsFlyerDevKey = "DEV_KEY"
AppsFlyerLib.shared().appleAppID = "アプリID"
// isDebugをtrueにすることでデバッグログが出力されるようになる
// リリース時にはfalseにするのを忘れずに
AppsFlyerLib.shared().isDebug = true
// 開始
AppsFlyerLib.shared().start()
return true
}
}
@main
struct AppsFlyerTestApp: App {
// 〜〜〜〜〜〜〜〜〜〜〜〜
isDebug
をONにしてこの時点でアプリを起動させてみるといろいろなログが出力されるようになります。
最小単位での実装はこれで完了でAppsFlyerのコンソールから正しく情報が取得できているか確認してみてください。XcodeからのインストールはApp Storeからのインストールと同じ「オーガニックインストール」として反映されるようです。
カスタマーIDを紐付ける
インストールイベント自体にユーザーを識別するためのIDを含ませることも可能です。customerUserID
プロパティに対象のID(ログインIDなど)を渡しておけばAppsFlyerからインストールイベントとユーザーを識別することができるようになります。
AppsFlyerLib.shared().customerUserID = "customUserId" // ログインIDなど
AppsFlyerLib.shared().start()
この設定はstart
メソッドが呼び出される前に設定しておく必要があります。
AppsFlyerLibDelegate
AppsFlyerLibDelegate
を継承させることでアトリビューションデータやイベントデータを処理するためのデリゲートメソッドを実装できます。
// セットアップ
AppsFlyerLib.shared().appsFlyerDevKey = "DEV_KEY"
AppsFlyerLib.shared().appleAppID = "アプリID"
AppsFlyerLib.shared().delegate = self
各デリゲートメソッドは以下の通りです。
extension AppDelegate: AppsFlyerLibDelegate {
// アプリ内で発生したイベントのデータを受け取る
func onConversionDataSuccess(_ conversionInfo: [AnyHashable : Any]) {
print("Conversion Data: \(conversionInfo)")
}
// コンバージョンデータの取得に失敗した場合に呼ばれる
func onConversionDataFail(_ error: any Error) {
print("Conversion Data Error: \(error.localizedDescription)")
}
// アプリのインストールや起動時に、どのキャンペーンやソースからユーザーがアプリに到達したかの情報
func onAppOpenAttribution(_ attributionData: [AnyHashable : Any]) {
print("Attribution Data: \(attributionData)")
}
// アトリビューションデータの取得に失敗した場合に呼ばれる
func onAppOpenAttributionFailure(_ error: any Error) {
print("Attribution Error: \(error.localizedDescription)")
}
}
onConversionDataSuccess
内で取得できる値は以下のような形式になっているようです。
[
AnyHashable("is_first_launch"): 1,
AnyHashable("af_message"): organic install,
AnyHashable("af_status"): Organic,
AnyHashable("install_time"): 2024-08-21 11:08:31.027
]
ログイベントの送信
logEvent
メソッドを使用してAppsFlyerにログイベントを送信することも可能です。第一引数にはイベント名を第二引数に辞書形式でキーと値を渡すことができます。
AppsFlyerLib.shared().logEvent("Button Tapped", withValues: [
"button_name": "StartButton",
"screen_name": "HomeScreen"
])
送信されたログイベントはAppsFlyerの「分析」>「イベント」から確認することができます。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。