AppsFlyer SDK 実装ガイド - iOS

現在のバージョン: V.4.8.0

AppsFlyerのSDKはアプリのインストールとイベント計測機能を提供しています。非常に堅牢(現在まで80億以上のSDKのインテグレーションが行わています)で、セキュリティ度が高く、軽量でとても埋め込みが簡単です。

以下の必須項目を実装することで、インストール、アップデート、セッションを計測できます。またインストールだけではなく、追加でアプリ内イベント(課金、ゲームレベル達成、等)を計測し、ROIとユーザーエンゲージメントも評価できます。

必須項目に加え、任意のオプション機能についても、本ガイドに記載されております。

iOS SDKは、Static LibではiOSのバージョンが6およびそれ以上、FrameworkではiOSバージョン8以上の全てのiOSデバイス(iPhone、iPod、iPad)に対応しています。

注意点:  

  • AppsFlyerのSDKはAppleのIPv6 DNS64/NAT64ネットワークに対応しています。より詳しい情報はこちらをご覧ください。
  • AppsFlyerのSDKはNSUserDefaults classを利用しています。NSUserDefaultsの値をクリアするとアトリビューションに問題が発生する可能性があります。

以下のセクションがインテグレーションガイドでカバーされています。

  • iOS SDKダウンロード
  • リリースノート
  • SDKのアプリへの埋め込み(必須)
  • SDKの初期化 & インストールイベント(計測に最低限必要な実装)
  • アプリ内イベントの計測API(任意)
  • 上級インテグレーション
  • SDK導入テストの実施

 

 iOS SDKダウンロード

  • iOS SDKをstatic libraryとしてダウンロードするためには、こちらをクリックしてください。
  • iOS SDKをframeworkとしてダウンロードするにはこちらをクリックしてください。

1.  リリースノート

  • AppsFlyer iOS SDKのリリースノートはこちらをご確認ください。

2.  アプリへのSDKの埋め込み(必須)

AppsFlyer SDKはframeworkとstatic libraryで利用可能です。

2.1  AppsFlyer SDK Framework

Frameworkを実装するもっとも簡単な方法はcocoapodsを利用する方法です。:

  • podファイルに次の行を追加します:
pod ‘AppsFlyerFramework’

もしcocoapodsを利用しない場合は以下の手順を行ってください:

  • XcodeでBuild Phases >> Link Binary with Libraries を開き >> “+” サインをクリックし新しいlibraryを追加します。

  • Add Other をクリックし、AppsFlyerLib.framework を追加します

  • 以下のヘッダーを追加します。
#import <AppsFlyer/AppsFlyer.h>

2.2  AppsFlyer SDK Static Library

Static Libraryは現在、Cocoapodsでは廃止予定です。 この記事(上記)から直接ダウンロードしてください。

以下の手順に従ってください。

  • headerとlib filesをプロジェクトに追加します。
  • AppsFlyerヘッダーインポートを追加します。
  • #import "AppsFlyerTracker.h"
  • AdSupport.frameworkをプロジェクトに追加し、”Optional”として設定します。アプリ申請に関する説明はこちら

2.3  IDFAとApple Search Ads

  • AdSupport.frameworkを追加します - AppsFlyerではこのframeworkが含まれている場合に限り、IDFAを収集します。
    このフレームワークを追加しない場合、Facebook、Twitterをはじめ、その他のアドネットワークの計測ができません。
  • iAd.framework をプロジェクトに追加します。Apple Search Adsの計測をする場合に必須ですので、このフレームワークを追加することを推奨しています。

3.  SDKの初期化&インストールイベント(計測に最低限必要な手順)

注記:これはアプリインストールを計測し始めるために最低限必要な手順です。

アプリケーションを初めて起動するときに、SDKを初期化する必要があります。次のトラッキングイベントを送信する前に、必ずSDKを初期化してください。

3.1  SDKの初期化

SDKを初期化するには、次のコードを“didFinishLaunchingWithOptions”ファンクションに追加します:

[AppsFlyerTracker sharedTracker].appsFlyerDevKey = @"REPLACE THIS WITH YOUR Dev_Key";
[AppsFlyerTracker sharedTracker].appleAppID = @"REPLACE THIS WITH YOUR App_ID";

