Repro - Mobile Analytics for growth
English
アカウント登録 管理画面に戻る
  • 動作環境
  • 管理画面ガイド
  • 開発ガイド
    • アカウント作成
    • iOS/Android SDK
      • 導入
      • セッション・ライフサイクル
      • ユーザーID
      • デバイスID
      • ユーザープロフィール
      • イベントトラッキング
      • プッシュ通知
      • ニュースフィード
      • アプリ内メッセージ
      • シルバーエッグレコメンドメッセージ
      • アプリ内パラメーター
      • WebView
      • オプトアウト機能
      • 広告ID取得設定
      • QRコードを用いてオーディエンスにユーザーを登録する
      • Adjustで取得したアトリビューションデータをReproにセットする
      • AppsFlyerで取得したアトリビューションデータをReproにセットする
        • ユーザープロフィールにセットする
        • イベントプロパティにセットする
      • ログレベル
      • 検証方法
    • Web
    • オーディエンスAPI
    • オーディエンスインポート(β)
    • プッシュAPI
    • ユーザープロフィールAPI
    • ユーザープロフィールバルクインポート
    • ニュースフィードAPI
    • 削除ユーザー登録API
    • Booster導入ガイド
    • メール(β)
  • リリースノート
  • FAQ
objc, swift, java

AppsFlyerで取得したアトリビューションデータをReproにセットする¶

警告

iOS14.5 以降、App Tracking Transparency(以降ATT)用の実装が必要です、詳細は こちら のドキュメントを参照して下さい。

また、iOS14.5 以降、ATTへの同意がない場合基本的にアトリビューションの取得が出来なくなります、詳細は こちら のドキュメントを参照して下さい。

カスタムリンクを利用した場合は引き続きアトリビューションを取得し、ユーザープロフィールやイベントプロパティにセットすることが出来ます。

以下のサンプルコードでセットしているアトリビューションのデータはサンプルであり、実際にアプリで取得可能なアトリビューションデータとは異なる場合があります。 Reproにすべてのアトリビューションデータをセットする必要はなく、サンプルコードを参考にキャンペーンや分析に利用するものをセットしてください。

ユーザープロフィールにセットする¶

AppsFlyerのアトリビューションデータを ユーザープロフィール としてセットできます。

セットしたアトリビューションデータを利用して 広告連動メッセージ のようにアトリビューションの内容に合わせてユーザー体験を最適化することが出来ます。

iOS: onConversionDataSuccess メソッドを実装し 、取得したデータをユーザープロフィールとしてセットしてください。

Android: onConversionDataSuccess メソッドを実装し 、取得したデータをユーザープロフィールとしてセットしてください。

// AppDelegate.h
#import <UIKit/UIKit.h>
#import <AppsFlyerLib/AppsFlyerLib.h>
#import <AppTrackingTransparency/ATTrackingManager.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate, AppsFlyerLibDelegate> {
 ...
}
@end

// AppDelegate.m
#import "AppDelegate.h"
#import <AppsFlyerLib/AppsFlyerLib.h>
@interface AppDelegate ()
@end
@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // init AppsFlyer
    NSString* appsFlyerDevKey = [properties objectForKey:@"appsFlyerDevKey"];
    NSString* appleAppID = [properties objectForKey:@"appleAppID"];

    [[AppsFlyerLib shared] setAppsFlyerDevKey:appsFlyerDevKey];
    [[AppsFlyerLib shared] setAppleAppID:appleAppID];
    [AppsFlyerLib shared].delegate = self;

    [[AppsFlyerLib shared] start];

    // setup Repro
    [Repro setup:"YOUR_APP_TOKEN"];
}

