基于概念:FCM中有两种类型的消息:
display-messages:这些消息仅在您的应用处于前台时才有效.
数据消息:即使您的应用程序处于后台,这些消息也能正常工作
当我们的应用程序处于后台时,Android会将通知消息定向到系统托盘.
对于处理数据消息,您的通知应具有click_action =“YOUR_ACTION”字段.
我的信息会是这样的:
{ "data": { "body": "here is body","Title": "Title","click_action": "YOUR_ACTION" },"to": "ffEseX6vwcM:APA91bF8m7wOF MY FCM ID 07j1aPUb"}
活动将显示清单文件将如下所示的消息:
<activity androID:name=".NotificationActivity" androID:screenorIEntation="portrait" androID:theme="@style/theme.AppCompat.Dialog" androID:windowsoftinputMode="stateHIDden" > <intent-filter> <action androID:name="YOUR_ACTION" /> <category androID:name="androID.intent.category.DEFAulT" /> </intent-filter> </activity>
点击通知后,它将重定向到我的NotificationActivity.在onCreate和onNewIntent方法的NotificationActivity中,我使用这种方式提取消息:
Bundle bundle=getIntent().getExtras(); if(bundle!=null) { for (String key : bundle.keySet()) { Object value = bundle.get(key); Log.d("DATA_SENT",String.format("%s %s (%s)",key,value.toString(),value.getClass().getname())); } }
不幸的是,在我的NotificationActivity中,我收到以下消息:
Google.sent_time:1471631793774
来自:50711789666
Google.message_ID 0:1471631793776823 8e508d098e508d
collapse_key:com.myapp.package_name
但是我预期的通知数据在哪里?
这是我的系统配置:
AndroID Studio版本:2.1.3
Firebase版本:com.Google.firebase:firebase-auth:9.0.1
Google Play服务版:com.Google.androID.gms:play-services:9.2.1
以下是一些相关链接:
> https://github.com/firebase/quickstart-android/issues/4
> https://github.com/firebase/quickstart-android/issues/47
> How to handle notification when app in background in Firebase
> Firebase onMessageReceived not called when app in background
> How to handle notification when app in background in Firebase
提前致谢.抱歉英语不好.
解决方法 上端的androID解决方案是正确的.实际上,通知消息就是问题所在.它向我发送“数据”对象但不发送“通知”对象.我的TargetActivity中缺少“通知”对象没有使用getIntent()获取消息.发送“通知”对象后,它解决了我的问题.正确的消息格式如下:
{ "data": { "body": "here is body","Title": "Title" },"notification": { "body": "here is body","to": "ffEseX6vwcM:APA91bF8m7wOF MY FCM ID 07j1aPUb"}
这里有关于firebase消息的更清晰的概念.我是从他们的支持团队那里找到的.
Firebase有三种消息类型:
通知消息:通知消息适用于背景或前景.当应用程序处于后台时,通知消息将传递到系统托盘.如果应用程序位于前台,则消息由onMessageReceived()或dIDReceiveRemoteNotification回调处理.这些基本上就是所谓的显示消息.
数据消息:在AndroID平台上,数据消息可以在后台和前台工作.数据消息将由onMessageReceived()处理.
这里的平台特定说明如下:在AndroID上,可以在用于启动活动的Intent中检索数据有效负载.详细说明,如果您有“click_action”:“launch_Activity_1”,则可以通过仅来自Activity_1的getIntent()来检索此意图.
包含通知和数据有效负载的消息:
在后台,应用程序在通知托盘中接收通知有效负载,并仅在用户点击通知时处理数据有效负载.
在前台时,您的应用会收到一个消息对象,其中包含两个可用的有效负载.
其次,click_action参数通常用于通知有效负载而不是数据有效负载.如果在数据有效内容中使用,则此参数将被视为自定义键值对,因此您需要实现自定义逻辑以使其按预期工作.
另外,我建议您使用onMessageReceived方法(请参阅数据消息)来提取数据包.根据您的逻辑,我检查了bundle对象,但没有找到预期的数据内容.以下是对类似案例的引用,可能会提供更清晰的说明.
总结以上是内存溢出为你收集整理的android – 当应用处于后台状态时,Google FCM getIntent不返回预期数据全部内容,希望文章能够帮你解决android – 当应用处于后台状态时,Google FCM getIntent不返回预期数据所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)