我已按照说明设置了Android GCM客户端应用here,并特别针对此摘录提出了问题:
对于扩展WakefulBroadcastReceiver的现有应用程序,Google 建议迁移到GCMReceiver和GcmListenerService。至 迁移:在应用清单中,将GcmBroadcastReceiver替换为 “com.google.android.gms.gcm.GcmReceiver”,并替换当前 将IntentService扩展到新的服务声明 GcmListenerService从中删除BroadcastReceiver实现 您的客户端代码重构当前的IntentService服务 实现使用GcmListenerService
我在GCM实现中看到的大多数示例都使用扩展WakefulBroadcastReceiver
的类。例如this one。当您这样做时,您有机会使用NotificationManager
并自定义通知图标,声音等。但是,如果您遵循Google的建议,我不确定如何自定义通知。大多数使用Google建议使用GcmListenerService
的示例,只需覆盖onMessageReceived
方法即可。但是,只有在收到通知时应用程序已经位于前台,或者用户单击通知本身时,才会调用该方法。该方法不是自定义通知声音的正确位置。在调用该方法之前已经播放了声音。
因此,如果我需要自定义通知声音,我应该在GcmListenerService
中覆盖不同的方法,但是没有文档显示哪一个。另一种选择是使用here描述的sound
属性。但是你必须自己将声音文件捆绑在应用程序的res/raw
目录中。这似乎是错的。我宁愿只使用系统提供的声音,主题等。
思想?
答案 0 :(得分:5)
@SamStern在我发布Google Samples github wiki后发现了这个问题:
通知消息 - 这些消息旨在生成通知 没有应用程序的中间处理。他们只打了 如果应用正在运行,则onMessageReceived。
数据消息 - 这些消息旨在以静默方式将数据传递给应用程序 消息服务。即使应用程序在,它们也会触发MessageReceived 的背景。然后,服务可以选择生成通知 使用正常的系统通知API,或者它可以选择处理 信息默默无闻。
我的想法是,如果客户端应用程序想要自定义通知如何呈现给用户(即更改通知栏中的图标,根据应用程序的共享首选项中的声音设置播放声音等),那么我们必须使服务器发送“数据消息”而不是“通知消息”。 Here's Google Samples项目中的实现,展示了如何处理数据消息。
答案 1 :(得分:0)