【发布时间】:2016-07-06 04:15:49
【问题描述】:
我正在使用 PushSharp 库向我的 Xamarin.Android 应用程序发送推送通知。每次启动应用程序时,我都会检查 GCM 注册,如果注册过期,我会将设备令牌发送到服务器。有时我会得到
设备订阅过期异常
在日志中。由于这个异常,我的设备没有收到通知,有时它会自动解决,我开始收到通知。我不确定发生了什么。如何解决这个问题?
我可以按如下方式处理 DeviceSubscriptionExcpetion:
gcmBroker.OnNotificationFailed += (notification, aggregateEx) =>
{
if (ex is DeviceSubscriptonExpiredException)
{
var subExc = ex as DeviceSubscriptonExpiredException;
}
}
我可以从数据库中删除过期的令牌,但我的困惑实际上是设备令牌没有过期。设备有效,但有时由于此异常而无法接收通知。
根据this 线程,只有当我们对同一设备进行多次注册时才会发生这种情况。但我正在根据唯一的设备 ID 存储设备令牌。我得到的设备 ID 如下:
try
{
var telephonyManager = (TelephonyManager)Forms.Context.GetSystemService(Android.Content.Context.TelephonyService);
if (telephonyManager != null)
{
deviceId = telephonyManager.DeviceId;
if (string.IsNullOrEmpty(deviceId))
{
deviceId = Android.OS.Build.Serial;
}
}
}
尽管它说设备 id 是唯一的,但它大部分时间都在变化。我猜想解决此异常的其他方法是获取一些在 Android 设备中始终唯一的 ID。
请提出一些建议来解决这个问题。
【问题讨论】:
标签: google-cloud-messaging xamarin.android pushsharp