在我的应用程序中,当它处于后台时,我无法再收到任何数据消息。 请注意,它直到最近才在我的应用程序中完美运行。也许它在我的开发环境中最近的更新后停止工作,我不能说......
所以我尝试使用quickstart-android project进行测试,看它效果更好。
答案是否定的!
我毫不怀疑quickstart-android项目配置得很好,可以使用FCM功能......
我从Advanced REST Client发送以下消息,我成功地使用它来测试我当前发布的应用程序。
{
"to" : "dLN4paNl3uw:APA91bH0lpkEMxGp...._7EdxkB2cRbPKFxT2Ti3OPw-7fCSwXCSfGG",
"data": {
"id": 19,
"title": "Title test",
"msg": "Text of the test",
"code": 2,
},
"delay_while_idle" : false,
"priority" : "high",
"content_available" : true
}
我可以说的是,当应用程序处于后台时,每当我发送消息时,我都会在logcat中显示以下内容
07-22 12:54:21.400 14316-14316/? W/GCM-DMM: broadcast intent callback: result=CANCELLED forIntent { act=com.google.android.c2dm.intent.RECEIVE flg=0x10000000 pkg=com.google.firebase.quickstart.fcm (has extras) }
因此设备很好地接收了该消息,但未将该消息传送到onMessageReceive()。
我看到很多关于此类问题的帖子,但答案总是含糊不清的,因为我们可以说它对某些人有用而对其他人不起作用。 所以我想知道最近是否有人找到了这个问题的更准确的解释,因为我想知道它是否不能来自开发环境,因为我试图用新更新的工作室构建旧的工作项目,sdk ,构建工具,我遇到同样的问题,新构建的应用程序不再接收GCM / FCM消息。
修改
经过更多调查后,我在logcat中看到,当我从最近的应用列表中滑出时,我的应用程序被强制关闭。这无疑说明它无法处理设备收到的消息。
07-23 23:12:29.002 671-31254/? I/ActivityManager: Killing 17453:com.google.firebase.quickstart.fcm/u0a297 (adj 9): remove task
07-23 23:12:29.016 14316-14524/? D/GCM: Removing messenger 0:com.google.firebase.quickstart.fcm
07-23 23:12:29.017 671-2998/? I/WindowState: WIN DEATH: Window{2a27cf7 u0 com.google.firebase.quickstart.fcm/com.google.firebase.quickstart.fcm.MainActivity}
07-23 23:12:30.148 671-4851/? I/ActivityManager: Force stopping com.google.firebase.quickstart.fcm appid=10297 user=0: from pid 18289
我还尝试了几周前我的一个工作项目,基于GCM 8.4.0,sdk 23,java 1.7,它正在工作,我遇到了同样的问题;申请被强制关闭。
在我成功用于测试我的工作项目的2个不同设备上观察到:nexus 7 LTE 6.0.1和GT-9295 5.0.1
我现在看到的唯一区别是Android Studio / gradle的版本。工作项目是用1.5.2构建的,现在我使用2.1.2,我不能再构建任何工作应用程序了
我在2台不同的计算机上遇到此问题,其中一台我重新安装了所有内容!
答案 0 :(得分:3)
FCM有两种类型的通知:静音和非静音: -
无声通知: - 您总是在 onMessageReceived 方法中获得回调
非静默通知: - 当应用处于前台时,您会在 onMessageReceived 方法中获得回调,但当应用处于后台时,FCM会在通知栏中生成默认通知。
仅在FCM中将仅包含数据部分的通知视为静默通知。
当您从服务器生成通知时,您传递类似的JSON对象: -
{
"notification":{
"title":"Test Notification",
"body":"Notification is delivered!",
"sound":"call",
"icon": "ic_app_icon"
},
"data":{
"someData":"Great"
},
"to": "app_token",
"priority":"high"
}
如果你想从服务器发送静默通知,上面的那个是非静默通知,那么结构应该是这样的: -
{
"data":{
"someData":"Great"
},
"to": "app_token",
"priority":"high"
}
尽管如此,它只是在有效负载中没有通知对象的结构。
答案 1 :(得分:0)
这完全令人难以置信
我重新安装了Android Studio 1.5软件包141.2422023,sdk 23.0.3,java jdk1.7.0_79并重建了Firebase quickstart-android消息应用程序,结果是惊人
当我将应用程序置于后台时,我不再收到Force stopping
消息:
07-24 12:00:10.409 671-3321/? I/ActivityManager: Killing 11067:com.google.firebase.quickstart.fcm/u0a297 (adj 9): remove task
07-24 12:00:10.425 671-31254/? D/GraphicsStats: Buffer count: 4
07-24 12:00:10.425 671-31254/? I/WindowState: WIN DEATH: Window{996cbf7 u0 com.google.firebase.quickstart.fcm/com.google.firebase.quickstart.fcm.MainActivity}
应用程序正确接收和处理数据有效负载消息
我还成功使用sdk 24,buildtools 24.0.0和java 1.8.0_92在Studio 1.5.2下重建了应用程序
请告诉我从Studio 1.5迁移到Studio 2.1.2时,应用程序中是否存在关键变化!
答案 2 :(得分:0)
我也看到了这个错误,也使用Android Studio 2.1,并发现了这个:
当您退出Android Studio时,它将终止应用程序(正在调试)并将其置于某种“已停止”状态。
这与从最近一次扫描不同,如果我这样做,那么我的GCM消息就可以了。
但是这个循环 - 使用AS调试,退出AS,应用程序被杀死 - 导致GCM消息传递失败并显示result=CANCELLED forIntent
答案 3 :(得分:0)
我希望您在Web API中添加此类数据。
$fields = array(
'to' => $reg_id ,
'priority' => "high",
'notification' => array( "title"=>"Food Shop", "body" => $message , "click_action"=> "OPEN_ACTIVITY_1"),
'data' => array(
"noti_title"=>"Food Shop One",
"noti_body"=> "some body"
),
);