注:数字のみを入力し、”ID”は含めないようにしてください。例:App IDがid123456789であれば、以下のように表示されます。

[AppsFlyerTracker sharedTracker].appleAppID = @"123456789";

[Dev_Key] を独自の Dev_Key に置き換えます(独自の Dev_Key はアカウントへログインし、AppsFlyer 管理画面の「アプリ設定」からご確認ください。

例:a4kGpVyxm8iGgzvzT8NPaV

3.2  コードの追加

“applicationDidBecomeActive” ファンクションの AppDelegate.m ソースファイルに、次のコードを追加します:

#import "AppsFlyerTracker.h"
-(void)applicationDidBecomeActive:(UIApplication *)application
{
     // Track Installs, updates & sessions(app opens) (You must include this API to enable tracking)
     [[AppsFlyerTracker sharedTracker] trackAppLaunch];
}

3.3 リターゲティング計測のためのディープリンクレポート

アプリがディープリンク(Universal Linksまたはスタンダード)をサポートしている場合、またはリターゲティング広告を予定している場合は、セクション5.7で説明されている手順を実装してください。

4.  アプリ内イベントの計測 API (任意)

この API は AppsFlyer がインストール後のアプリ内イベントの計測を可能にします。これらのイベントは広告主によって定義され、イベント名に加えて任意のイベント値が含まれます。

これらのイベントによって、ロイヤルユーザーがどのようにアプリを発見し、特定のキャンペーンやメディアから成果に至ったかをトラッキングできます。ROI (投資収益率) や LTV (ライフタイム バリュー) を計測するために、計測したいアプリ内イベントを慎重に定義するのをおすすめします。

シンタックス:

- (void) trackEvent:(NSString *)eventName withValues:(NSDictionary*)values

eventName は、イベントの名前を定義する任意の文字列です。

Values はリッチイベントを構成するイベントパラメータです。

収益(revenue)をアプリ内リッチイベントの一部として計測:‘af_revenue” (constant)

AFEventParamRevenue

イベントパラメータは収益をアプリ内リッチイベントの一部として計測します。正または負の任意の数値を設定できます。

注:“af_price”   

AFEventParamPrice

はイベントの説明的なパラメータであり、収益として計測するためのものでなく、収益額や LTV 計測に反映されませんので注意ください。

例1:「レベル達成」アプリイベント

[[AppsFlyerTracker sharedTracker] trackEvent: AFEventLevelAchieved withValues:@{        
    AFEventParamLevel: @9,
    AFEventParamScore : @100 }];

これはイベントタイプ “af_level_achieved” を以下のイベントバリューと一緒に生成します:

{af_level: 9 , af_score: 100}

例2:購入イベント

[[AppsFlyerTracker sharedTracker] trackEvent:AFEventPurchase withValues: @{
    AFEventParamContentId:@"1234567",
    AFEventParamContentType : @"category_a",
    AFEventParamRevenue: @200,
    AFEventParamCurrency:@"USD"}];

これはイベントタイプ “af_purchase” を以下のイベントバリューと共に生成します:

{af_content_id: “1234567” , af_content_type: “category_a”, af_revenue: 200, af_currency: “USD”}

上記の購入イベントは$200 の収益を含み、これは収益として管理画面に反映されます。

注記:

  • アプリ内イベント名は45文字以下にしてください。45文字以上のイベントネームは管理画面に表示されず、ローデータレポート、PullおよびPush APIにのみ表示されます。
  • 1つのアプリ内で設定できるアプリ内イベントの上限は、128個です。

iOSアプリ内リッチイベント詳細についてはこちらをご参照ください。

5.  上級インテグレーション

以下の API は任意であり、AppsFlyer SDK の上級インテグレーションの一部です。

5.1  通貨コードの設定(任意)

AppsFlyer 側に送信される各リッチアプリ内イベントに使用される各通貨コードに加えて、以下の API を用いてグローバル通貨コードを設定できます。グローバル通貨コードは、“af_currency”(AFEventParamCurrency) がアプリ内イベントデータとして送信されない場合に適用されます。

USD (米国ドル) が既定値です。使用できる ISO 通貨コードはこちらです。

通貨コードを設定するには、以下の API を用いてください:

[[AppsFlyerTracker sharedTracker].currencyCode = @"GBP"];

5.2  AppsFlyerユニークID を取得 (任意)

アプリの新規インストールに対して、それぞれ AppsFlyer 独自の ID が生成されます。AppsFlyer の独自ID は AppsFlyer がレポートや API で用いる主な ID です。

AppsFlyer の独自 ID を取得するには以下の API を用いてください:

(NSString *) [AppsFlyerTracker sharedTracker] getAppsFlyerUID

5.3  顧客 ID の設定(任意)

独自の顧客 ID を設定すると、独自の固有 ID を、AppsFlyer ID や他のデバイスの ID と相互参照できる ようになります。この ID は、ポストバック API とともに AppsFlyer の CSV レポート上で確認でき、広告主 側の内部的な ID と相互参照することができます。

顧客 ID を設定する方法:

[[AppsFlyerTracker sharedTracker].customerUserID = @"YOUR_CUSTOM_DEVICE_ID"];

重要:

  • この顧客IDの取得コードは、trackAppLaunchの前に呼び出される必要があります。
  • この設定を実装したあとに発生したイベントのみに顧客IDが付与されるため、顧客 ID の設定は、できる限り最初の段階で設定することをおすすめします。
  • MixpanelやSwrveなどのアナリティクスツールとのAppsFlyer連携を利用する場合には、顧客IDはこのAPIを用いて設定する必要があります。

顧客IDについてのより詳しい情報はこちらをご覧ください。

5.4  コンバージョンデータの取得(Get Conversion Data)(任意)

AppsFlyer を使うことで、リアルタイムで直接 SDK レベルでユーザーのアトリビューションデータにアクセスできます。このデータをもとに、ユーザーがインストール後にアプリ初期起動で表示するランディングページをカスタマイズすることが可能です。

この機能の詳細はこちらを参照ください。

5.5   App Extension Supportの有効化 (任意)

App Extensionはインターネットに接続する許可を必要とします。

  1. App Extensionの info.plist file にアクセスします。
  2. NSExtension / NSExtensionAttributesでRequestsOpenAccess flagをYESに設定します。

App Extension ViewController ViewDidLoadでAppsFlyerLibを初期化します。

[AppsFlyerTracker sharedTracker].appsFlyerDevKey = @"YOUR_DEV_KEY_HERE";
[AppsFlyerTracker sharedTracker].appleAppID = @"APP_ID_HERE"; 
[AppsFlyerTracker sharedTracker].delegate = self;
[[AppsFlyerTracker sharedTracker] trackAppLaunch];

コンバージョンデータを受け取るには、

  1. App Extension ViewController.h にアクセスします。
  2. Appsflyerヘッダーファイルをインポートします。
#import "AppsFlyerTracker.h"

     3. <AppsFlyerTrackerDelegate>をinterface declarationに追加します。

Extension ViewController.mに以下のメソッドを追加してください:

-(void)onConversionDataReceived:(NSDictionary*) installData {
    id status = [installData objectForKey:@"af_status"];
   if([status isEqualToString:@"Non-organic"]) {     
      id sourceID = [installData objectForKey:@"media_source"];      
      id campaign = [installData objectForKey:@"campaign"];      
      NSLog(@"This is a none organic install. Media source: %@  Campaign: %@",sourceID,campaign);      
  } else if([status isEqualToString:@"Organic"]) {      
      NSLog(@"This is an organic install.");      
  }
 }
-(void)onConversionDataRequestFailure:(NSError *) error {  
  NSLog(@"%@",error);
}
- (void) onAppOpenAttribution:(NSDictionary*) attributionData {  
  NSLog(@"attribution data: %@", attributionData);
}
- (void) onAppOpenAttributionFailure:(NSError *)error {
  NSLog(@"%@",error);
 }

5.6   ユーザーメールアドレスの設定 (任意)

AppsFlyer は、デバイスに紐付く複数のメールアドレスをレポートすることができます。デベロッパーはユーザーからメールアドレスを取得し、AppsFlyer にそれを好きな暗号化メソッドで報告できます。以下の暗号化メソッドが利用可能です: SHA1、SHA256、MD5、plain

例:

[[AppsFlyerTracker sharedTracker] setUserEmails:@[@"email1@domain.com", @"email2@domain.com"] withCryptType:EmailCryptTypeSHA1];

注: メールアドレスのような個人識別可能情報(PII)はAppsFlyerでは保管しておりません。またこれらの情報はいかなるレポートにも表示されることはありません。この情報の収集の目的は純粋にメディアソースへのポストバックのためのみとなります。

5.7  リターゲティング・アトリビューションのディープリンクを記録(任意)

ディープリンクはリターゲティング広告において重要な実装です。リターゲティング広告を運用する場合はディープリンクの使用を推奨しています。

AppsFlyerはiOS Universal Linksを含むディープリンク経由の起動をレポートし、リターゲティングアトリビューションの効果分析を可能にします。

iOS9以上は、Universal Linksによってディープリンクが作動します。したがってUniversal Linksを実装する必要があります。

AppsFlyerのUniversal Links実装ガイドはこちらをご確認ください。

このような起動を記録するには、次のコードを app delegate から追加します:

// Reports app open from a Universal Link for iOS 9
- (BOOL) application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *_Nullable))restorationHandler
{    
[[AppsFlyerTracker sharedTracker] continueUserActivity:userActivity restorationHandler:restorationHandler];
return YES;
}
// Reports app open from deeplink for iOS 8 or below (DEPRECATED)
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
     sourceApplication:(NSString*)sourceApplication annotation:(id)annotation {
[[AppsFlyerTracker sharedTracker] handleOpenURL:url sourceApplication:sourceApplication withAnnotation:annotation];
return YES;
}

