Android 適用的通用 Analytics (分析) 加強型電子商務

Google Analytics (分析) 支援通用 Analytics (分析) 資源中的加強型電子商務。加強型電子商務可用於評估使用者在購物體驗中與產品的互動。包括促銷活動曝光次數、促銷活動點擊次數、產品曝光次數、產品點擊次數、產品詳細資料的觀看次數、將商品加入購物車、移除購物車中的商品、啟動結帳、交易和退款。

最新版 Google 代碼管理工具和行動應用程式專用的 Google Analytics (分析) 可與 Google 的行動應用程式平台 Firebase 搭配使用。使用 Firebase SDK 評估應用程式時,您可以存取多份自動產生的行動應用程式報表,並能進一步自訂及補充應用程式內的程式碼。這些報表會自動納入 App Store 在 iTunes 和 Google Play 上處理的應用程式內購資料。您可以導入電子商務應用程式的建議事件,藉此產生其他電子商務相關報表。目前只有通用 Analytics (分析) 資源提供購物行為 (即加強型電子商務) 深入報表。

本文說明如何搭配 Firebase SDK 使用行動應用程式專用的代碼管理工具,將加強型電子商務資料傳送至通用 Analytics (分析) 資源。

首要步驟

開始前,請先為應用程式設定以下必要條件:

  1. 在應用程式中安裝及設定 Firebase 和 Google 代碼管理工具。請務必使用 11 以上版本的 Android 版 Firebase SDK。
  2. 匯入以下兩個套件:

    • import com.google.firebase.analytics.FirebaseAnalytics.Event;
    • import com.google.firebase.analytics.FirebaseAnalytics.Param;
  3. 在代碼管理工具容器中,使用以下設定建立名為「促銷活動」的使用者定義變數

    • 事件類型:自訂參數
    • 事件參數鍵:促銷
    • 預設值:未定義

導入作業

以下各節將說明如何使用評估加強型電子商務活動必要參數的方式記錄事件,例如:

產品曝光次數

使用 ITEM_LIST 參數記錄事件,以及透過相關欄位定義的一或多個項目 (例如產品),評估產品曝光。

// Define products with relevant parameters

Bundle product1 = new Bundle();
product1.putString( Param.ITEM_ID, "sku1234");  // ITEM_ID or ITEM_NAME is required
product1.putString( Param.ITEM_NAME, "Donut Friday Scented T-Shirt");
product1.putString( Param.ITEM_CATEGORY, "Apparel/Men/Shirts");
product1.putString( Param.ITEM_VARIANT, "Blue");
product1.putString( Param.ITEM_BRAND, "Google");
product1.putDouble( Param.PRICE, 29.99 );
product1.putString( Param.CURRENCY, "USD" );
product1.putLong( Param.INDEX, 1 );     // Position of the item in the list

Bundle product2 = new Bundle();
product2.putString( Param.ITEM_ID, "sku5678");
product2.putString( Param.ITEM_NAME, "Android Workout Capris");
product2.putString( Param.ITEM_CATEGORY, "Apparel/Women/Pants");
product2.putString( Param.ITEM_VARIANT, "Black");
product2.putString( Param.ITEM_BRAND, "Google");
product2.putDouble( Param.PRICE, 39.99 );
product2.putString( Param.CURRENCY, "USD" );
product2.putLong( Param.INDEX, 2 );

// Prepare ecommerce bundle

ArrayList <bundle>items = new ArrayList<bundle>();
items.add(product1);
items.add(product2);

Bundle ecommerceBundle = new Bundle();
ecommerceBundle.putParcelableArrayList( "items", items );

// Set relevant bundle-level parameters

ecommerceBundle.putString( Param.ITEM_LIST, "Search Results" ); // List name

// Log view_search_results or view_item_list event with ecommerce bundle

mFirebaseAnalytics.logEvent( Event.VIEW_SEARCH_RESULTS, ecommerceBundle );

