【iOS/Swift】AppsFlyerの導入方法!インストール経路の計測

【iOS/Swift】AppsFlyerの導入方法!インストール経路の計測

この記事からわかること

  • Xcode/iOSアプリAppsFlyer導入する方法
  • アトリビューション計測
  • AppsFlyerLibDelegate使い方

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

AppsFlyerとは?

AppsFlyer」とはモバイルアプリのアトリビューションやアナリティクスを計測するためのサービスです。「アトリビューション計測」とはユーザーがアプリをインストールした経路やその前に行ったアクションなどの計測のことを指します。

これによりアプリをインストールされるに至った試作の貢献度を把握することができるようになります。

サービス自体は「無料プラン(Zero)」も用意されていますが、機能が制限されているため導入テストなど以外は「有料プラン(Growth/Enterprise)」を活用することのが多いかと思います。

AppsFlyerでできること

AppsFlyerの仕組みなどは以下の記事を参考にするとわかりやすいです。

AppsFlyerとそのアトリビューションの仕組み

アカウント作成

AppsFlyer」は基本的に企業単位でしかアカウント生成ができないようです。アカウントを登録する際は以下の新規作成画面にアクセスして、必要な情報を入力します。

公式:AppsFlyerのアカウント登録

【iOS/Swift】AppsFlyerの導入方法!インストール経路の計測

登録できたら管理画面に移動してアプリを追加します。

【iOS/Swift】AppsFlyerの導入方法!インストール経路の計測

iOSアプリの場合は「iOS、tvOS、MacOS」を選択し、既に公開済みのアプリであれば「ストア公開中」に、未公開であれば「承認待ち/未公開」を選択します。

iTunesアプリIDはApp StoreのURL末尾のIDを指定します。未公開であればApp Store Connect>対象アプリ>アプリ情報から確認できます。AppsFlyerを試したいだけの場合は適当な番号を入力して進めておきます。

【iOS/Swift】AppsFlyerの導入方法!インストール経路の計測

通貨やタイムゾーンを設定します。

【iOS/Swift】AppsFlyerの導入方法!インストール経路の計測

アプリ側に共有が必要な「DEV KEY」が発行されるのでコピーしておきます。このキーは左メニュー>「設定」>「アプリ設定」からいつでも確認することができます。

【iOS/Swift】AppsFlyerの導入方法!インストール経路の計測

iOSアプリに導入する方法

iOSアプリにAppsFlyerを導入してインストールされたことを検知できるように実装していきたいと思います。

  1. AppsFlyer SDKの導入
  2. AppDelegateでセットアップ

公式リファレンス:AppsFlyer iOS SDK

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からのインストールと同じ「オーガニックインストール」として反映されるようです。

【iOS/Swift】AppsFlyerの導入方法!インストール経路の計測

カスタマーIDを紐付ける

インストールイベント自体にユーザーを識別するためのIDを含ませることも可能です。customerUserIDプロパティに対象のID(ログインIDなど)を渡しておけばAppsFlyerからインストールイベントとユーザーを識別することができるようになります。

AppsFlyerLib.shared().customerUserID = "customUserId" // ログインIDなど
AppsFlyerLib.shared().start()

この設定はstartメソッドが呼び出される前に設定しておく必要があります。

AppsFlyerLibDelegate

公式リファレンス: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の「分析」>「イベント」から確認することができます。

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index