GCM推送通知为什么会重复发送?

3
我正在配置一个使用Xamarin构建的Android应用程序,使用Google Cloud Messaging接收推送通知。除了偶尔出现重复通知的情况外,一切似乎都按预期工作。也就是说,负责处理来自GCM的意图的BroadcastReceiver会接收到多个意图而不是一个。
我的第一个假设是该应用程序有时会多次注册通知,但我已经确认负责与GCM进行注册的代码只能被调用一次,并且问题仍然存在。这在设备上进行干净安装后也是如此,因此我认为这不可能是先前的注册仍处于活动状态的情况。

注册通知:

string appVersion = context.PackageManager.GetPackageInfo(context.PackageName, 0).VersionName;

// AppSettings is a helper class I use to save important settings in shared preferences
if (AppSettings.GCMID == string.Empty || AppSettings.GCMRegisteredAppVersion != appVersion)
{
  GoogleCloudMessaging gcm = GoogleCloudMessaging.GetInstance(context);
  string gcmProjectNumber = context.GetString(Resource.String.GCMProjectNumber);
  string gcmid = gcm.Register(gcmProjectNumber);
  AppSettings.GCMID = gcmid;
  AppSettings.GCMRegisteredAppVersion = appVersion;
}

// This method lets our server know that this device is ready to receive notifications
RegisterForNotifications(AppSettings.GCMID, AppSettings.GUID, PlatformType.Android);

接收通知:

[BroadcastReceiver,
  IntentFilter(new string[]{"com.google.android.c2dm.intent.RECEIVE"},
  Categories = new string[]{ "com.example.gcm" }
)]
public class NotificationReceiver : WakefulBroadcastReceiver
{
  public override void OnReceive(Context context, Intent intent)
  {
    var newIntent = new Intent(context, typeof(NotificationService));
    newIntent.PutExtras(intent);
    context.StartService(newIntent);

    ResultCode = Result.Ok;
  }
}

更加奇怪的是,重复数量似乎与应用程序运行时间有关。如果我在加载应用程序后立即发送通知,我会收到两个推送通知,但是如果等待一段时间再发送通知,则可能出现更多。但是,一旦接收到通知,应用程序接下来收到的通知只会出现一次,就像应该的那样。

我完全不知道是什么原因导致这种情况,任何帮助都将不胜感激,即使只是朝正确方向点个头。

谢谢。


你如何确定你收到了多个通知?你的广播接收器是被同一个通知还是不同的通知触发了多次? - der_michael
我故意从服务器发送单个通知,但广播接收器会多次触发该通知。这些意图是重复的。 - Alfie Woodland
3个回答

1
当您在数据中发送“notification”标签时,也可能出现重复消息的情况。只需从JSON中删除它,消息就不会重复。

0

"...如果在发送之前等待更长时间,可能会出现更多的通知。一旦接收到...应用程序接收到的通知只会出现一次" -> 在您所有的测试中是否保持一致?

请检查两件事情:发送通知的服务器端代码和您的Play Dev控制台GCM消息状态。在前者中,您可能会发送相同的消息两次。在后者中,查找您使用的注册令牌,并查看是否有来自服务器的重复发送。


0

我更新了最新版本的GooglePlayServices.GCM库,重复的意图不再出现。这可能意味着这是库中的一个错误,但不幸的是,我从未找到问题的确切来源,因此无法确认。


请问您在遇到问题时使用的是哪个库的版本?我也遇到了这个重复 PN 的问题。 - Razel Soco
它是版本22.0.0.2 - 版本25.0.0.0修复了这个问题。 - Alfie Woodland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接