請參閱以下範例的代碼設定:

  • 代碼類型:通用 Analytics (分析)
  • 追蹤類型:畫面瀏覽
  • 要設定的欄位:(欄位名稱) screenName (值,例如)搜尋結果畫面
  • 啟用加強型電子商務功能:True
  • 讀取資料來源:Firebase 事件
  • 觸發條件,例如:(自訂 > 部分事件) 事件名稱等於 view_search_results

產品點擊/選項

記錄使用相關欄位定義的項目 (例如產品) 的 SELECT_CONTENT 事件,來評估產品點擊次數:

// Define product with relevant parameters

Bundle product1 = new Bundle();
product1.putString( Param.ITEM_ID, "sku1234"); // ITEM_ID or ITEM_NAME is required
product1.putString( Param.ITEM_NAME, "Donut Friday Scented T-Shirt");
product1.putString( Param.ITEM_CATEGORY, "Apparel/Men/Shirts");
product1.putString( Param.ITEM_VARIANT, "Blue");
product1.putString( Param.ITEM_BRAND, "Google");
product1.putDouble( Param.PRICE, 29.99 );
product1.putString( Param.CURRENCY, "USD" ); // Item-level currency unused today
product1.putLong( Param.INDEX, 1 ); // Position of the item in the list

// Prepare ecommerce bundle

Bundle ecommerceBundle = new Bundle();
ecommerceBundle.putBundle( "items", product1 );

// Set relevant action-level parameters

ecommerceBundle.putString( Param.ITEM_LIST, "Search Results" ); // Optional list name

// Log select_content event with ecommerce bundle

mFirebaseAnalytics.logEvent( Event.SELECT_CONTENT, ecommerceBundle );

請參閱以下範例的代碼設定:

  • 代碼類型:通用 Analytics (分析)
  • 追蹤類型:事件
  • 事件類別,例如:電子商務
  • 事件動作,例如:產品點擊
  • 啟用加強型電子商務功能:True
  • 讀取資料來源:Firebase 事件
  • 觸發條件,例如:(自訂 > 部分事件) 「事件名稱」等於 select_content 及「&lbrace; 促銷&rbrace; 」等於未定義

商品詳情瀏覽

記錄 VIEW_ITEM 事件並使用相關欄位定義的項目 (例如產品),測量產品詳細資料檢視畫面:

// Define product with relevant parameters

Bundle product1 = new Bundle();
product1.putString( Param.ITEM_ID, "sku1234"); // ITEM_ID or ITEM_NAME is required
product1.putString( Param.ITEM_NAME, "Donut Friday Scented T-Shirt");
product1.putString( Param.ITEM_CATEGORY, "Apparel/Men/Shirts");
product1.putString( Param.ITEM_VARIANT, "Blue");
product1.putString( Param.ITEM_BRAND, "Google");
product1.putDouble( Param.PRICE, 29.99 );
product1.putString( Param.CURRENCY, "USD" ); // Item-level currency unused today

// Prepare ecommerce bundle

Bundle ecommerceBundle = new Bundle();
ecommerceBundle.putBundle( "items", product1 );

// Log view_item event with ecommerce bundle

mFirebaseAnalytics.logEvent( Event.VIEW_ITEM, ecommerceBundle );

請參閱以下範例的代碼設定:

  • 代碼類型:通用 Analytics (分析)
  • 追蹤類型:畫面瀏覽
  • 要設定的欄位:(欄位名稱) screenName (值,例如)產品詳細資料畫面
  • 啟用加強型電子商務功能:True
  • 讀取資料來源:Firebase 事件
  • 觸發條件,例如:(自訂 > 部分事件) 事件名稱等於 view_item 且
  • 「&lbrace; 促銷&rbrace; 」等於「未定義」

加入購物車

透過使用相關欄位定義的商品 (例如產品) 記錄 ADD_TO_CART 事件,評估新增至購物車的產品:

// Define product with relevant parameters

