卸载跟踪
通过将推送通知服务与 Singular SDK 集成,跟踪应用程序的卸载情况,以衡量用户保留率并优化重新参与活动。
重要:谷歌已于 2018 年 4 月弃用 GCM API。 所有安卓卸载跟踪实施均使用 Firebase Cloud Messaging (FCM)。
安卓卸载跟踪
前提条件
在您的 Unity 应用程序中实施卸载跟踪之前,请按照 "设置 Android 卸载跟踪 "指南在 Singular 平台中配置您的应用程序。
系统要求
卸载跟踪需要 Firebase Cloud Messaging 和特定的设备配置。
FCM 要求(源):
- 安卓版本:设备必须运行 Android 4.1 (API 16) 或更高版本
- Google Play 服务:设备必须安装 Google Play Store 应用程序
- 模拟器支持:支持带有 Google API 的 Android 4.1 或更高版本模拟器
- 分发:应用程序可在 Google Play Store 之外分发,同时仍支持卸载跟踪
注意:不支持的 Android 版本或没有 Google Play 服务的设备上的用户将不会被跟踪卸载。
实施步骤
第 1 步:整合 Firebase 云消息服务
在您的 Unity 应用程序中设置 Firebase 云消息(如果尚未配置)。
请按照 Google 官方指南为 Unity 设置 Firebase 云消息服务。 其中包括
- 将 Firebase 添加到您的 Unity 项目
- 导入 Firebase Messaging Unity 软件包
- 为 Android 配置 Firebase 设置
- 申请通知权限(Android 13+)
第 2 步:配置 AndroidManifest.xml
在 Android 清单中注册 Firebase 消息服务,以接收 FCM 消息。
<service
android:name=".java.MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
重要:将.java.MyFirebaseMessagingService 替换为扩展FirebaseMessagingService 的类的完整限定名称。
步骤 3:注册 FCM 设备令牌
在SDK初始化之前,读取FCM设备令牌并将其发送给Singular,以便卸载跟踪。
using UnityEngine;
using Singular;
using Firebase.Messaging;
using System.Threading.Tasks;
public class UninstallTrackingManager : MonoBehaviour
{
async void Start()
{
// Initialize Firebase
await InitializeFirebase();
// Get FCM token and register it with Singular
await RegisterFCMToken();
// Initialize Singular SDK after registering the token
SingularSDK.InitializeSingularSDK();
}
private async Task InitializeFirebase()
{
var dependencyStatus = await Firebase.FirebaseApp.CheckAndFixDependenciesAsync();
if (dependencyStatus == Firebase.DependencyStatus.Available)
{
Debug.Log("Firebase is ready");
}
else
{
Debug.LogError($"Could not resolve Firebase dependencies: {dependencyStatus}");
}
}
private async Task RegisterFCMToken()
{
try
{
// Get FCM token
string token = await Firebase.Messaging.FirebaseMessaging.GetTokenAsync();
if (!string.IsNullOrEmpty(token))
{
// Register token with Singular BEFORE SDK initialization
SingularSDK.RegisterTokenForUninstall(token);
Debug.Log($"FCM token registered with Singular: {token}");
}
else
{
Debug.LogWarning("FCM token is empty");
}
}
catch (System.Exception ex)
{
Debug.LogError($"Error getting FCM token: {ex.Message}");
}
}
}
关键: RegisterTokenForUninstall()方法必须在SingularSDK.InitializeSingularSDK()之前调用。在初始化之后注册令牌将无法实现卸载跟踪。
步骤 4:处理令牌刷新
每当 FCM 令牌刷新时,就用 Singular 更新令牌,以保持准确的卸载跟踪。
using UnityEngine;
using Singular;
using Firebase.Messaging;
public class FCMTokenRefreshHandler : MonoBehaviour
{
void Start()
{
// Subscribe to token refresh event
Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;
}
void OnDestroy()
{
// Unsubscribe when destroyed
Firebase.Messaging.FirebaseMessaging.TokenReceived -= OnTokenReceived;
}
private void OnTokenReceived(object sender, Firebase.Messaging.TokenReceivedEventArgs e)
{
Debug.Log($"New FCM token received: {e.Token}");
// Update token with Singular
SingularSDK.RegisterTokenForUninstall(e.Token);
// Also send token to your server if needed
SendTokenToServer(e.Token);
}
private void SendTokenToServer(string token)
{
// Implement your server communication logic here
Debug.Log($"Sending token to server: {token}");
}
}
最佳做法:FCM 令牌可以随时刷新(应用程序更新、设备还原等)。请始终订阅TokenReceived 事件,以便用最新令牌保持 Singular 的更新。
iOS 卸载跟踪
前提条件
iOS 卸载跟踪基于苹果推送通知服务(APN)技术。
如果您的应用程序不支持推送通知,请参阅 Apple向 APNs 注册应用程序的指南。
注册 APNS 设备令牌
在 SDK 初始化后,使用RegisterTokenForUninstall 方法传递从 APNs 返回的设备令牌。
方法签名:
public static void RegisterTokenForUninstall(string APNSToken)
参数:
- APNSToken:从 APNs 返回的设备令牌,十六进制字符串
令牌格式:APNS 令牌的原始格式通常是二进制数据,但必须以十六进制字符串的形式传递给 Singular。
使用示例
向 Singular 注册 APNS 设备令牌,用于 iOS 卸载跟踪。
using UnityEngine;
using Singular;
#if UNITY_IOS
using Unity.Notifications.iOS;
#endif
public class iOSUninstallTracking : MonoBehaviour
{
void Start()
{
#if UNITY_IOS
// Initialize Singular SDK first
SingularSDK.InitializeSingularSDK();
// Request notification authorization
RequestNotificationAuthorization();
#endif
}
#if UNITY_IOS
private void RequestNotificationAuthorization()
{
var authorizationOption = AuthorizationOption.Alert |
AuthorizationOption.Badge |
AuthorizationOption.Sound;
using (var req = new AuthorizationRequest(authorizationOption, true))
{
while (!req.IsFinished)
{
// Wait for authorization
}
string deviceToken = req.DeviceToken;
if (!string.IsNullOrEmpty(deviceToken))
{
// Convert device token to hex string and register with Singular
SingularSDK.RegisterTokenForUninstall(deviceToken);
Debug.Log($"APNS token registered: {deviceToken}");
}
else
{
Debug.LogWarning("Failed to get APNS device token");
}
}
}
#endif
}
令牌示例:
// Pass the APNS token as a hex-string
SingularSDK.RegisterTokenForUninstall("ba85ab31a7c7f5c2f012587f29fb0e596d4b67e7b7b2838fa1a8582c1f7dbdee");
平台差异:安卓系统必须在SDK 初始化前注册令牌,而 iOS 系统的令牌则应在 SDK 初始化后注册。
验证和故障排除
验证实施
确认卸载跟踪工作正常。
- 检查日志:验证令牌注册是否出现在 Unity 控制台日志中。
- 测试令牌生成:确保首次启动应用程序时生成令牌
- 监控仪表板:检查 Singular 仪表板,查看 24-48 小时后的卸载跟踪数据
- 测试令牌刷新:清除应用程序数据并验证令牌更新是否正确
常见问题
- 未生成 Android 令牌:验证是否正确添加了 Firebase 依赖关系,以及是否在 Unity 项目中配置了 Firebase
-
令牌未更新:检查您是否订阅了 Android 的
TokenReceived事件或正确处理了 iOS 的 APNs 回调 - 缺少数据:确保设备符合平台要求(Android 4.1+ 支持 Google Play 服务,iOS 支持 APNs
- 配置错误:确认已在 Singular 平台设置中启用卸载跟踪功能
-
初始化顺序:对于 Android,确认
RegisterTokenForUninstall()在InitializeSingularSDK()之前调用
其他资源:有关详细的故障排除,请参阅《Android 卸载跟踪设置指南》和Firebase Cloud Messaging for Unity 文档。