设备订阅已过期 - 修复

时间:2016-03-19 10:57:54

标签: google-cloud-messaging xamarin.android pushsharp

我正在使用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。

请提出一些解决此问题的建议。

1 个答案:

答案 0 :(得分:0)

检查NewSubscriptionId例外的DeviceSubscriptonExpiredException属性是否为空,然后您需要在手机上请求新的registrationId(使用" com.google.android启动意图。 c2dm.intent.REGISTER"。)

在极少数情况下,请尝试重新安装应用程序。