本指南介绍了如何使用 Android 版 Google 跟踪代码管理器 SDK 实现常见的 Universal Analytics 代码。
通用 Universal Analytics (UA) 代码配置
利用 Google 跟踪代码管理器在您的应用中实现 Universal Analytics,即可实时更改 Google Analytics(分析)实现,而无需重新生成应用二进制文件并将其重新提交到市场。
本指南介绍了如何使用 Universal Analytics 代码和 Android 版 Google 跟踪代码管理器 SDK 完成以下任务:
发送应用浏览量(屏幕浏览量)
要在每次应用中打开新屏幕时向 Google Analytics(分析)发送应用浏览数据,请执行以下操作:
1. 创建“屏幕名称”宏
使用以下配置值创建新的“屏幕名称”宏:
宏名称:screen name
宏类型:Data Layer Variable
数据层变量名称:screenName
2. 创建 OpenScreenEvent 规则
创建一条新规则,用于通过以下配置值触发新的 UA 应用浏览(屏幕浏览)代码:
规则名称:OpenScreenEvent
条件:{{ event }}
等于 openScreen
3. 创建应用浏览(屏幕浏览)UA 代码
使用以下配置值创建新的 UA 代码:
代码名称:Screen Open
跟踪 ID:您的媒体资源 ID
代码类型:Universal Analytics (beta)
跟踪类型:AppView
基本配置 - 应用名称:{{ app name }}
基本配置 - 应用版本:{{ app version }}
基本配置 - 屏幕名称:{{ screen name }}}
4. 更新代码以将事件和屏幕名称推送到数据层
向应用添加代码,将 openScreen
事件和 screenName
值推送到数据层,如下例所示:
// Push an 'openScreen' event to the data layer. import com.google.tagmanager.DataLayer; import com.google.tagmanager.TagManager; import android.app.Activity; import android.os.Bundle; public class MainActivity extends Activity { private static final String SCREEN_NAME = "Home Screen"; private DataLayer mDataLayer; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(); } @Override public void onStart() { super.onStart(); mDataLayer = TagManager.getInstance(this).getDataLayer(); // This call assumes the container has already been opened, otherwise events // pushed to the DataLayer will not fire tags in that container. mDataLayer.push(DataLayer.mapOf("event", "openScreen", // Event, Name of Open Screen Event. "screenName", SCREEN_NAME)); // Name of screen name field, Screen name value. } }
发送事件
要在用户与应用中的界面控件或内容互动时向 Google Analytics(分析)发送事件,请执行以下操作:
以下步骤将展示如何针对用户启动视频播放时触发的事件执行上述操作。
1. (可选)创建事件宏
如果事件将为其类别、操作、标签或值字段使用任何数据层变量,您必须先在界面中配置这些宏。在此示例中,视频播放事件代码将依赖于一个数据层变量,该变量会提供所播放的视频的名称。
为了实现此视频名称,我们需要创建一个具有以下配置值的新宏:
宏名称:video name
宏类型:Data Layer Variable
数据层变量名称:videoName
2. 创建事件规则
创建一条规则,指定在将事件代码推送到数据层时触发事件代码。在视频播放示例中,该新规则将具有以下配置值:
规则名称:VideoPlayEvent
条件:{{ event }}
等于 videoPlay
创建 UA 事件代码
创建 UA 事件代码,该代码将在上一步中创建的规则的求值结果为 true
时触发。在视频播放示例中,该标记将如下所示:
代码名称:Video Play Event
跟踪 ID:您的媒体资源 ID
代码类型:Universal Analytics (beta)
跟踪类型:Event
事件跟踪参数 - 类别:Video
事件跟踪参数 - 操作:Play
事件跟踪参数 - 标签:{{ video name }}
基本配置 - 应用名称:{{ app name }}
基本配置 - 应用版本:{{ app version }}
}{{ screen name }}
更新代码以将事件推送到数据层
最后,更新您的代码,以便在用户完成互动时,将事件值和代码所需的数据层变量都推送到数据层中。 在视频播放示例中,该代码将如下所示:
// Push a 'videoPlay' event to the data layer. import com.google.tagmanager.DataLayer; import com.google.tagmanager.TagManager; public class VideoPlayer { // Called when a user initiates a video playback. public void onPlay(Video v) { DataLayer dataLayer = TagManager.getInstance(this).getDataLayer(); // This call assumes the container has already been opened, otherwise events // pushed to the DataLayer will not fire tags in that container. dataLayer.push(DataLayer.mapOf("event", "videoPlay", // Event, Name of Open Screen Event. "videoName", v.getName()); // Additional data layer variables used by the event tag. play(v); } // Rest of implementation; }
发送电子商务交易
如需在用户完成应用内购买时向 Google Analytics(分析)发送交易和所有关联的商品,请执行以下操作:
1. 创建交易规则
接下来,使用以下配置值创建新规则:
规则名称:TransactionCompleted
条件:{{ event }}
等于 transaction
2. 创建 UA 交易代码
创建包含以下值的 UA 交易代码:
代码名称:Transaction Completed
跟踪 ID:您的媒体资源 ID
代码类型:Universal Analytics (beta)
跟踪类型:Transaction
基本配置 - 应用名称:{{ app name }}
基本配置 - 应用版本:{{ app version }}
基本配置 - 屏幕名称:{{ screen name }}
3. 更新代码以将事件和交易 / 商品数据推送到 DataLayer
最后,更新您的代码,将交易事件以及关联的交易和商品数据推送到数据层。请注意,您必须为交易和商品数据使用支持的数据层变量名:
// Called when a user completes a transaction. public void onPurchaseCompleted(Purchase p) { DataLayer dataLayer = TagManager.getInstance(this).getDataLayer(); // Put maps of item data into an array that will be pushed to the data layer. ArrayList<Map<String, String>> purchasedItems = new ArrayList<Map<String, String>>(); for (Item i : p.items) { HashMap<String, String> currentItem = new HashMap<String, String>(); currentItem.put("name", i.getProductName()); currentItem.put("sku", i.getProductSku()); currentItem.put("category", i.getProductCategory()); currentItem.put("price", i.getProductPrice()); currentItem.put("currency", "USD"); currentItem.put("quantity", i.getProductQty()); purchasedItems.add(currentItem); } // This call assumes the container has already been opened, otherwise events // pushed to the DataLayer will not fire tags in that container. dataLayer.push(DataLayer.mapOf("event", "transaction", // Event, Name of Transaction Event. "transactionId", p.getTransId(), // Additional fields required by the tag. "transactionTotal", p.getTotal(), "transactionAffiliation", "In-app Store", "transactionTax", p.getTax(), "transactionShipping", p.getShippingCost(), "transactionCurrency", "USD", "transactionProducts", purchasedItems)); // Since the data layer is persistent, you should reset fields to null after // you are done pushing the transaction. dataLayer.push(DataLayer.mapOf("transactionId", null, "transactionTotal", null, "transactionAffiliation", null, "transactionTax", null, "transactionShipping", null, "transactionCurrency", null, "transactionProducts", null)); }
支持的电子商务数据层变量
UA 交易代码支持以下数据层变量:
事务变量
变量名称 | 说明 | 类型 | 必需 |
---|---|---|---|
transactionId |
唯一交易标识符 | string | 是 |
transactionAffiliation |
合作伙伴或联营店铺 | string | 否 |
transactionTotal |
交易总价值 | string | 否 |
transactionTax |
交易的税额 | string | 否 |
transactionShipping |
交易的运费 | string | 否 |
transactionCurrency |
交易所用币种 | string | 否 |
transactionProducts |
交易中所购商品的列表 | 包含 item 变量的映射数组。 | 否 |
商品变量
变量名称 | 说明 | 类型 | 必需 |
---|---|---|---|
name |
产品名称 | string | 是 |
sku |
产品 SKU | string | 否 |
category |
产品类别 | string | 否 |
price |
产品价格 | string | 否 |
currency |
price 的货币类型 |
string | 否 |
quantity |
商品数量 | string | 否 |
安装引荐来源网址归因
如果您在 AndroidManifest.xml
文件中注册了以下服务和接收器,安装引荐来源网址数据将会自动包含在所有 Google Analytics(分析)命中或 Google Ads 再营销像素请求中(如果有):
<!-- Used for install referrer tracking --> <service android:name="com.google.tagmanager.InstallReferrerService" /> <receiver android:name="com.google.tagmanager.InstallReferrerReceiver" android:exported="true"> <intent-filter> <action android:name="com.android.vending.INSTALL_REFERRER" /> </intent-filter> </receiver>