Java Android通知没有显示它';在应用程序未运行时删除内容

Java Android通知没有显示它';在应用程序未运行时删除内容,java,android,google-cloud-messaging,android-notifications,Java,Android,Google Cloud Messaging,Android Notifications,这是我有趣的问题。当应用程序未运行时,来自GCM的Android通知不显示标题和内容(只显示应用程序名称,单击时打开MainActivity) 但当应用程序打开时,它会成功地显示标题和内容。有什么问题吗?它运行没有问题,我没有改变任何事情 舱单: <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission

这是我有趣的问题。当应用程序未运行时,来自GCM的Android通知不显示标题和内容(只显示应用程序名称,单击时打开MainActivity)

但当应用程序打开时,它会成功地显示标题和内容。有什么问题吗?它运行没有问题,我没有改变任何事情

舱单:

 <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <uses-permission android:name="com.package.xxx.permission.C2D_MESSAGE" />
    <permission android:name="com.package.xxx.permission.C2D_MESSAGE" android:protectionLevel="signature" />
多谢各位

应用程序运行时记录日志

 D/GCMService: Bundle[{neId=4663755, neIm=http://icdn.posta.com.tr/editor/HD/30/1/2016/fft2mm7549077.jpg, neSi=Posta, neTi=Erdoğan: Rusya sonucuna katlanır, neUr=http://www.posta.com.tr/turkiye/HaberDetay/Erdogan--Rusya-sonucuna-katlanir.htm?ArticleID=324647, type=news, notification=Bundle[{e=1}], collapse_key=com.tekmobil.guncelhaber}]
应用程序未运行时记录日志

(empty, there is no log)
而不是

    NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    mNotificationManager.notify(0, mBuilder.build());
试用

NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
notificationManager.notify(0, mBuilder.build());

发现了问题。我使用的是8.4.0版本(最新)的play服务

compile 'com.google.android.gms:play-services-gcm:8.4.0' //GCM

我将版本缩减为
8.3.0
。它按预期工作

我认为你的问题在于:

您没有包括以下内容:

<service
            android:name="com.example.MyInstanceIDListenerService"
            android:exported="false">
            <intent-filter>
                <action android:name="com.google.android.gms.iid.InstanceID" />
            </intent-filter>
        </service>

当创建通知时,棒棒糖会在设备窗口顶部创建一个小弹出窗口,从而稍微改变这一点

以下是官方文件:


使用此方法,您可以创建具有任何自定义布局的新活动,并启动该活动,而不是将通知放置在状态栏中。

简而言之:在构建推送服务器端时,尝试设置
content\u available=false
。解释如下

这在8.4.0版本的play services中发生。 文档中说,如果您发送一条包含
数据
通知
有效负载的下游消息,则如果应用程序位于前台或后台,行为会发生变化:

  • 在前台,将调用侦听器
    onMessageReceived
    ,您可以手动处理通知
  • 在后台,系统通过从通知有效负载中获取
    标题
    正文
    自动生成通知。如果不指定它们,则
    标题
    将填充应用程序名称,而
    正文
    将保留为空(这似乎是您的情况)
在您的案例中,我在消息包中看到了一个奇怪的东西
notification=bundle[{e=1}]
我遇到了同样的问题。此通知有效负载是自行生成的。在构建推送服务器端时,我通过设置
content\u available=false
将其删除。这是一个问题,如果你也在使用iOS,但我没有找到更好的解决方案…试试看

这里是我引用的谷歌文档:


希望能有所帮助,再见。

问题在于GCM 8.4.0版本,它正在发送通知负载,即使您没有将其发送到服务器中

notification=Bundle[{e=1}
但是,如果您在服务器中添加值为0的
e
字段,它将正常工作


有关更多详细信息,请参阅我的答案。

是否有任何错误日志?你能给我们提供你的日志吗?很遗憾没有日志。非常有趣。发布通过以下行返回的日志:
Log.d(“GCMService”,data.toString())在这两种情况下。@OzgurGUL这很奇怪。因为如果
数据
为空。那么你的应用程序就不应该显示任何通知了。@EricB。是的,有趣的问题。这绝对不是一个解决方案。降级版本。。。我有类似的问题,我可以看到的内容,但没有标题。。。。请尝试找到一个合适的解决方案来反对这个解决方案。谢谢。我仍在寻找解决方案,但这显然是版本8.4的问题。
<service
            android:name="com.example.MyInstanceIDListenerService"
            android:exported="false">
            <intent-filter>
                <action android:name="com.google.android.gms.iid.InstanceID" />
            </intent-filter>
        </service>
notification=Bundle[{e=1}