Unity SDK - 跟踪应用程序内事件

文档

跟踪应用程序内事件

跟踪应用内事件以分析营销活动绩效并衡量关键绩效指标 (KPI),如用户登录、注册、教程完成或进度里程碑。

标准事件和属性

使用标准事件

Singular 支持广告网络识别的标准事件,用于报告和优化。请尽可能使用标准事件名称,以便自动识别和简化设置。

您的用户体验、营销或业务团队应根据企业的营销关键绩效指标编制事件列表。 请参考《如何跟踪应用程序内事件》指南:单一归因客户指南》进行规划。

每个事件都支持各种属性。有关实施详情,请参阅每个事件的推荐标准属性


发送事件

事件实施指南

使用Event() 方法将事件发送至 Singular,并为丰富数据提供可选属性。

  • 标准事件:使用标准事件列表中的事件统一名称,如Events.sngLogin
  • 自定义事件:对于不符合标准事件的应用程序特有事件,可使用任何符合字符限制的描述性字符串

自定义事件限制

  • 语言:以英文传递事件名称和属性,以确保与第三方合作伙伴和分析解决方案兼容
  • 事件名称:限制为 32 个 ASCII 字符,非 ASCII 字符串转换为 UTF-8 时必须小于 32 字节
  • 属性和值:限制为 500 个 ASCII 字符

事件方法

使用变量参数或字典格式报告有或无附加信息的用户事件。

方法签名

public static void Event(string name)
public static void Event(string name, params object[] args)
public static void Event(Dictionary<string, object> args, string name)

注意:使用params object[] args签名时,参数列表必须包含偶数个元素(键值对),否则事件将被拒绝。传递字典时,值必须是以下类型之一:字符串、int、long、float、double、null、ArrayList、Dictionary<string, object>

使用示例

C#
// Example 1: Standard event without attributes
SingularSDK.Event(Events.sngLogin);

// Example 2: Standard event with recommended attributes (key-value pairs)
SingularSDK.Event(Events.sngTutorialComplete,
    Attributes.sngAttrContent, "Unity Basics",
    Attributes.sngAttrContentId, 32,
    Attributes.sngAttrContentType, "video",
    Attributes.sngAttrSuccess, "yes"
);

// Example 3: Standard event with attributes using Dictionary
Dictionary<string, object> attributes = new Dictionary<string, object>()
{
    [Attributes.sngAttrContent] = "Unity Basics",
    [Attributes.sngAttrContentId] = 32,
    [Attributes.sngAttrContentType] = "video",
    [Attributes.sngAttrSuccess] = "yes"
};
SingularSDK.Event(attributes, Events.sngTutorialComplete);

// Example 4: Custom event without attributes
SingularSDK.Event("SignUp");

// Example 5: Custom event with custom attributes
SingularSDK.Event("Bonus Points Earned", "Points", 500, "Level", 5);

跟踪应用内收入

跟踪来自应用内购买 (IAP)、订阅和自定义收入来源的收入,以衡量营销活动的绩效和广告支出回报率 (ROAS)。

收入数据通过三种渠道流动:

  • 互动报告:在 Singular 面板中查看收入指标
  • 导出日志:访问详细的 ETL 数据,进行自定义分析
  • 实时回传:向外部平台发送收入事件

