使用GCM

时间:2015-11-16 15:26:22

标签: android notifications push-notification google-cloud-messaging

我通过Google云消息传递工作获得基本推送通知,但是有多条消息有问题。我使用基本通知(例如,我让系统创建实际的通知消息),但是在数据部分的应用程序中提供要打开的URL。

这是我到目前为止所做的:

我的MainActivity有一个意图过滤器:

<intent-filter>
    <action android:name="GCM" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

在我的onCreate()函数中,我有以下内容:

Intent startIntent = getIntent();
    if (startIntent.hasExtra("url")) {
    openUrl(startIntent.getStringExtra("url"));
}

我发送的有效负载如下:

{
  "registration_ids": [
    "..."
  ],
  "notification": {
    "body": "This is a body.",
    "title": "This is a title.",
    "icon": "app",
    "sound": "default",
    "click_action": "GCM"
  },
  "data": {
    "url": "/quiz/"
  }
}

到目前为止一切顺利。当我收到一条消息并单击它时,它会打开我的应用并加载该URL。当我收到多条消息时出现问题:

  1. 当我收到两封包含两个不同网址的邮件时,我始终会在MainActivity中获取第一个通知的网址。即使我点击了第二个通知。
  2. 当我的活动已经打开并收到消息时,点击该消息将无法打开该网址(可能因为onCreate()未被调用)。
  3. 我的猜测是两者都有些相关,我应该以某种方式处理传入的消息。

1 个答案:

答案 0 :(得分:0)

对不同的通知使用不同的通知ID,因此它们不会堆叠。

因此,在创建此类示例通知时,请务必使用与彼此不同的 mId 推送通知。这样,每个通知都将显示为单独的。您可以这样做的其他方式是将URL添加到PendingIntent中包含的列表或其他方式,然后在您的应用中,迭代所有URL并执行您想要的任何操作,这样只有1个通知

NotificationCompat.Builder mBuilder =
    new NotificationCompat.Builder(this)
    .setSmallIcon(R.drawable.notification_icon)
    .setContentTitle("My notification")
    .setContentText("Hello World!");

Intent resultIntent = new Intent(this, ResultActivity.class);

mBuilder.setContentIntent(resultPendingIntent);
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

mNotificationManager.notify(mId, mBuilder.build());

编辑:至于为什么当你在应用程序运行时依赖通知时没有任何反应需要查看你如何构建通知以及可能的活动代码。