Bundle product1 = new Bundle();
product1.putString( Param.ITEM_ID, "sku1234"); // ITEM_ID or ITEM_NAME is required
product1.putString( Param.ITEM_NAME, "Donut Friday Scented T-Shirt");
product1.putString( Param.ITEM_CATEGORY, "Apparel/Men/Shirts");
product1.putString( Param.ITEM_VARIANT, "Blue");
product1.putString( Param.ITEM_BRAND, "Google");
product1.putDouble( Param.PRICE, 29.99 );
product1.putString( Param.CURRENCY, "USD" ); // Item-level currency unused today
product1.putLong( Param.QUANTITY, 1 );

// Prepare ecommerce bundle

Bundle ecommerceBundle = new Bundle();
ecommerceBundle.putBundle( "items", product1 );

// Log add_to_cart event with ecommerce bundle

mFirebaseAnalytics.logEvent( Event.ADD_TO_CART, ecommerceBundle );

請參閱以下範例的代碼設定:

  • 代碼類型:通用 Analytics (分析)
  • 追蹤類型:事件
  • 事件類別,例如:電子商務
  • 事件動作,例如:「加入購物車」
  • 啟用加強型電子商務功能:True
  • 讀取資料來源:Firebase 事件
  • 觸發條件,例如:(自訂 > 部分事件) 事件名稱等於 add_to_cart

從購物車中移除的項目

如要評估從購物車中移除的產品,請記錄 REMOVE_FROM_CART 事件,並使用相關欄位定義的商品 (例如產品):

// Define product with relevant parameters

Bundle product1 = new Bundle();
product1.putString( Param.ITEM_ID, "sku1234"); // ITEM_ID or ITEM_NAME is required
product1.putString( Param.ITEM_NAME, "Donut Friday Scented T-Shirt");
product1.putString( Param.ITEM_CATEGORY, "Apparel/Men/Shirts");
product1.putString( Param.ITEM_VARIANT, "Blue");
product1.putString( Param.ITEM_BRAND, "Google");
product1.putDouble( Param.PRICE, 29.99 );
product1.putString( Param.CURRENCY, "USD" ); // Item-level currency unused today
product1.putLong( Param.QUANTITY, 1 );

// Prepare ecommerce bundle

Bundle ecommerceBundle = new Bundle();
ecommerceBundle.putBundle( "items", product1 );

// Log remove_from_cart event with ecommerce bundle

mFirebaseAnalytics.logEvent( Event.REMOVE_FROM_CART, ecommerceBundle );

請參閱以下範例的代碼設定:

  • 代碼類型:通用 Analytics (分析)
  • 追蹤類型:事件
  • 事件類別,例如:電子商務
  • 事件動作,例如:從購物車中移除
  • 啟用加強型電子商務功能:True
  • 讀取資料來源:Firebase 事件
  • 觸發條件,例如:(自訂 > 部分事件) 事件名稱等於 remove_from_cart

宣傳活動曝光次數

使用相關欄位定義的 VIEW_ITEMVIEW_ITEM_LISTVIEW_SEARCH_RESULTS 事件,評估促銷曝光次數:

// Define promotion with relevant parameters

Bundle promotion = new Bundle();
promotion.putString( Param.ITEM_ID, "PROMO_1234" ); // promotion ID; either ITEM_ID or ITEM_NAME is required
promotion.putString( Param.ITEM_NAME, "Summer Sale" ); // promotion name
promotion.putString( Param.CREATIVE_NAME, "summer_banner2" );
promotion.putString( Param.CREATIVE_SLOT, "banner_slot1" );

// Prepare ecommerce bundle

ArrayList <bundle>promotions = new ArrayList<bundle>();
promotions.add(promotion);

Bundle ecommerceBundle = new Bundle();
ecommerceBundle.putParcelableArrayList("promotions", promotions );

// Log view_item, view_item_list, or view_search_results event with ecommerce bundle

mFirebaseAnalytics.logEvent(Event.VIEW_ITEM, ecommerceBundle );