// Reports app open from deeplink for iOS 10 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
     options:(NSDictionary *) options {
[[AppsFlyerTracker sharedTracker] handleOpenUrl:url options:options];
return YES;
}

より詳細な情報はOneLink設定ガイドをご参照ください。

5.8  アプリ内購入イベントのレシート検証(任意)

注:この機能は iOS7 以上にて対応しています

AppsFlyerのSDKはアプリ内購入のサーバー検証を提供しています。レシート検証の計測を設定するには、SKStoreKitのcompleteTransaction: callback内にあるvalidateAndTrackInAppPurchaseメソッドを呼び出す必要があります。この呼び出しは自動的にアプリ内イベント「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 つのコールバックブロックが含まれています。「success 」の場合は、dictionary は Apple のサーバーから提供されるレシート検証データとともに返却されます。

重要: テストを実行するためには、useReceiptValidationSandboxフラグを YESに設定することを推奨します。こうすることで、リクエストをApple sandboxサーバーにリダイレクトします。

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

例:

[[AppsFlyerTracker sharedTracker] validateAndTrackInAppPurchase:product.productIdentifier price:product.price.stringValue
currency:@"USD"
transactionId:trans.transactionIdentifier
additionalParameters:@{@"test": @"val" , @"test1" : @"val 1"}
success:^(NSDictionary *result){
               NSLog(@"Purcahse succeeded And verified!!! response: %@", result[@"receipt"]);
} failure:^(NSError *error, id response) {
               NSLog(@"response = %@", response);
}];
5.9 エンドユーザーのオプトアウト(任意)

