我正在使用PushSharp库将推送通知发送到我的Xamarin.Android应用程序。每次启动应用程序时,我都在检查GCM注册,如果注册过期,我将设备令牌发送到服务器。有时我会得到
设备订阅过期例外
在日志中。由于此例外我的设备没有收到通知,有时它会自动解决,我开始收到通知。我不确定发生了什么。如何解决这个问题?
我可以按如下方式处理DeviceSubscriptionExcpetion:
gcmBroker.OnNotificationFailed += (notification, aggregateEx) =>
{
if (ex is DeviceSubscriptonExpiredException)
{
var subExc = ex as DeviceSubscriptonExpiredException;
}
}
我可以从DB中删除过期的令牌,但我的困惑实际上是设备令牌未过期。设备有效,但由于此异常,有时无法接收通知。
根据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。
请提出一些解决此问题的建议。
答案 0 :(得分:0)
检查NewSubscriptionId
例外的DeviceSubscriptonExpiredException
属性是否为空,然后您需要在手机上请求新的registrationId
(使用" com.google.android启动意图。 c2dm.intent.REGISTER"。)
在极少数情况下,请尝试重新安装应用程序。