請參閱以下範例的代碼設定:

  • 代碼類型:通用 Analytics (分析)
  • 追蹤類型:事件
  • 事件類別,例如:內部宣傳
  • 事件動作,例如:曝光
  • 非互動命中:True
  • 啟用加強型電子商務功能:True
  • 讀取資料來源:Firebase 事件
  • 觸發條件,例如:(自訂 > 部分事件) 事件名稱等於 view_item 且
  • 「&lbrace; 促銷&rbrace; 」不等於未定義

促銷活動點擊次數/選項

記錄含有促銷活動相關欄位的 SELECT_CONTENT 事件,藉此評估宣傳促銷活動點擊次數:

// Define promotion with relevant parameters

Bundle promotion = new Bundle();
promotion.putString( Param.ITEM_ID, "PROMO_1234"); // promotion ID; either ITEM_ID or ITEM_NAME is required
promotion.putString( Param.ITEM_NAME, "Summer Sale"); // promotion name
promotion.putString( Param.CREATIVE_NAME, "summer_banner2");
promotion.putString( Param.CREATIVE_SLOT, "banner_slot1");

// Prepare ecommerce bundle

ArrayList <bundle>promotions = new ArrayList<bundle>();
promotions.add(promotion);

Bundle ecommerceBundle = new Bundle();
ecommerceBundle.putParcelableArrayList("promotions", promotions );

// Set properties for the event to be shown in the Google Analytics (Firebase) reports.
// These properties will not impact the Universal Analytics reporting.

ecommerceBundle.putString( Param.CONTENT_TYPE, “Internal Promotions” );
ecommerceBundle.putString( Param.ITEM_ID, "PROMO_1234" );

// Log select_content, view_item_list, or view_search_results event with ecommerce bundle

mFirebaseAnalytics.logEvent( Event.SELECT_CONTENT, ecommerceBundle );

請參閱以下範例的代碼設定:

  • 代碼類型:通用 Analytics (分析)
  • 追蹤類型:事件
  • 事件類別,例如:內部宣傳
  • 事件動作,例如:點擊
  • 啟用加強型電子商務功能:True
  • 讀取資料來源:Firebase 事件
  • 觸發條件,例如:(自訂 > 部分事件)「事件名稱」等於 select_content AND &lbrace;&lbrace;promotions&rbrace; 不等於未定義

結帳程序

開始結帳

透過相關欄位定義的 BEGIN_CHECKOUT 事件 (例如產品) 記錄一或多個項目,藉此評估結帳程序中的第一個步驟:

// Define products with relevant parameters

Bundle product1 = new Bundle();
product1.putString( Param.ITEM_ID, "sku1234"); // ITEM_ID or ITEM_NAME is required
product1.putString( Param.ITEM_NAME, "Donut Friday Scented T-Shirt");
product1.putString( Param.ITEM_CATEGORY, "Apparel/Men/Shirts");
product1.putString( Param.ITEM_VARIANT, "Blue");
product1.putString( Param.ITEM_BRAND, "Google");
product1.putDouble( Param.PRICE, 29.99 );
product1.putString( Param.CURRENCY, "USD" ); // Item-level currency unused today
product1.putLong( Param.QUANTITY, 1 );

// Prepare ecommerce bundle

ArrayList <bundle>items = new ArrayList<bundle>();
items.add(product1);

Bundle ecommerceBundle = new Bundle();
ecommerceBundle.putParcelableArrayList( "items", items );

// Set checkout step and optional checkout option

ecommerceBundle.putLong( Param.CHECKOUT_STEP, 1 ); // Optional for first step
ecommerceBundle.putString( Param.CHECKOUT_OPTION, "Visa" ); // Optional

// Log BEGIN_CHECKOUT event with ecommerce bundle

mFirebaseAnalytics.logEvent( Event.BEGIN_CHECKOUT, ecommerceBundle );