AppsFlyer には、AppsFlyer アナリティクスから特定のユーザーをオプトアウトするための方法があります。この方法は、最新のプライバシー要件に適合しており、Facebook のデータポリシーとプライバシーポリシーにも適合しています。既定値は NO で、計測が有効になっています。

セクション 4 の SDK 初期化の段階で、以下の API を用いてオプトアウトしてください。

[AppsFlyerTracker sharedTracker].deviceTrackingDisabled = YES;

5.10  ID for Advertisers – IDFA/IFA からの明示的なオプトアウト(任意)

AppsFlyerのSDKは、AdSupport.frameworkライブラリがプロジェクト内に含まれている場合に限り、IDFAを収集します。明示的にオプトインやオプトアウトを行う必要はありません。ただし、IDFAを明示的にオプトアウトしたい場合は、セクション4のSDKの初期化で、次のAPIを使用してください:

[AppsFlyerTracker sharedTracker].disableAppleAdSupportTracking = YES;

IDFAは、disableAppleAdSupportトラッキングがYESに設定された場合、AppsFlyerのサーバーで収集されることはありません。

5.11 アンインストール・トラッキング(任意)

AppsFlyerではアンインストールのトラッキングが可能です。このファンクションを使って、アンインストール機能に登録してみましょう。

このファンクションを呼ぶ必要があります:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {

この機能を有効にするために、このコードを呼び出す必要があります。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// AppsFlyer SDK Initialization
// Register for Push Notifications
   UIUserNotificationType userNotificationTypes = (UIUserNotificationTypeAlert |
                                                   UIUserNotificationTypeBadge |
                                                   UIUserNotificationTypeSound);
   UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:userNotificationTypes
                                                                            categories:nil];
   [application registerUserNotificationSettings:settings];
   [application registerForRemoteNotifications];
   
   [application setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
   application.applicationIconBadgeNumber = 0;
}

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
   [[AppsFlyerTracker sharedTracker] registerUninstall:deviceToken];
}

