概要:この記事で提案されているeコマースアプリ向けのイベントを記録して、ユーザージャーニー全体を通してユーザーの質を計測しましょう。
eコマース
eコマースアプリを使うと、ユーザーは、オンラインで商品を簡単に検索して購入できます。計測をお勧めする一般的なイベントは、検索、購入、カートへ追加、ウィッシュリストへ追加です。
これらのイベントを計測することで、次のような判断に役立ちます。
- 最も人気なカテゴリー
- 購入者が何を検索しているか
- チェックアウトを完了した購入者数
- リピーターと1回のみの購入者の人数
アプリ内イベント計測の詳細については、リッチアプリ内イベントガイドを参照してください。
規定イベントで推奨される構造
次のセクションでは、eコマースアプリで一般的なイベント構造のリストを示しています。各構造には、既定のイベント名と推奨されるイベントパラメーターが含まれています。アプリ内イベントには、ビジネスニーズを満たすどんなイベントパラメーターを含めることができます。
登録完了 (af_complete_registration)
目的
アプリをインストールし、サインアップを完了したユーザーがどれだけいるか、またユーザーが好むサインアップ方法を確認しましょう
トリガー
ユーザーがサインアップ手順を完了したとき
イベントパラメータ
名称 | 説明 | 値の例: |
---|---|---|
af_registration_method | サインアップ方法のタイプ | Email、Facebook |
コードの例
Map<String, Object> eventValue = new HashMap<String, Object>();
eventValue.put(AFInAppEventParameterName.REGSITRATION_METHOD,"Facebook");
AppsFlyerLib.getInstance().logEvent(getApplicationContext(),AFInAppEventType.COMPLETE_REGISTRATION, eventValue);
[[AppsFlyerLib shared] logEvent:AFEventCompleteRegistration
withValues: @{
AFEventParamRegistrationMethod: @"Facebook"
}];
AppsFlyerLib.shared().logEvent(AFEventCompleteRegistration,
withValues: [
AFEventParamRegistrationMethod: "Facebook"
]);
Dictionary<string, string> CompleteRegistrationEvent = new Dictionary<string, string>();
CompleteRegistrationEvent.Add("af_registration_method", "Facebook");
AppsFlyer.sendEvent("af_complete_registration", CompleteRegistrationEvent);
ログイン (af_login)
目的
登録ユーザーのリテンションを理解しましょう
トリガー
ユーザーが正常にログインしたとき
イベントパラメータ
パラメーターなしで送信できます
コードの例
AppsFlyerLib.getInstance().logEvent(getApplicationContext(), AFInAppEventType.LOGIN, null);
[[AppsFlyerLib shared] logEvent:AFEventLogin withValues: nil];
AppsFlyerLib.shared().logEvent(AFEventLogin, withValues: nil);
AppsFlyer.sendEvent("af_login", null);
検索 (af_search)
目的
ユーザーが探しているものを知り、どの検索結果が最も関連性が高く購入に繋がったか
トリガー
次のいずれかの場合:
- ユーザーが検索ボタンをクリックしたとき
- ユーザーが検索結果ページを開いたとき
イベントパラメータ
名称 | 説明 | 値の例: |
---|---|---|
af_search_string | 検索キーワード | 赤い服、ランニングシューズ |
af_content_list | コンテンツIDのリスト | 001, 092 |
コードの例
Map<String, Object> eventValue = new HashMap<String, Object>();
eventValue.put(AFInAppEventParameterName.SEARCH_STRING, "red shoes");
eventValue.put(AFInAppEventParameterName.CONTENT_LIST, new String[] {"001", "092"});
AppsFlyerLib.getInstance().logEvent(getApplicationContext(), AFInAppEventType.SEARCH, eventValue);
[[AppsFlyerLib shared] logEvent:AFEventSearch
withValues: @{
AFEventParamSearchString: @"red shoes",
AFEventParamContentList: @[@"001", @"092"]
}];
AppsFlyerLib.shared().logEvent(AFEventSearch, withValues: [
AFEventParamSearchString: "red shoes",
AFEventParamContentList: ["001", "092"]
]);
Dictionary<string, string> SearchEvent = new Dictionary<string, string>();
SearchEvent.Add("af_search_string", "red shoes");
SearchEvent.Add("af_content_list", "['001', '092']");
AppsFlyer.sendEvent("af_search", SearchEvent);
コンテンツ表示 (af_content_view)
目的
特定商品の表示率を確認できます。このイベントを計測すると、次のことに役立ちます。
- 商品の閲覧と販売を関連付けます
- 商品の閲覧に基づいて、どのカテゴリが最も人気があるかを理解できます
- 購入者の通貨と閲覧した商品の相関性を確認できます
トリガー
ユーザーが特定の製品詳細ページを閲覧したとき
イベントパラメータ
名称 | 説明 | 値の例: |
---|---|---|
af_price | 商品価格 | 2000 |
af_content_id | プロダクトID | 102 |
af_content_type | プロダクトカテゴリ | 靴 |
af_currency | 製品詳細ページの通貨 | THB, USD |
コードの例
Map<String, Object> eventValue = new HashMap<String, Object>();
eventValue.put(AFInAppEventParameterName.PRICE, 2000);
eventValue.put(AFInAppEventParameterName.CONTENT_ID, "102";
eventValue.put(AFInAppEventParameterName.CONTENT_TYPE, "shoes");
eventValue.put(AFInAppEventParameterName.CURRENCY, "USD");
AppsFlyerLib.getInstance().logEvent(getApplicationContext(), AFInAppEventType.CONTENT_VIEW, eventValue);
[[AppsFlyerLib shared] logEvent:AFEventContentView
withValues: @{
AFEventParamPrice: @2000,
AFEventParamContentId: @"102",
AFEventParamContentType: @"shoes",
AFEventParamCurrency: @"USD"
}];
AppsFlyerLib.shared().logEvent(AFEventContentView,
withValues: [
AFEventParamPrice: 2000,
AFEventParamContentId: "102",
AFEventParamContentType: "shoes",
AFEventParamCurrency: "USD"
]);
Dictionary<string, string> ContentViewEvent = new Dictionary<string, string>();
ContentViewEvent.Add("af_price", "2000");
ContentViewEvent.Add("af_content_type", "shoes");
ContentViewEvent.Add("af_currency", "USD");
AppsFlyer.sendEvent("af_content_view", ContentViewEvent);
リスト表示 (af_list_view)
目的
どのリスト(例えば、最新商品、関連商品、おすすめ商品など)が一番閲覧されているかを記録しましょう。
トリガー
ユーザーが特定のリストを閲覧したとき
イベントパラメータ
名称 | 説明 | 値の例: |
---|---|---|
af_content_type | リストのタイプ | 関連商品、おすすめ商品、新商品 |
af_content_list | カテゴリのコンテンツIDのリスト | 001, 092 |
コードの例
Map<String, Object> eventValue = new HashMap<String, Object>();
eventValue.put(AFInAppEventParameterName.CONTENT_TYPE, "related products");
eventValue.put(AFInAppEventParameterName.CONTENT_LIST, new String[] {"001", "092"});
AppsFlyerLib.getInstance().logEvent(getApplicationContext(), "af_list_view", eventValue);
[[AppsFlyerLib shared] logEvent:AFEventListView
withValues: @{
AFEventParamContentType: @"related products",
AFEventParamContentList: @[@"001", @"092"]
}];
AppsFlyerLib.shared().logEvent(AFEventListView,
>withValues: [
AFEventParamContentType: "related products",
AFEventParamContentList: ["001", "092"]
]);
Dictionary<string, string> ListViewEvent = new Dictionary<string, string>();
ListViewEvent.Add("af_content_type", "related products");
ListViewEvent.Add("af_content_list", "['001', '092']");
AppsFlyer.sendEvent("af_list_view", ListViewEvent);
ウィッシュリストに追加 (af_add_to_wishlist)
目的
購入者がどの製品やカテゴリーをウィッシュリストに追加したかを記録しましょう。ウィッシュリストに頻繁に追加される商品がわかっている場合は、これらの商品をセールまたは割引価格で購入者に提示して、購入を促すことができます。また、ユーザーがウィッシュリストに追加した商品に応じて、これらのユーザーをリターゲティングすることもできます。
トリガー
ユーザーがアイテムをウィッシュリストに追加したとき
イベントパラメータ
名称 | 説明 | 値の例: |
---|---|---|
af_price | 製品の価格 | 600 |
af_content_id | プロダクトID | 300 |
af_content_type | プロダクトカテゴリ | 靴、エレクトロニクス |
af_currency | 製品詳細ページに表示された通貨 | GBP |
コードの例
Map<String, Object> eventValue = new HashMap<String, Object>();
eventValue.put(AFInAppEventParameterName.PRICE, 600);
eventValue.put(AFInAppEventParameterName.CONTENT_ID, "300");
eventValue.put(AFInAppEventParameterName.CONTENT_TYPE, "electronics");
eventValue.put(AFInAppEventParameterName.CURRENCY, "GBP");
AppsFlyerLib.getInstance().logEvent(getApplicationContext(), AFInAppEventType.ADD_TO_WISH_LIST, eventValue);
[[AppsFlyerLib shared] logEvent:AFEventAddToWishlist
withValues: @{
AFEventParamPrice: @600,
AFEventParamContentId: @"300",
AFEventParamContentType: @"electronics",
AFEventParamCurrency: @"GBP"
}];
AppsFlyerLib.shared().logEvent(AFEventAddToWishlist,
withValues: [
AFEventParamPrice: 600,
AFEventParamContentId: "300",
AFEventParamContentType: "electronics",
AFEventParamCurrency: "GBP"
]);
Dictionary<string, string> AddToWishListEvent =
new Dictionary<string, string>();
AddToWishListEvent.Add("af_price", "600");
AddToWishListEvent.Add("af_content_id", "300");
AddToWishListEvent.Add("af_content_type", "electronics");
AddToWishListEvent.Add("af_currency", "GBP");
AppsFlyer.sendEvent("af_add_to_wishlist", AddToWishListEvent);
カートに追加 (af_add_to_cart)
目的
ユーザーがカートに商品を追加したときに計測します。このイベントは、次のような判断に役立ちます。
- 1回の購入で、ユーザーがカートに追加する商品の平均数
- 2つの違う商品をカートに追加する間に、どれくらいの時間が経過しているか
- 何人の購入者がカートを放棄したか
トリガー
ユーザーがカートに商品を追加した日時
イベントパラメータ
カラム名 | 説明 | 値の例: |
---|---|---|
af_price | 商品価格 | 350, 1000 |
af_content_id | プロダクトID | 001, 092 |
af_content_type | 製品タイプ | シャツ、靴 |
af_currency | 商品の通貨 | THB, USD |
af_quantity | カートに追加された同じ商品の数 | 2, 5 |
コードの例
Map<String, Object> eventValue = new HashMap<String, Object>();
eventValue.put(AFInAppEventParameterName.PRICE, 350);
eventValue.put(AFInAppEventParameterName.CONTENT_ID, "001");
eventValue.put(AFInAppEventParameterName.CONTENT_TYPE, "shirt");
eventValue.put(AFInAppEventParameterName.CURRENCY, "USD");
eventValue.put(AFInAppEventParameterName.QUANTITY, 2);
AppsFlyerLib.getInstance().logEvent(getApplicationContext(), AFInAppEventType.ADD_TO_CART, eventValue);
[[AppsFlyerLib shared] logEvent:AFEventAddToCart
withValues: @{
AFEventParamPrice: @350,
AFEventParamContentId: @"001",
AFEventParamContentType: @"shirt",
AFEventParamCurrency: @"USD",
AFEventParamQuantity: @2
}];
AppsFlyerLib.shared().logEvent(AFEventAddToCart, withValues: [
AFEventParamPrice: 350,
AFEventParamContentId: "001",
AFEventParamContentType: "shirt",
AFEventParamCurrency: "USD",
AFEventParamQuantity: 2
]);
Dictionary<string, string> AddToCartEvent = new Dictionary<string, string>();
AddToCartEvent.Add("af_price", "350");
AddToCartEvent.Add("af_content_id", "001");
AddToCartEvent.Add("af_content_type", "shirt");
AddToCartEvent.Add("af_currency", "USD");
AddToCartEvent.Add("af_quantity", "2");
AppsFlyer.sendEvent("af_add_to_cart", AddToCartEvent);
チェックアウト開始 (af_initiated_checkout)
目的
購入者がチェックアウトを開始する際の行動を理解しましょう。このイベントは、次のような判断に役立ちます。
- 購入者がチェックアウトしたときの平均価格と購入イベントの平均価格
- チェックアウトへ進んだ後にユーザーが商品を追加または削除するかどうか
トリガー
ユーザーがチェックアウトを開始したが、まだチェックアウトを完了していないとき
イベントパラメータ
ヒント
異なるカテゴリの商品が複数ある場合は、配列を使用してデータを送信します。
カラム名 | 説明 | 値の例: |
---|---|---|
af_price | カート内の合計金額 | 4000 |
af_content_id | カート内の商品ID | 221, 124 |
af_content_type | 商品カテゴリのリスト | シャツ、パンツ |
af_currency | チェックアウト時の通貨 | THB |
af_quantity | カート内のアイテム総数 | 2, 5 |
コードの例
Map<String, Object> eventValue = new HashMap<String, Object>();
eventValue.put(AFInAppEventParameterName.PRICE, 350);
eventValue.put(AFInAppEventParameterName.CONTENT_ID, "221");
// for multiple product categories, set the param value as: new String {"221", "124"}
eventValue.put(AFInAppEventParameterName.CONTENT_TYPE, "shirt");
// for multiple product categories,, set the param value as: new String {"shirt", "pants"}
eventValue.put(AFInAppEventParameterName.CURRENCY, "USD");
eventValue.put(AFInAppEventParameterName.QUANTITY, 2);
// for multiple product categories,, set the param value as: new int {2, 5}
AppsFlyerLib.getInstance().logEvent(getApplicationContext(), AFInAppEventType.INITIATED_CHECKOUT, eventValue);
[[AppsFlyerLib shared] logEvent:AFEventInitiatedCheckout
withValues: @{
AFEventParamPrice: @350,
AFEventParamContentId: @"221",
// for multiple product categories, set the param value as: @[@"221", @"124"]
AFEventParamContentType: @"shirt",
// for multiple product categories, set the param value as: @[@"shirt", @"pants"]
AFEventParamCurrency: @"USD",
AFEventParamQuantity: @2
// for multiple product categories, set the param value as: @[@2, @5]
}];
AppsFlyerLib.shared().logEvent(AFEventInitiatedCheckout,
withValues: [AFEventParamPrice: 350,
AFEventParamContentId: "221",
// for multiple product categories, set the param value as: ["221", "124"]*/
AFEventParamContentType: "shirt",
// for multiple product categories, set the param value as: ["shirt", "pants"] AFEventParamCurrency: "USD",
AFEventParamQuantity: 2
//for multiple product categories, set the param value as: [2, 5]
]);
Dictionary<string, string> InitiatedCheckoutEvent = new Dictionary<string, string>();
InitiatedCheckoutEvent.Add("af_price", "350");
InitiatedCheckoutEvent.Add("af_content_id", "001");
InitiatedCheckoutEvent.Add("af_content_type", "shirt");
InitiatedCheckoutEvent.Add("af_currency", "USD");
InitiatedCheckoutEvent.Add("af_quantity", "2");
AppsFlyer.sendEvent ("af_initiated_checkout", InitiatedCheckoutEvent);
購入 (af_purchase)
目的
アプリ内の購入に関する傾向を理解しましょう。このイベントを計測すると、次のことに役立ちます。
- アドネットワークと広告代理店間のユーザーのLTV(顧客生涯価値)とキャンペーンのROIを判断します。
- どのようなオファーがユーザーに最も人気があるのかを特定します
- キャンペーンのターゲティングを最適化するために、購入されたアイテムとキャンペーンを相互参照します。
トリガー
購入が正常に完了しユーザーに「ありがとうございました」が表示されたとき
イベントパラメータ
名称 | 説明 | 値の例: |
---|---|---|
af_revenue | 購入による収益の予測 | 1205.99 |
af_price | 全体の購入金額の合計 | 4000 |
af_content_id | 商品ID | 121, 262 |
af_content_type | 商品カテゴリ | 靴、パンツ |
af_currency | Currency code | AUD |
af_quantity | カート内の商品の数 | 2, 5 |
af_order_id | 購入後に生成されるオーダーID | X123ABC |
af_receipt_id | CRITEOとGoogle AdWordsのリターゲティング連携に必要なオーダーID | X123ABC |
コードの例
Map<String, Object> eventValue = new HashMap<String, Object>();
eventValue.put(AFInAppEventParameterName.PRICE, 350);
eventValue.put(AFInAppEventParameterName.CONTENT_ID, "221");
// for multiple product categories, set the param value as: // new String {"221", "124"}
eventValue.put(AFInAppEventParameterName.CONTENT_TYPE, "shirt");
// for multiple product categories,, set the param value as: new String {"shoes", "pants"}
eventValue.put(AFInAppEventParameterName.CURRENCY, "USD");
eventValue.put(AFInAppEventParameterName.QUANTITY, 2);
// for multiple product categories, set the param value as: new int {2, 5}
eventValue.put(AFInAppEventParameterName.RECEIPT_ID, "X123ABC");
eventValue.put("af_order_id", "X123ABC");
AppsFlyerLib.getInstance().logEvent(getApplicationContext(), AFInAppEventType.PURCHASE, eventValue);
[[AppsFlyerLib shared] logEvent:AFEventPurchase
withValues: @{
AFEventParamRevenue: @1205.99,
AFEventParamPrice: @4000,
AFEventParamContentId: @"221",
// for multiple product categories, set the param value as:
// @[@"221", @"124"]
AFEventParamContentType: @"shirt",
// for multiple product categories, set the param value as:
// @[@"shoes", @"pants"]
AFEventParamCurrency: @"USD",
AFEventParamQuantity: @2,
// for multiple product categories, set the param value as:
// @[@2, @5]
AFEventParamOrderId: @"X123ABC",
AFEventParamReceiptId: @"X123ABC"
}];
AppsFlyerLib.shared().logEvent(AFEventPurchase, withValues: [
AFEventParamRevenue: 1205.99,
AFEventParamPrice: 4000,
AFEventParamContentId: "221",
// for multiple product categories, set the param value as: ["221", "124"],
AFEventParamContentType: "shirt",
// for multiple product categories, set the param value as: ["shoes", "pants"]
AFEventParamCurrency: "USD",
AFEventParamQuantity: 2,
// for multiple product categories, set the param value as: [2, 5]
AFEventParamOrderId: "X123ABC",
AFEventParamReceiptId: "X123ABC"
]);
Dictionary<string, string> PurchaseEvent = new Dictionary<string, string>();
PurchaseEvent.Add("af_revenue", "1205.99");
PurchaseEvent.Add("af_price", "4000");
PurchaseEvent.Add("af_content_id", "121");
// for multiple product categories, set the param value as: ["221", "124"]
PurchaseEvent.Add("af_content_type", "shoes");
// for multiple product categories, set the param value as: ["shirt", "pants"]
PurchaseEvent.Add("af_currency", "USD");
PurchaseEvent.Add("af_quantity", "2");
// for multiple product categories, set the param value as: [2, 5]
PurchaseEvent.Add("af_order_id", "X123ABC");
PurchaseEvent.Add("af_receipt_id", "X123ABC");
AppsFlyer.sendEvent ("af_purchase", PurchaseEvent);
カスタムイベントで推奨される構造
次のセクションでは、カスタムビエント名と推奨されるイベントパラメーターのイベント構造リストを示しています。アプリ内イベントには、ビジネスニーズを満たすどんなイベントパラメーターを含めることができます。
初回購入 (first_purchase)
目的
購入イベントと同じです。さらに、このイベントは次のことを判断するのに役立ちます。
- 新規購入者が購入するまでにどれくらいの時間がかかるのか
- どの商品が初回購入時に購入されやすいか
- 初回購入の平均的な価格と収益
トリガー
ユーザーが最初の購入を完了したとき
イベントパラメータ
名称 | 説明 | 値の例: |
---|---|---|
af_revenue | 購入からの収益 | 1205.99 |
af_price | 全体の購入金額の合計 | 4000 |
af_content_id | 商品ID | 121, 262 |
af_content_type | 商品カテゴリ | 靴、パンツ |
af_currency | 通貨 | AUD |
af_quantity | カート内の商品の数 | 2, 5 |
af_order_id | 購入後に生成されるオーダーID | X123ABC |
af_receipt_id | CRITEOとGoogle AdWordsのリターゲティング連携に必要なオーダーID | X123ABC |
コードの例
Map<String, Object> eventValue = new HashMap<String, Object>();
eventValue.put(AFInAppEventParameterName.PRICE, 350);
eventValue.put(AFInAppEventParameterName.CONTENT_ID, "221");
// for multiple product categories, set the param value as: new String {"221", "124"}
eventValue.put(AFInAppEventParameterName.CONTENT_TYPE, "shirt");
// for multiple product categories set the param value as: new String {"shoes", "pants"}
eventValue.put(AFInAppEventParameteName.CURRENCY, "USD");
eventValue.put(AFInAppEventParameterName.QUANTITY, 2);
// for multiple product categories, set the param value as: new int {2, 5}
eventValue.put(AFInAppEventParameterName.RECEIPT_ID, "X123ABC");
eventValue.put("af_order_id", "X123ABC");
AppsFlyerLib.getInstance().logEvent(getApplicationContext(), "first_purchase", eventValue);
[[AppsFlyerLib shared] logEvent:("first_purchase")
withValues: @{
AFEventParamRevenue: @1205.99,
AFEventParamPrice: @4000,
AFEventParamContentId: @"221",
// for multiple product categories, set the param value as: @[@"221", @"124"]
AFEventParamContentType: @"shirt",
// for multiple product categories, set the param value as: @[@"shoes", @"pants"]
AFEventParamCurrency: @"USD",
AFEventParamQuantity: @2,
// for multiple product categories, set the param value as: @[@2, @5]
AFEventParamOrderId: @"X123ABC",
AFEventParamReceiptId: @"X123ABC"
}];
AppsFlyerLib.shared().logEvent("first_purchase", withValues: [
AFEventParamRevenue: 1205.99,
AFEventParamPrice: 4000,
AFEventParamContentId: "221",
// for multiple product categories, set the param value as: ["221", "124"]
AFEventParamContentType: "shirt",
// for multiple product categories, set the param value as: ["shoes", "pants"]
AFEventParamCurrency: "USD",
AFEventParamQuantity: 2,
// for multiple product categories, set the param value as: // [2, 5]
AFEventParamOrderId: "X123ABC",
AFEventParamReceiptId: "X123ABC"
]);
Dictionary<string, string> FirstPurchaseEvent = new Dictionary<string, string>();
FirstPurchaseEvent.Add("af_revenue", "1205.99");
FirstPurchaseEvent.Add("af_price", "4000");
FirstPurchaseEvent.Add("af_content_id", "121");
// for multiple product categories, set the param value as: ["221", "124"]
FirstPurchaseEvent.Add("af_content_type", "shoes");
// for multiple product categories, set the param value as: ["shirt", "pants"]
FirstPurchaseEvent.Add("af_currency", "USD");
FirstPurchaseEvent.Add("af_quantity", "2");
// for multiple product categories, set the param value as: [2, 5]
FirstPurchaseEvent.Add("af_order_id", "X123ABC");
FirstPurchaseEvent.Add("af_receipt_id", "X123ABC");
AppsFlyer.sendEvent ("first_purchase", FirstPurchaseEvent);
カートから削除 (remove_from_cart)
目的
このイベントを計測することで、次のことが可能になります。
- 購入者がどの商品をカートから削除したかを決定します
- 購入者がカートから削除した商品のカテゴリを確認できます
- カートに追加イベントのデータと比較して、チェックアウトされない商品に関するインサイトを得ることができます
トリガー
ユーザーがカートから商品を削除したとき
イベントパラメータ
名称 | 説明 | 値の例: |
---|---|---|
af_content_id | 商品またはアイテムのID | 521 |
af_content_type | 商品またはアイテムのカテゴリ | 靴 |
コードの例
Map<String, Object> eventValue = new HashMap<String, Object>();
eventValue.put(AFInAppEventParameterName.CONTENT_ID, "521");
eventValue.put(AFInAppEventParameterName.CONTENT_TYPE, "shoes");
AppsFlyerLib.getInstance().logEvent(getApplicationContext(), "remove_from_cart", eventValue);
[[AppsFlyerLib shared] logEvent:@"remove_from_cart"
withValues: @{
AFEventParamContentId: @"521",
AFEventParamContentType: @"shoes",
}];
AppsFlyerLib.shared().logEvent("remove_from_cart", withValues: [
AFEventParamContentId: "521",
AFEventParamContentType: "shoes",
]);
Dictionary<string, string> RemoveFromCartEvent = new Dictionary<string, string>();
RemoveFromCartEvent.Add("af_content_id", "521");
RemoveFromCartEvent.Add("af_content_type", "shoes");
AppsFlyer.sendEvent ("remove_from_cart", RemoveFromCartEvent);