AppsFlyer SDKの連携 - iOS

ios.pngSDK Version: 4.8.9(Release notes)

1. 概要

このガイドでは、AppsFlyerのSDKをiOSアプリと連携する方法について詳しく説明します。インストール、アップデート、セッション、追加のアプリ内イベントのほか、アプリインストール(アプリ内購入、ゲームレベル等を含む)を計測し、ROIとユーザーエンゲージメントレベルを評価することができます。iOS SDKは、iOSバージョン6以降のすべてのiOSデバイス(iPhone、iPod、iPad)と互換性があります。

 

AppsFlyerのSDKは、AppleのIPv6 DNS64/NAT64ネットワークと完全な互換性があります。詳細については、こちらをクリックしてください。

 重要!

AppsFlyerのSDKでは、NSUserDefaultsクラスが使用されます。NSUserDefaultsのすべての値を消去すると、アトリビューションの問題が発生する可能性があります。

2. クイックスタート

2.1 AppsFlyerのSDKをダウンロードして、Xcodeに追加する

CocoaPods CarthageStatic Framework Static Lib
  • 最新バージョンのCocoaPodsがダウンロードされ、インストールされていることを確認してください。
  • Podfileに次の行を追加します:
    pod 'AppsFlyerFramework'
  • pod installを実行します
  • 以降、Xcodeでプロジェクトを開く際には、.xcodeprojファイルではなく、.xcworkspaceファイルを使用するようにしてください。

AppsFlyerのSDKでは、次のネイティブのフレームワークが使用されます。

AdSupport.framework
このフレームワークは、デバイスからIDFAを収集するために必要です。
IDFAは、Facebook広告、Twitter、Google Ads、および他のネットワークを計測するために不可欠です。
iAd.framework
このフレームワークは、アプリでApple Search Adsを計測するために必要です

2.2 AppDelegateで連携を設定する

次の方法でアプリのAppDelegate.mファイルを開き、AppsFlyerのSDKをインポートします。

Swift Objective-C
AppsFlyerLibをインポートします

3. SDKの初期化

iTunes Connectから取得するアプリIDと、AppsFlyer Dev Keyを使用して、didFinishLaunchingWithOptionsメソッドの中で次のようにSDKを初期化します。

ここでのアプリIDは、"id"接頭辞を付けずに数字のみで設定する必要があります。

Swift Objective-C
AppsFlyerTracker.shared().appsFlyerDevKey = "<your-appsflyer-dev-key>";
AppsFlyerTracker.shared().appleAppID= "123456789"
AppsFlyerTracker.shared().delegate= self
#ifdef DEBUG AppsFlyerTracker.shared().isDebug= true
#endif

 

isDebug=trueが設定されている場合、AppsFlyer SDKのログがxCode Consoleに表示されます

 

  • applicationDidBecomeActive関数に次のコードを追加します。
Swift Objective-C
func applicationDidBecomeActive(application: UIApplication) { 
// Track Installs, updates & sessions(app opens) (You must include this API to enable tracking) 
AppsFlyerTracker.shared().trackAppLaunch() 
// your other code here.... }

4. アプリ内イベントの計測

アプリ内イベントにより、アプリ内の動作に関するインサイトを得ることができます。ROI(投資収益率)やLTV(顧客生涯価値)を計測するために、時間を取って計測するイベントを定義することをお勧めします。

Tracking in-app events is performed by calling trackEvent with event name and value parameters. See In-App Events for more details.

アプリ内イベント名は45文字以下である必要があります。イベント名が45文字を超える場合は管理画面に表示されず、ローデータ、Pull API、Push APIにのみ表示されます。

例:レベル達成アプリ内イベント

Swift Objective-C
AppsFlyerTracker.shared().trackEvent(AFEventLevelAchieved, 
withValues: [
	AFEventParamLevel: 9,
	AFEventParamScore : 100
]);

これにより、AFEventLevelAchieved定数を使用してaf_level_achievedイベントタイプが生成され、次のイベント値がこのイベントに紐づきます:{af_level: 9 , af_score: 100} 

 

AppsFlyerでは、アプリ内イベント、またはiOS SDKバージョン4.8.1を始めとする他のSDK APIで、英語以外の文字をサポートします。

通貨記号や小数点は認識されないため、使用しないでください。

 使用例:

Swift Objective C
AppsFlyerTracker.shared().trackEvent(AFEventPurchase,
withValues: [
    AFEventParamRevenue: @1200,
    AFEventParamCurrency : @"JPY"
]); 

5. ディープリンクの計測

 ヒント

アプリにディープリンクを実装することを強くお勧めします。  ディープリンクはリターゲティングキャンペーンの重要なパートです。リターゲティングキャンペーンを実施する場合は、ディープリンクの使用を強くお勧めします。

iOS 9以降では、アプリでUniversal Linksをサポートする必要があります。詳細については、こちらをクリックしてください。


このような起動をレポートするには、アプリケーションデリゲートに次のコードを追加します。

Swift Objective-C
// iOS 9以降の場合にUniversal Linkからアプリ起動をレポートする
    func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
        AppsFlyerTracker.shared().continue(userActivity, restorationHandler: restorationHandler)
        return true
    }

    // Universal Linksをサポートしないアプリ(Twitter)およびiOS 8以前の場合に、ディープリンクからアプリ起動をレポートする
    func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
        AppsFlyerTracker.shared().handleOpen(url, sourceApplication: sourceApplication, withAnnotation: annotation)
        return true
    }

    // iOS 10以降の場合にディープリンクからアプリ起動をレポートする
    func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
        AppsFlyerTracker.shared().handleOpen(url, options: options)
        return true
    }

