我无法在后台应用程序

时间:2016-07-22 11:01:24

标签: android google-cloud-messaging firebase-cloud-messaging

在我的应用程序中,当它处于后台时,我无法再收到任何数据消息。 请注意,它直到最近才在我的应用程序中完美运行。也许它在我的开发环境中最近的更新后停止工作,我不能说......

所以我尝试使用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台不同的计算机上遇到此问题,其中一台我重新安装了所有内容!

4 个答案:

答案 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"
          ),
);