請參閱以下範例的代碼設定:

  • 代碼類型:通用 Analytics (分析)
  • 追蹤類型:畫面瀏覽
  • 要設定的欄位:(欄位名稱) screenName (值,例如)購物車畫面
  • 啟用加強型電子商務功能:True
  • 讀取資料來源:Firebase 事件
  • 觸發條件,例如:(自訂 > 部分事件) 事件名稱等於 start_checkout

其他結帳步驟

透過相關欄位定義的 CHECKOUT_PROGRESS 事件 (例如產品) 記錄一或多個項目,即可評估結帳程序中的其他步驟:

// Define products with relevant parameters

Bundle product1 = new Bundle();
product1.putString( Param.ITEM_ID, "sku1234"); // ITEM_ID or ITEM_NAME is required
product1.putString( Param.ITEM_NAME, "Donut Friday Scented T-Shirt");
product1.putString( Param.ITEM_CATEGORY, "Apparel/Men/Shirts");
product1.putString( Param.ITEM_VARIANT, "Blue");
product1.putString( Param.ITEM_BRAND, "Google");
product1.putDouble( Param.PRICE, 29.99 );
product1.putString( Param.CURRENCY, "USD" ); // Item-level currency unused today
product1.putLong( Param.QUANTITY, 1 );

// Prepare ecommerce bundle

ArrayList <bundle>items = new ArrayList<bundle>();
items.add(product1);

Bundle ecommerceBundle = new Bundle();
ecommerceBundle.putParcelableArrayList( "items", items );

// Set checkout step and optional checkout option

ecommerceBundle.putLong( Param.CHECKOUT_STEP, 2 );
ecommerceBundle.putString( Param.CHECKOUT_OPTION, "Visa" ); // Optional

// Log CHECKOUT_PROGRESS event with ecommerce bundle

mFirebaseAnalytics.logEvent( Event.CHECKOUT_PROGRESS, ecommerceBundle );

請參閱以下範例的代碼設定:

  • 代碼類型:通用 Analytics (分析)
  • 追蹤類型:畫面瀏覽
  • 要設定的欄位:(欄位名稱) screenName (值,例如)結帳步驟 2 畫面
  • 啟用加強型電子商務功能:True
  • 讀取資料來源:Firebase 事件
  • 觸發條件,例如:(自訂 > 部分事件) 事件名稱等於 checkout_progress

結帳選項

結帳選項可讓您評估結帳流程狀態的其他資訊。您可以將結帳選項視為結帳步驟事件的一部分 (如上所示),或在記錄特定結帳步驟事件後,使用者選取選項來衡量結帳選項。

如要評估結帳步驟後的結帳選項,請使用對應的 CHECKOUT_STEPCHECKOUT_OPTION 參數記錄 SET_CHECKOUT_OPTION 事件:

Bundle ecommerceBundle = new Bundle();
ecommerceBundle.putLong( Param.CHECKOUT_STEP, 2 );
ecommerceBundle.putString( Param.CHECKOUT_OPTION, "Mastercard" );
mFirebaseAnalytics.logEvent( Event.SET_CHECKOUT_OPTION, ecommerceBundle );

請參閱以下範例的代碼設定:

  • 代碼類型:通用 Analytics (分析)
  • 追蹤類型:事件
  • 事件類別,例如:電子商務
  • 活動動作,例如:設定結帳選項
  • 啟用加強型電子商務功能:True
  • 讀取資料來源:Firebase 事件
  • 觸發條件,例如:(自訂 > 部分事件) 事件名稱等於 set_checkout_option

購買

記錄使用相關欄位定義的一或多個項目 (例如產品) 的 ECOMMERCE_PURCHASE 事件,藉此評估購買情形:

// Define product with relevant parameters