6. 収益の計測

Use the af_revenue (AFEventParamRevenue) event parameter to count revenue as part of an in-app event. You can populate it with any numeric value, positive or negative.

 

AFEventParamRevenue (equivalent to using af_revenue) is the ONLY event parameter that is counted on AppsFlyer as real revenue on the raw data and dashboard. For more details please click here.


例:収益アプリ内イベント

Swift Objective-C
AppsFlyerTracker.shared().trackEvent(AFEventPurchase, 
withValues: [
	AFEventParamContentId:"1234567",
	AFEventParamContentType : "category_a",
	AFEventParamRevenue: 1.99,
	AFEventParamCurrency:"USD"
]);

7. コンバージョンデータの取得

AppsFlyerを使用すると、SDKから直接、各新規インストールのユーザーアトリビューションデータにリアルタイムでアクセスできます。これにより、パーソナライズされたコンテンツを提供したり、アプリ内の特定アクティビティにユーザーを誘導したりして、ユーザーのアプリへのエンゲージメントを大きく高めることができます。 

この高度な機能の詳細については、こちらをクリックしてくだい。

8. ユーザー識別子

ユーザー識別子を取得するには、次のような多数のオプションを利用できます。

AppsFlyerデバイスIDの取得

AppsFlyerの一意のデバイスIDは、アプリが新しくインストールされるたびに作成されます。これは、次のコードを使用して取得できます。

Swift Objective-C
let appsflyerId = AppsFlyerTracker.shared().getAppsFlyerUID()

顧客ユーザーIDの設定

独自の顧客IDを設定すると、独自の一意のIDを、AppsFlyerの一意のIDや他のデバイスのIDと相互参照できるようになります。このIDは、ポストバックAPIと共にAppsFlyerのCSVレポートで確認でき、貴社の内部IDと相互参照することができます。

顧客ユーザーIDを設定するには:

Swift Objective-C
AppsFlyerTracker.shared().customerUserID= "my user id"

 重要な注意点

It is recommended to set your Customer User ID as soon as possible as it is only associated to events reported after its setup. If setCustomerUserId is called before calling trackAppLaunch, the Customer User ID is visible in the raw export for installs and for events. If it is set after, only the value only for events tracked is visible after calling this method.

Customer User ID can also be used to complete integrations with Analytics platforms such as Mixpanel and Swrve.

顧客ユーザーIDの取得

最初の起動後に顧客ユーザーIDの値を再度設定することのないように、以下を使用して値が空かどうかを確認できます。 

[AppsFlyerTracker sharedTracker].customerUserID

顧客ユーザーIDの詳細については、こちらをクリックしてくだい。

ユーザーメールの設定

アプリでユーザーのメールアドレスを収集する場合、AppsFlyerを使用すると、1つ以上のメールアドレスをレポートできます。メールの値を暗号化するには、Sha1、MD5、プレーンの暗号化方法を使用できます。

例:ユーザーのメールアドレスを収集する

Swift Objective-C
AppsFlyerTracker.shared().setUserEmails( ["email1@domain.com", "email2@domain.com"], 
with: EmailCryptTypeSHA1)

 

メールアドレスなどの個人識別情報(PII)は、AppsFlyerによって保持されず、いずれのレポートにも表示されません。PIIの収集は、メディアソースへのポストバックを目的としてのみ行われます。

IDFAとIDFV

アプリにAdSupport.frameworkが含まれる場合、AppsFlyerではIDFA(広告主用のID)とIDFV(ベンダー用のID)を自動的に収集します。

9. オプション機能

アンインストールの計測