使用例:
[[AppsFlyerTracker sharedTracker] registerUninstall:deviceToken];

Appleのディベロップメント環境に対してアンインストールテストをする際は、以下のフラグをNOにする必要があります:

[AppsFlyerTracker sharedTracker].useUninstallSandbox = NO;

 

現状、アンインストールのテストにはTestFlightをProductionでテストいただく必要がございます。

AppsFlyerのiOSアンインストール計測の詳細はこちらをご確認ください。

注:アンインストール計測は、Push通知パーミッションを許可しない場合、計測ができません。

 

5.12 OneLinkを使ったディープリンクの実装(任意)

OneLinkはaf_dpパラメータ配下のスキームもしくはiOS9におけるユニバーサルリンクに言及することで、ディープリンクされた場所を開かせることができます。

AppsFlyer SDKにより呼び出されたonAppOpenAttributionコールバックを実行することができます。それによりアプリを開くOneLinkパラメータを戻します。それからバリューを分析し、そのロジックを適用して関連するアプリのページを開かせることができます。 

(void) onAppOpenAttribution:(NSDictionary*) attributionData; ///iOS

より詳しい情報はこちらをご覧ください。

5.13プッシュ通知の計測(任意)

AppsFlyerではプッシュ通知を広告キャンペーンの一部として測定することが可能です。

アプリにプッシュ通知の計測を実装するには、以下のコードをアプリのAppDelegateに追加してください。

-(void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
   [[AppsFlyerTracker sharedTracker] 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"
   }
}

5.14 クロスプロモーション計測
AppsFlyerはユーザーが持っているアプリからもう一つのアプリへのクロスプロモーション経由のインストールを計測することが可能です。アプリのクロスプロモーションはアプリインストールを伸ばす大きな要因になります。
クロスプロモーションの詳細については、こちらをご確認ください。

5.15 ユーザー招待の計測
ユーザー招待経由のインストールを計測するには、こちらをご確認ください。

5.16 セッション間のカスタムタイム
AppsFlyerは2つのセッションをそれぞれ計測するためのデフォルトの間隔は5秒です。セッションはユーザーがアプリを起動した場合に開始されます。各セッション間の間隔を変更したい場合は、以下のAPIを利用してください。
[[AppsFlyerTracker sharedTracker] setMinTimeBetweenSessions:<your custom time in seconds>];


6. SDK 導入テストの実施

App Store にアプリを提出する前/後に SDK 導入をテストする方法は、こちらをご覧ください。

 

この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています
他にご質問がございましたら、リクエストを送信してください

コメント

  • Avatar
    Jamie Weider

    バージョン履歴 - Version History

    リリースノート - iOS SDK 4.3.5 (14 January 2016):
    - プッシュ通知測定のサポート

    リリースノート - iOS SDK v3.3.1 (1-October-2015):
    - iOS 9におけるユニバーサルリンクからのアプリオープン
    - AppsFlyer Frameworkへのcocoapodsのサポート

    リリースノート - iOS SDK v3.3.0 (10-September-2015):
    - iOS 9のサポート、iOS 6のサポート停止
    - iOS 9におけるTLS 1.2のサポート。SDKがframeworkとstatic libraryの両方に対応。アプリ内購入のレシート検証(セクション6.7) – トランザクション検証のサポートのためAPIをアップデート。

記事コメントは受け付けていません。

Powered by Zendesk