- 質問:新しいアプリでトラフィックを獲得する最適なメディアソースは何ですか?
- 回答:他のアプリを既に使用しているユーザーです。これらは、あなたのブランドとアプリに既に馴染んでおり愛用しているユーザーです。
- これらのユーザー向けにクロスプロモーションキャンペーンを実施することで、他のトラフィックソースと比較して、高いコンバージョンとリテンションを期待できます。また、このトラフィックは、通常オウンドメディアのためプロモーション費用が100%無料です。
既存のアクティブユーザーの貴重なリソースの誤用や酷使を避けるために、これらのキャンペーンを注意深く計測することをお勧めします。
AppsFlyerでは、既存アプリでのクロスプロモーションキャンペーンからのインストールを計測し記録することができます。その後、クロスプロモーションのトラフィックを最適化し、より良い成果を出すことができます。
クロスプロモーション計測はAppsFlyer SDK 4.8以降で使用できます
仕組み
- アプリ上でクロスプロモーション広告がユーザーに表示されます。広告クリエイティブは、バナーや動画などのクリックできるものを指します。
- [オプション] SDKはクロスプロモーションのインプレッションをユーザーに送信します。
- ユーザーが広告をクリックします。
- trackAndOpenStore メソッドがクリックを記録し、ユーザーを広告対象のアプリのアプリストアページにリダイレクトします。SDKが作成するクリックには、最適な計測結果を得るためにデバイス広告IDが含まれます。計測リンクには、ルックバック期間、広告セット名、サブパラメーター等の追加パラメーターを追加できます。
- 広告対象アプリがインストールされて起動されると、AppsFlyer管理画面上でメディアソース「
af_cross_promotion
」の下に、新しく獲得されたユーザーが表示されます。このインストールをもたらした掲載面アプリは、このメディアソースのsite_id
として表示されます。
注意
通常のモバイル広告では、クリックされるとURLがアクティベートされます。クロスプロモーションのモバイル広告の場合は、リンクが存在しませんが、代わりにAppsFlyer SDKの trackAndOpenStore メソッドをアクティベートします。
クロスプロモーションの計測
クロスプロモーションキャンペーンのインプレッションとクリックの両方を計測することは非常に有効です。インプレッションからクリックまでのコンバージョン率、さらにはインプレッションからインストールまでのコンバージョン率を算出できるようになり、それに応じて最適化することができます。
ヒント
クロスプロモーションキャンペーンでは、インプレッションからインストールまでのコンバージョン率は、このアプリ間の類似性を示します。コンバージョン率が高いほど、ユーザーにとっての魅力度がこれらのアプリの間で近いことを意味しています。
クロスプロモーションのクリックとインプレッションの計測は、次の2つの異なるAPIコールを使用して実行されます。各APIコールは、クロスプロモーションのユースケースに適用するどんなキーと値のMapに引き渡すことも可能です。
例えば、パラメーターのマップを使用して、クリックルックバック期間や広告ID、広告セットなど、その他のパラメーターを設定できます。キャンペーンをインセンティブキャンペーンとしてマークすることもできます。詳細については、AppsFlyerの計測パラメーターを参照してください。
APIメソッドに引き渡すことができる標準パラメーターの一覧については、 AppsFlyerの計測パラメーターを参照してください。
広告対象のアプリが初回起動すると、Android または iOS のいずれも、SDKのコンバージョンデータAPIを介して全ての計測リンク上のパラメーターにアクセスできます。
クロスプロモーションでのクリック計測
次のコードを使用して、クリックとアプリのアプリストアページの起動を計測します。このコードは、計測リンクを作成し、デバイスの広告IDを追加します。
/*void trackAndOpenStore(Context context, String promoted_app_id, String campaign, Map<String,String> user_params);*/
String campaign = "Cross Promo Campaign";
Map<String, String> parameters = new HashMap();
parameters.put("af_sub1", "val");
parameters.put("custom_param", "val2");
CrossPromotionHelper.trackAndOpenStore(this, "com.mygosoftware.android.loginbox", campaign, parameters);
static NSString *const kCrossPromotedAppId = @"123456789";
static NSString *const kCrossPromotedCampaign = @"test campaign";
- (void) crossPromotion {
NSDictionary *parameters = @{@"af_sub1": @"val", @"custom_param": @"val2" };
[AppsFlyerCrossPromotionHelper trackAndOpenStore:kCrossPromotedAppId
campaign:kCrossPromotedCampaign
parameters:parameters
openStore:^(NSURLSession *urlSession, NSURL *clickURL)
{
NSURLSessionDataTask *dataTask;
dataTask = [urlSession dataTaskWithURL:clickURL
completionHandler:^(NSData * _Nullable data,
NSURLResponse * _Nullable response,
NSError * _Nullable error)
{
if (error) {
NSLog(@"AppsFlyer crossPromotionViewed Connection failed! Error - %@",[error localizedDescription]);
}
else
{
if (NSClassFromString(@"SKStoreProductViewController") == nil) {
NSString *iTunesLink = [linkGenerator generateLink];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink] options:@{} completionHandler:^(BOOL success) {
NSLog(@"AppsFlyer openAppStoreForAppID completionHandler result %d",success);
}];
}
}
}];
[dataTask resume];
if (NSClassFromString(@"SKStoreProductViewController") != nil) {
[self openStoreKit:kCrossPromotedAppId viewController:self];
}
}];
}
- (void) openStoreKit:(NSString*) appID
viewController: (UIViewController*) viewController
{
SKStoreProductViewController *storeController = [[ SKStoreProductViewController alloc ] init ];
NSDictionary *productParameters = @{ SKStoreProductParameterITunesItemIdentifier : appID };
[ storeController loadProductWithParameters: productParameters completionBlock:^( BOOL result, NSError *error )
{
if ( result )
{
[viewController presentViewController:storeController animated:YES completion:nil];
}
}];
Dictionary<string,string> parameters = new Dictionary<string,string>();
parameters.Add("af_sub1","val");
parameters.Add("custom_param","val2");
AppsFlyer.trackAndOpenStore("com.mygosoftware.android.loginbox","test campaign",parameters);
Androidでは、このメソッドの呼び出すことで、Play Storeを開き、該当するアプリにリダイレクトされます。
Dictionary<string,string> parameters = new Dictionary<string,string>();
parameters.Add("af_sub1","val");
parameters.Add("custom_param","val2")
AppsFlyer.trackAndOpenStore("123456789","test campaign",parameters);
iOSでは、計測リンクが生成され、AppsFlyerTrackerCallbacks
オブジェクト内の onOpenStoreLinkGenerated
メソッドに返されます。デフォルトでは、このメソッドはリンクをWebブラウザで開き、アプリストアにリダイレクトします。この動作を変更するには、AppsFlyerTrackerCallbacks
内の onOpenStoreLinkGenerated
メソッドを、他のロジックに編集してください。
注意
生成されたリンクには、これらの計測リンクパラメーターのいずれも追加することができます。
クロスプロモーションでのインプレッション計測
インプレッションを計測するには、次のAPIコールを使用します。AppsFlyerの管理画面上に表示されているアプリIDを使用していることをご確認ください。
String appID = "com.app";
String campaign = "Cross Promo Campaign";
Map<String, String> parameters = new HashMap();
parameters.put("af_sub1","val");
parameters.put("custom_param","val2");
CrossPromotionHelper.trackCrossPromoteImpression(this, appID, campaign, parameters);
val appID = "com.app"
val campaign = "Cross Promo Campaign"
val parameters = HashMap<String, String>()
parameters.put("af_sub1","val")
parameters.put("custom_param","val2")
CrossPromotionHelper.trackCrossPromoteImpression(
this,
appID,
campaign,
parameters
)
static NSString *const kCrossPromotedAppId = @"123456789";
static NSString *const kCrossPromotedCampaign = @"test campaign";
/*...*/
- (void)viewDidLoad {
[super viewDidLoad];
NSDictionary *kCrossPromotedParameters = @{@"af_sub1": @"val", @"custom_param": @"val2" };
/* generate impression for cross-promotion */
[AppsFlyerCrossPromotionHelper trackCrossPromoteImpression:kCrossPromotedAppId
campaign:kCrossPromotedCampaign parameters:kCrossPromotedParameters];
}
var appID = "com.app"
var campaign = "Cross Promo Campaign"
var parameters = [String : String]()
parameters["af_sub1"] = "val"
parameters["custom_param"] = "val2"
AppsFlyerCrossPromotionHelper.trackCrossPromoteImpression(appID, campaign: campaign, parameters: parameters)
AppsFlyer.trackCrossPromoteImpression(stringpromotedAppID, string campaign);
非ネイティブプラットフォームでのクロスプロモーション計測
現在、クロスプロモーション計測 APIは、ネイティブのAndroid および iOS SDKと、Unityのみでご利用いただけます。ただし、非ネイティブプラットフォームも、同様に効果的にクロスプロモーションを計測できます。これらのプラットフォームには、Adobe air、Cordova、Xamarin、React native、Marmaladeなどが含まれます。
そのためには、ユーザーがクロスプロモーション広告をクリックした際に呼び出される計測リンクを構築する必要があります。このリンクには、メディアソース名である af_cross_promotion と、広告が掲載されるアプリのサイトIDを含める必要があります。
クリック用のクロスプロモーションURL形式:
http://app.appsflyer.com/{PROMOTED APP ID}?pid=af_cross_promotion&
af_siteid={PROMOTING APP NAME}
インプレッション用のクロスプロモーションURL形式:
http://impression.appsflyer.com/{PROMOTED APP ID}?pid=af_cross_promotion&
af_siteid={PROMOTING APP NAME}
ヒント
計測リンクパラメーターを頻繁に変更する必要がある場合は、クロスプロモーションAPIを使用する代わりに、リンク管理ページにてショートリンクを作成することをご検討ください。これにより、アプリのコードを変更することなく、クロスプロモーション用の計測リンクのパラメーターを変更または追加することが可能です。
結果の分析
広告対象アプリのデータ確認
その他のメディアソースと同様に、クロスプロモーションキャンペーンからのトラフィックを宣伝されたアプリの管理画面から確認できます。
1. af_cross_promotion
というメディアソースを選択します。
2. site ID 別にグループ化し、掲載面アプリ別にトラフィックを比較します。
3. コンバージョン率が最も高いアプリ (サイトID) は、広告対象のアプリとの類似性と、ユーザーがアプリをインストールする可能性が最も高くなります。
掲載面アプリのデータ確認
広告対象アプリの管理画面から最良のトラフィックを生み出しているアプリを確認できる一方で、貢献しているアプリ側の視点でデータを確認したい場合もあります。通常、管理画面では流入したトラフィックを表示するため、掲載面アプリが送り出したトラフィックについての管理画面を見ることはできません。ただし、カスタムダッシュボードを使うことで、クロスプロモーショントラフィックを含む、複数のアプリからの情報を一箇所で確認することができます。
これは、1つのアプリの広告を掲載する複数のアプリについての、インストール数、クリック数、インプレッション数、そしてコンバージョン率を確認する場合に非常に便利です。これにより、各掲載面アプリと広告対象アプリの間の類似性を比較でき、それに応じてクロスプロモーションキャンペーンを最適化できます。
次のスクリーンショットは、そのためのカスタムダッシュボードのウィジェットの例です。