アンインストールを計測する場合、アプリでリモートプッシュ通知を有効にしてください。詳細については、「リモート通知プログラミングガイド」を参照してください。

アンインストール機能のセットアップを完了するには、「iOS SDK連携の手順」に沿って操作してください。 

プッシュ通知の計測

プッシュ通知からのアプリ起動のトラッキングを有効にするには、アプリケーションデリゲートに次のコードを追加します。

Swift Objective-C
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
	AppsFlyerTracker.shared().handlePushNotification(userInfo)
}

プッシュメッセージには、AppsFlyerトラッキングパラメーターと共にafパラメーターを設定する必要があります。

メッセージの例:

{
   "aps":{
      "alert":"Push text",
      "sound":"default",
      "category":"REMINDER_CATEGORY"
   },
   "_p":123456,
   "payloadKey":"payloadValue",
   "af":{
      "pid":"swrve_int",
      "is_retargeting":"true",
      "c":"test_campaign"
   }
}

クロスプロモーションの計測

AppsFlyerを使用すると、ユーザーが使用する既存アプリ内に表示された、いずれかのアプリのクロスプロモーションから生じるインストールの計測とアトリビュート分析を行うことができます。アプリのクロスプロモーションは、アプリの追加インストールを促進する重要な増加要因となる場合があります。

詳細については、こちらの「クロスプロモーションのトラッキング」に関する記事を参照してください。 

ユーザー招待の計測

AppsFlyerを使用すると、アプリ内のユーザー招待から生じるインストールの計測とアトリビュート分析を行うことができます。既存ユーザーが友人や連絡先を新規ユーザーとしてアプリに招待できるようにすると、アプリの重要な増加要因となる場合があります。 
 
詳細については、こちらの「ユーザー招待の計測」に関する記事を参照してください。 

通貨コードの設定 

AppsFlyerに送信される各アプリ内イベントでは、特定の通貨コードが使用できるだけでなく、以下のAPIを使用してグローバル通貨コードを設定することもできます。グローバル通貨コードは、1 AFEventParamCurrency nbsp 1がアプリ内イベントで送信されない場合に使用されます。 nbsp 1がアプリ内イベントで送信されない場合に使用されます。 nbsp AFEventParamCurrencyがアプリ内イベントの一部として送信されない場合に使用されます。

USD(米国ドル)がデフォルト値です。使用可能なISO通貨コードは、こちらで確認することができます。

通貨コードを設定するには、以下のAPIを使用します。

public void currencyCode(String currencyCode);

使用例:

Swift Objective-C
AppsFlyerTracker.shared().currencyCode= "USD"

アプリ内購入検証

 

この関数はiOS 7以降でサポートされます。

AppsFlyerのSDKにより、アプリ内購入のサーバー検証を実行できます。レシート検証のトラッキングを設定するには、validateAndTrackInAppPurchaseメソッドをSKStoreKitのcompleteTransaction:コールバックの内部で呼び出す必要があります。この呼び出しにより、af_purchaseアプリ内イベントが自動的に生成されます。

- (void) validateAndTrackInAppPurchase:(NSString *) productIdentifier
price:(NSString *) price
currency:(NSString *) currency
transactionId:(NSString *) tranactionId
additionalParameters:(NSDictionary *) params
success:(void (^)(NSDictionary *response)) successBlock
failure:(void (^)(NSError *error, id reponse)) failedBlock;

 

価格パラメーターには、検証される購入イベントに関連付けられた総収益を含める必要があります。


この呼び出しには、「Success」と「Failure」(検証の失敗など、あらゆる理由によるもの)の2つのコールバックブロックがあります。成功すると、Appleのサーバーから提供されるレシート検証データと共にディクショナリが返されます。

 重要

テストの目的のため、useReceiptValidationSandboxフラグをYESに設定することが推奨されます。これにより、リクエストがAppleサンドボックスサーバーにリダイレクトされます。

#ifdef DEBUG
    [AppsFlyerTracker sharedTracker].useReceiptValidationSandbox= YES;
#endif

 

 例

Objective-C Swift
[[AppsFlyerTracker sharedTracker] validateAndTrackInAppPurchase:product.productIdentifierprice:product.price.stringValue
currency:@"USD"
transactionId:trans.transactionIdentifier
additionalParameters:@{@"test": @"val" , @"test1" : @"val 1"}
success:^(NSDictionary *result){
  NSLog(@"Purchase succeeded And verified!!! response: %@", result[@"receipt"]);
} failure:^(NSError *error, id response) {
  NSLog(@"response = %@", response);
}];

レシート検証で返される可能性のある値のリストについては、こちらからAppleのマニュアルを参照してください。

