【问题标题】:Device Subscription Expired - Fix设备订阅已过期 - 修复
【发布时间】: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


    【解决方案1】:

    检查DeviceSubscriptonExpiredException 异常的NewSubscriptionId 属性,如果它为空,那么您需要在手机上请求新的registrationId(使用“com.google.android.c2dm.intent.REGISTER”开始一个意图)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-17
      • 2021-04-22
      • 2019-10-15
      • 2017-08-20
      • 2020-07-24
      • 2013-04-06
      • 2023-03-23
      • 1970-01-01
      相关资源
      最近更新 更多