- (void)onConversionDataSuccess:(NSDictionary*)installData {
    id status = [installData objectForKey:@"af_status"];
    if ([status isEqualToString:@"Non-organic"]) {
        id mediaSource = [installData objectForKey:@"media_source"];
        id campaign = [installData objectForKey:@"campaign"];

        [Repro setStringUserProfile:mediaSource forKey:@"AppsFlyer: media_source"];
        [Repro setStringUserProfile:campaign forKey:@"AppsFlyer: 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)onConversionDataFail:(NSError *)error {
    NSLog(@"%@",error);
}
func applicationDidBecomeActive(_ application: UIApplication) {
    // init AppsFlyer
    AppsFlyerLib.shared().appsFlyerDevKey = "MY_DEV_KEY"
    AppsFlyerLib.shared().appleAppID = "id123456789"

    // load the conversion data
    AppsFlyerLib.shared().delegate = self

    // track launch
    AppsFlyerLib.shared().start()
}

func onConversionDataSuccess(_ installData: [AnyHashable: Any]) {

    guard let status = installData["af_status"] as? String else {
        return
    }

    if(status == "Non-organic") {
        if let media_source = installData["media_source"] , let campaign = installData["campaign"] {
                Repro.setUserProfile(stringValue: media_source, forKey: "AppsFlyer: media_source")
                Repro.setUserProfile(stringValue: campaign, forKey: "AppsFlyer: campaign")

                print("This is a Non-Organic install. Media source: \(media_source) Campaign: \(campaign) ")
        }
    } else {
        print("This is an organic install.")
    }
}

func onConversionDataFail(_ error: Error!) {
    if let err = error{
    print(err)
}

func onAppOpenAttribution(_ attributionData: [AnyHashable : Any]!) {
    if let data = attributionData{
    print("\(data)")
    }
}

func onAppOpenAttributionFailure(_ error: Error!) {
    if let err = error{
    print(err)
    }
}
AppsFlyerConversionListener conversionListener = new AppsFlyerConversionListener() {
    @Override
    public void onConversionDataSuccess(Map<String, String> conversionData) {
        for (String attrName : conversionData.keySet()) {
          String attrValue = conversionData.get(attrName);
            Log.d(AppsFlyerLib.LOG_TAG, "attribute: " + attrName + " = " + attrValue);
            if (attrName.equals("media_source")) {
                Repro.setStringUserProfile("AppsFlyer: media_source", attrValue);
            }
            else if (attrName.equals("campaign")) {
                Repro.setStringUserProfile("AppsFlyer: campaign", attrValue);
            }
        }
    }

    @Override
    public void onConversionFail(String errorMessage) {
        Log.d(AppsFlyerLib.LOG_TAG, "error getting conversion data: " + errorMessage);
    }

    @Override
    public void onAppOpenAttribution(Map<String, String> conversionData) {
    }

    @Override
    public void onAttributionFailure(String errorMessage) {
        Log.d(AppsFlyerLib.LOG_TAG, "error onAttributionFailure : " + errorMessage);
    }
});

警告

  • このコールバックはアプリのインストール時のみ呼ばれます。
  • AppsFlyerの初期化より先に、Reproのsetupを実行してください。

イベントプロパティにセットする¶

AppsFlyerのアトリビューションデータを イベントトラッキング のカスタムイベントのプロパティとしてセットできます。

セットしたアトリビューションデータを利用して 広告連動メッセージ のようにアトリビューションの内容に合わせてユーザー体験を最適化することが出来ます。

iOS: onConversionDataSuccess メソッドを実装し 、取得したデータを イベントトラッキング のカスタムイベントのプロパティとしてセットしてください。

Android: onConversionDataSuccess メソッドを実装し 、取得したデータを イベントトラッキング のカスタムイベントのプロパティとしてセットしてください。

// AppDelegate.h
#import "AppsFlyerTracker.h"

@interface AppDelegate : UIResponder<UIApplicationDelegate, AppsFlyerTrackerDelegate> {

    ...

}

// AppDelegate.m

- (void)applicationDidBecomeActive:(UIApplication *)application {
    // setup Repro
    [Repro setup:"YOUR_APP_TOKEN"];

    // init AppsFlyer
    [[AppsFlyerLib shared] setAppsFlyerDevKey:@"MY_DEV_KEY"];
    [[AppsFlyerLib shared] setAppleAppID:@"id123456789"];

    // load the conversion data
    [AppsFlyerLib shared].delegate = self;
    // track launch
    [[AppsFlyerLib shared] start];
}

- (void)onConversionDataSuccess:(NSDictionary*)installData {
    id status = [installData objectForKey:@"af_status"];
    if ([status isEqualToString:@"Non-organic"]) {
        id mediaSource = [installData objectForKey:@"media_source"];
        id campaign = [installData objectForKey:@"campaign"];
        id adset = [installData objectForKey:@"af_adset"];
        id ad = [installData objectForKey:@"af_ad"];
        [Repro track:@"AppsFlyerAttribution" properties:@{
            @"mediaSource": mediaSource,
            @"campaign": campaign,
            @"adset": adset,
            @"ad": ad,
        }];

        NSLog(@"This is a none organic install. Media source: %@  Campaign: %@", sourceID, campaign);
    } else if ([status isEqualToString:@"Organic"]) {
        NSLog(@"This is an organic install.");
    }
}

- (void)onConversionDataFail:(NSError *)error {
    NSLog(@"%@",error);
}
func applicationDidBecomeActive(_ application: UIApplication) {
    // init AppsFlyer
    AppsFlyerLib.shared().appsFlyerDevKey = "MY_DEV_KEY"
    AppsFlyerLib.shared().appleAppID = "id123456789"

    // load the conversion data
    AppsFlyerLib.shared().delegate = self
    // track launch
    AppsFlyerLib.shared().start()
}

func onConversionDataSuccess(_ installData: [AnyHashable: Any]) {

    guard let status = installData["af_status"] as? String else {
        return
    }

    if(status == "Non-organic") {
        if let mediaSource = installData["media_source"], let campaign = installData["campaign"], let adset = installData["af_adset"], let ad = installData["af_ad"] {
            Repro.track(
                event: "AppsFlyerAttribution",
                properties: [
                    "mediaSource": mediaSource,
                    "campaign": campaign,
                    "adset": adset,
                    "ad": ad
                ])
        }
    } else {
        print("This is an organic install.")
    }
}

func onConversionDataFail(_ error: Error!) {
    if let err = error{
    print(err)
}
AppsFlyerConversionListener conversionListener = new AppsFlyerConversionListener() {
    @Override
    public void onConversionDataSuccess(Map<String, Object> conversionData) {
        final Object afStatus = conversionData.get("af_status");
        if (afStatus instanceof String && afStatus.equals("Non-organic")) {
            Map<String, Object> map = new HashMap<String, Object>();
            for (String attrName : conversionData.keySet()) {
                Object attrValue = conversionData.get(attrName);
                Log.d(AF_TAG, "attribute: " + attrName + " = " + attrValue);
                if (attrName.equals("network")) {
                    map.put("network", attrValue);
                }
                else if (attrName.equals("campaign")) {
                    map.put("campaign", attrValue);
                }
                else if (attrName.equals("af_adset")) {
                    map.put("adset", attrValue);
                }
                else if (attrName.equals("af_ad")) {
                    map.put("ad", attrValue);
                }
            }
            Repro.track("AppsFlyerAttribution", map);
        }
    }

    @Override
    public void onConversionFail(String errorMessage) {
        Log.d(AppsFlyerLib.LOG_TAG, "error getting conversion data: " + errorMessage);
    }
});

警告

  • このコールバックはアプリのインストール時のみ呼ばれます。
  • AppsFlyerの初期化より先に、Reproのsetupを実行してください。
  • « Adjustで取得したアトリビューションデータをReproにセットする
  • ログレベル »

About Us Careers Terms of Service Privacy Policy Cookie Policy

© 2022 Repro Inc.