Bundle product1 = new Bundle();
product1.putString( Param.ITEM_ID, "sku1234"); // ITEM_ID or ITEM_NAME is required
product1.putString( Param.ITEM_NAME, "Donut Friday Scented T-Shirt");
product1.putString( Param.ITEM_CATEGORY, "Apparel/Men/Shirts");
product1.putString( Param.ITEM_VARIANT, "Blue");
product1.putString( Param.ITEM_BRAND, "Google");
product1.putDouble( Param.PRICE, 29.99 );
product1.putString( Param.CURRENCY, "USD" ); // Item-level currency unused today
product1.putLong( Param.QUANTITY, 1 );

Bundle product2 = new Bundle();
product2.putString( Param.ITEM_ID, "sku5678");
product2.putString( Param.ITEM_NAME, "Android Workout Capris");
product2.putString( Param.ITEM_CATEGORY, "Apparel/Women/Pants");
product2.putString( Param.ITEM_VARIANT, "Black");
product2.putString( Param.ITEM_BRAND, "Google");
product2.putDouble( Param.PRICE, 39.99 );
product2.putString( Param.CURRENCY, "USD" ); // Item-level currency unused today
product2.putLong( Param.QUANTITY, 1 );

// Prepare ecommerce bundle

ArrayList <bundle>items = new ArrayList<bundle>();
items.add(product1);
items.add(product2);

Bundle ecommerceBundle = new Bundle();
ecommerceBundle.putParcelableArrayList( "items", items );

// Set relevant transaction-level parameters

ecommerceBundle.putString( Param.TRANSACTION_ID, "T12345" );
ecommerceBundle.putString( Param.AFFILIATION, "Google Store - Online" );
ecommerceBundle.putDouble( Param.VALUE, 37.39 );    // Revenue
ecommerceBundle.putDouble( Param.TAX, 2.85 );
ecommerceBundle.putDouble( Param.SHIPPING, 5.34 );
ecommerceBundle.putString( Param.CURRENCY, "USD" );
ecommerceBundle.putString( Param.COUPON, "SUMMER2017" );

// Log ecommerce_purchase event with ecommerce bundle

mFirebaseAnalytics.logEvent( Event.ECOMMERCE_PURCHASE, ecommerceBundle );

請參閱以下範例的代碼設定:

  • 代碼類型:通用 Analytics (分析)
  • 追蹤類型:畫面瀏覽
  • 要設定的欄位:(欄位名稱) screenName (值,例如)感謝畫面
  • 啟用加強型電子商務功能:True
  • 讀取資料來源:Firebase 事件
  • 觸發條件,例如:(自訂 > 部分事件) 事件名稱等於 ecommerce_purchase

退款

透過指定相關交易 ID 的 PURCHASE_REFUND 事件記錄退款,並視需要選擇 (適用於部分退款) 使用項目 ID 和數量定義的一或多個項目 (例如產品),藉此評估退款:

// Prepare ecommerce bundle with transaction ID to be refunded

Bundle ecommerceBundle = new Bundle();
ecommerceBundle.putString( Param.TRANSACTION_ID, "T12345" ); // Required
ecommerceBundle.putDouble( Param.VALUE, 37.39 ); // Optional in Universal Analytics

// (OPTIONAL) For partial refunds, define the item IDs and quantities of products being refunded

Bundle refundedProduct = new Bundle();
refundedProduct.putString( Param.ITEM_ID, "sku1234" ); // Required for partial refund
refundedProduct.putLong( Param.QUANTITY, 1 ); // Required for partial refund

ArrayList <bundle>items = new ArrayList<bundle>();
items.add(refundedProduct);
ecommerceBundle.putParcelableArrayList( "items", items );

// Log purchase_refund event with ecommerce bundle

mFirebaseAnalytics.logEvent( Event.PURCHASE_REFUND, ecommerceBundle );

請參閱以下範例的代碼設定:

  • 代碼類型:通用 Analytics (分析)
  • 追蹤類型:事件
  • 事件類別,例如:電子商務
  • 事件動作,例如:退款
  • 啟用加強型電子商務功能:True
  • 讀取資料來源:Firebase 事件
  • 觸發條件,例如:(自訂 > 部分事件) 事件名稱等於 purchase_refund