匿名化

AppsFlyerでは、AppsFlyerアナリティクスで特定のユーザーを匿名化するためのメソッドが用意されています。このメソッドは、最新のプライバシー要件とFacebookのデータおよびプライバシーに関するポリシーに準拠しています。デフォルトではNOに設定されているため、匿名化は無効になっています。

ユーザーのインストール、イベント、セッションのトラッキングを明示的に匿名化するには、SDKの初期化中にこのAPIを使用します。

Swift Objective-C
AppsFlyerTracker.shared().deviceTrackingDisabled= true

トラッキングを再開するには、deviceTrackingDisabled(falseに設定されている)を再度呼び出します。

 警告

ユーザーを匿名化することにより、アトリビューション情報に大きな悪影響があります。
ユーザーの情報を収集することが法的に禁じられている地域でのみ、このオプションを使用してください。

カスタムのセッション間隔

By default, at least 5 seconds must lapse between 2 app launches to count as separate 2 sessions (more about counting sessions). 
However, you can use the following API to set your custom value for the minimum required time between sessions:

Swift Objective-C
AppsFlyerTracker.shared().minTimeBetweenSessions= <your_custom_time_in_seconds>

Note that setting a high value to the custom time between launches may badly impact APIs relying on sessions data, such as deep linking.

ユーティリティ系アプリ向けバックグラウンドセッション

iOSでは利用できません。 
 

iOSアプリ拡張とWatchKit

アプリ拡張には、インターネットを使用するパーミッションが必要であり、次の方法で指定します。

  1. アプリ拡張のinfo.plistファイルにアクセスします
  2. NSExtension / NSExtensionAttributesで、RequestsOpenAccessフラグを「YES」に設定します。

次のコードをアプリ拡張のUIViewController viewDidLoadに追加します。

Swift Objective-C
override func viewDidLoad() {    
        super.viewDidLoad()
        AppsFlyerTracker.shared().appsFlyerDevKey = "MY_APPSFLYER_KEY"

        // MY_APP_ID below stands for you app ID on iTunes Connect. Should be 9 or 10 digits.
        AppsFlyerTracker.shared().appleAppID = "MY_APP_ID"
                
        AppsFlyerTracker.sharedTracker().trackAppLaunch()
    }

App Extensionでアトリビューションデータを受け取るには、こちらの手順に従い、AppDelegateではなく、アプリのUIViewControllerに実装します。

Opt-Out

In some extreme cases you might want to shut down all SDK tracking due to legal and privacy compliance. This can be achieved with the isStopTracking API. Once this API is invoked, our SDK no longer communicates with our servers and stops functioning.

There are several different scenarios for user opt-out. We highly recommend following the exact instructions for the scenario, that is relevant for your app.

 警告

Use this API only in cases where you want to fully ignore this user from any and all tracking. Using this API SEVERELY impacts your reporting and attribution.

Swift Objective-C
AppsFlyerTracker.shared().isStopTracking = true

 重要

isStopTrackingtrueに設定されている場合は、trackAppLaunchの呼び出しをしないでください。

デバイス名の収集

AppsFlyer SDKでは、内部分析のためにデバイス名を収集することができます。デフォルトでは、この機能はオフになっています。オンにするには、以下のAPIを使用します。

Swift Objective-C
>AppsFlyerTracker.shared().shouldCollectDeviceName = false`

 重要

デバイス名は、特定の地域では個人データとみなされます。法的に許可されていることを理解し、ユーザーの明示的な同意を得ている場合にのみ、この情報を収集します。

カスタムデータの追加設定

setAdditionalData APIを使用するには、SegmentAdobe、Urban Airshipなど、複数の外部パートナーのプラットフォームとSDKレベルで連携する必要があります。このAPIは、プラットフォームの連携の記事に、 setAdditionalData APIが必要であると記載されている場合にのみ使用してください。
次に、iOSでObjective-CまたはSwiftを使ってsetAdditionalDataを実装するコードの例を示します。

Objective-C Swift
NSDictionary* CustomDataMap = [[NSDictionary alloc] initWithObjectsAndKeys:@"value_of_param_1", @"custom_param_1", nil];
    
[[AppsFlyerTracker sharedTracker] setAdditionalData:CustomDataMap];

10. SDK実装テスト

連携のテスト方法に関する詳細については、こちらをクリックしてください。

11. アプリをストアに提出

アプリのアプリストアへの送信方法については、こちらをご覧ください。

この記事は役に立ちましたか?
12人中8人がこの記事が役に立ったと言っています

コメント

0件のコメント

ログインしてコメントを残してください。