收入事件限制

  • 事件名称:自定义收入事件名称限制为 32 个 ASCII 字符(或转换为 UTF-8 后 32 个字节的非 ASCII 字符
  • 属性:事件属性名称和值限制为 500 ASCII 字符
  • 货币代码:必须使用大写字母,并遵循三个字母的ISO 4217 标准(例如,美元、欧元、印度卢比

注:不同货币的收入会自动转换为贵组织在 Singular 账户中设置的首选货币。

最佳实践

  • 标准命名:使用Singular的标准事件和属性命名规范
  • 语言:以英文发送自定义收入事件名称,以提高广告网络回传的兼容性
  • 非零金额:仅在金额大于或小于 0 时发送收入事件

统一 IAP 集成

使用 Unity IAP 进行应用内购买

将 Unity 的 IAP 购买或订单对象传递到InAppPurchase() 方法,以丰富报告和交易验证。

优点

  • 丰富的数据:Singular接收完整的交易详细信息,以生成全面的报告
  • 防止欺诈:交易收据可用于验证,以打击应用程序内的欺诈行为

Unity IAP 版本兼容性

  • Unity IAP v5:使用新的Unity Purchasing API和 Google Play Billing Library 7+。兼容 Unity 2021.3 LTS 及更高版本。使用InAppPurchase(Order) 方法
  • Unity IAP v4:使用旧版Unity IAP API和 Google Play Billing Library 6。兼容 Unity 2018.4 LTS 至 2020.3 LTS。使用InAppPurchase(Product)方法

InAppPurchase 方法(Unity IAP v5)

使用 Unity IAP v5 的订单对象发送 IAP 事件,以获得自动验证和丰富的数据。

方法签名

public static void InAppPurchase(Order order)
public static void InAppPurchase(Order order, Dictionary<string, object> attributes)
public static void InAppPurchase(Order order, bool isRestored)
public static void InAppPurchase(Order order, string eventName, Dictionary<string, object> attributes)

使用示例

C#
// Example 1: IAP with order object only
SingularSDK.InAppPurchase(order);

// Example 2: IAP with order and additional attributes
Dictionary<string, object> attr = new Dictionary<string, object>()
{
    ["promo_code"] = "SUMMER2025",
    ["user_tier"] = "premium"
};
SingularSDK.InAppPurchase(order, attr);

// Example 3: IAP with restored transaction flag
SingularSDK.InAppPurchase(order, true);

// Example 4: IAP with custom event name and attributes
Dictionary<string, object> attr = new Dictionary<string, object>()
{
    ["subscription_tier"] = "gold",
    ["billing_period"] = "monthly"
};
SingularSDK.InAppPurchase(order, "PremiumSubscription", attr);

InAppPurchase 方法(Unity IAP v4)

使用 Unity IAP v4 的产品对象发送 IAP 事件,以进行自动验证和丰富数据。

方法签名

public static void InAppPurchase(Product product, Dictionary<string, object> attributes, bool isRestored = false)
public static void InAppPurchase(string eventName, Product product, Dictionary<string, object> attributes, bool isRestored = false)
public static void InAppPurchase(IEnumerable<Product> products, Dictionary<string, object> attributes, bool isRestored = false)
public static void InAppPurchase(string eventName, IEnumerable<Product> products, Dictionary<string, object> attributes, bool isRestored = false)

使用示例

C#
// Example 1: IAP with single product, no extra attributes
SingularSDK.InAppPurchase(myProduct, null);

// Example 2: IAP with single product and attributes
Dictionary<string, object> attr = new Dictionary<string, object>()
{
    ["promo_code"] = "SUMMER2025",
    ["user_tier"] = "premium"
};
SingularSDK.InAppPurchase(myProduct, attr);

// Example 3: IAP with custom event name
SingularSDK.InAppPurchase("PremiumUpgrade", myProduct, null);

// Example 4: IAP with list of products
SingularSDK.InAppPurchase(myProductList, null);

// Example 5: IAP with list of products and custom event name
SingularSDK.InAppPurchase("BundlePurchase", myProductList, null);

无需购买验证的自定义收入

手动收入跟踪

通过传递货币、金额和可选产品详细信息来跟踪收入,而无需使用 "购买 "或 "订单 "对象。请注意,此方法不提供用于验证的交易收据。

重要:使用这些方法时,Singular 无法验证交易。我们强烈建议尽可能使用上述 Unity IAP 方法。


收入方法

发送包含货币、金额和可选产品详细信息的收入事件。

方法签名

public static void Revenue(string currency, double amount)
public static void Revenue(string currency, double amount, string productSKU, string productName, string productCategory, int productQuantity, double productPrice)
public static void Revenue(string currency, double amount, Dictionary<string, object> attributes)

使用示例

C#
// Example 1: Revenue without product details
SingularSDK.Revenue("USD", 1.99);

// Example 2: Revenue with product details
SingularSDK.Revenue("USD", 4.99, "coin_package_abc123", "Coin Pack 5", "Bundles", 1, 4.99);

// Example 3: Revenue with attributes dictionary
Dictionary<string, object> attributes = new Dictionary<string, object>()
{
    ["productSKU"] = "coin_package_abc123",
    ["productName"] = "Coin Pack 5",
    ["productCategory"] = "Bundles",
    ["productQuantity"] = 2,
    ["productPrice"] = 4.99,
    ["transaction_id"] = "T12345"
};
SingularSDK.Revenue("USD", 9.98, attributes);

自定义收入方法

发送带有指定事件名称、货币、金额和可选交易属性的自定义收入事件。

方法签名

public static void CustomRevenue(string eventName, string currency, double amount)
public static void CustomRevenue(string eventName, string currency, double amount, string productSKU, string productName, string productCategory, int productQuantity, double productPrice)
public static void CustomRevenue(string eventName, string currency, double amount, Dictionary<string, object> attributes)

使用示例

C#
// Example 1: Custom revenue without product details
SingularSDK.CustomRevenue("MyCustomRevenue", "USD", 9.99);

// Example 2: Custom revenue with product details
SingularSDK.CustomRevenue("MyCustomRevenue", "USD", 50.50, "abc123", "Premium Item", "Virtual Goods", 2, 25.50);

// Example 3: Custom revenue with attributes dictionary
Dictionary<string, object> attributes = new Dictionary<string, object>()
{
    ["productSKU"] = "premium_bundle_xyz",
    ["productName"] = "Premium Bundle",
    ["productCategory"] = "Bundles",
    ["productQuantity"] = 1,
    ["productPrice"] = 99.99,
    ["discount_applied"] = true
};
SingularSDK.CustomRevenue("PremiumBundlePurchase", "USD", 99.99, attributes);

混合事件跟踪(高级)

通过集成到应用程序中的 Singular SDK 发送所有事件和收入,以获得最佳归因。不过,必要时,Singular 也可以从其他来源收集事件。

在 Singular SDK 之外发送的事件必须符合 Singular 的服务器到服务器事件文档,并提供匹配的设备标识符,以便正确归因。

重要:

当服务器到服务器请求中的设备标识符与 Singular SDK 记录的标识符不匹配时,就会出现差异:

  • 早期事件:如果事件在 Singular SDK 记录设备标识符之前到达,该事件就会成为未知设备的 "首次会话",从而导致有机归属。
  • 标识符不匹配:如果 Singular SDK 记录的设备标识符与服务器到服务器请求中的设备标识符不同,事件将被错误归属

混合事件跟踪指南

从内部服务器发送事件

从内部服务器收集收入数据,分析营销活动的绩效和投资回报率。

要求:

  • 捕获设备标识符:在应用内注册或登录事件中,捕获并传递设备标识符,然后将此数据与服务器上的用户 ID 一起存储。当用户生成新的应用程序会话时更新标识符,以确保正确的归因
  • 平台特定标识符:使用与平台匹配的设备标识符发送服务器端事件(例如,iOS 设备使用 IDFA 或 IDFV,Android 设备使用 GAID)
  • 实时更新:使用 Singular 内部商业智能回传机制将事件实时推送到您的终端。请参阅内部 BI 回传常见问题
  • 实施细节:查看服务器到服务器集成指南中的"跟踪收入 "部分

从收入提供商发送事件

集成 RevenueCat 或 adapty 等第三方收入提供商,向 Singular 发送购买和订阅收入。

支持的供应商:


从Segment发送事件

通过在Segment中添加 "云模式 "目标,使Segment能够与Singular SDK并行发送事件到Singular。

详细设置说明请参阅Singular-Segment Integration实施指南。