Android 我无法在后台应用程序中再接收任何FCM消息

Android 我无法在后台应用程序中再接收任何FCM消息,android,google-cloud-messaging,firebase-cloud-messaging,Android,Google Cloud Messaging,Firebase Cloud Messaging,当我的应用程序处于后台时,我无法再在应用程序中接收任何数据消息。 请注意,直到最近,它在我的应用程序中仍然运行良好。也许它在我的开发环境最近更新后停止工作了,我不能说 所以我试着用这个来做测试,看看效果如何 答案是否定的 我毫不怀疑quickstart android项目配置良好,可以使用FCM功能 我从高级REST客户端发送以下消息,我成功地使用它测试了当前发布的应用程序 { "to" : "dLN4paNl3uw:APA91bH0lpkEMxGp...._7EdxkB2cRbPKFxT2

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

所以我试着用这个来做测试,看看效果如何

答案是否定的

我毫不怀疑quickstart android项目配置良好,可以使用FCM功能

我从高级REST客户端发送以下消息,我成功地使用它测试了当前发布的应用程序

{
  "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()

我看到很多关于这个问题的帖子,但答案总是含糊不清,因为我们可以说,它对一些人有效,而对另一些人无效。 所以我想知道最近是否有人找到了对这个问题的更精确的解释,因为我想知道它是否来自开发环境,因为我试图用最新的studio、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,该项目正在工作,我遇到了同样的问题;应用程序强制关闭

在我成功用于测试我的工作项目的两个不同设备上观察到了这一点:nexus 7 LTE 6.0.1和GT-9295 5.0.1
我现在看到的唯一不同是Android Studio/gradle的版本。工作项目是使用1.5.2构建的,现在我使用2.1.2,我无法再构建任何工作应用程序。

我在两台不同的电脑上遇到了这个问题,我在其中一台电脑上重新安装了所有东西

这太不可思议了

我已经重新安装了Android Studio 1.5捆绑包141.2422023、sdk 23.0.3、java jdk1.7.079,并重新构建了Firebase quickstart Android消息应用程序,结果令人惊叹

当我将应用程序置于后台时,我不再有
强制停止
消息:

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.092在Studio 1.5.2下成功地重建了应用程序


请告诉我从Studio 1.5迁移到Studio 2.1.2时,应用程序中是否有需要更改的关键内容

我也看到了这个错误,也使用了Android Studio 2.1,并且发现了这个错误:

当你退出Android Studio时,它将终止应用程序(正在调试),并将其置于某种“停止”状态

这与从最近的邮件中删除不同,如果我这样做,那么我的GCM邮件就可以正常通过


但这个周期——使用AS调试、退出AS、应用程序被终止——导致GCM消息传递失败,并导致
result=CANCELLED forIntent

我希望您在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"
          ),
);

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"
}
以上是非静默通知。如果您希望从服务器发送静默通知,则结构应如下所示:-

{
  "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.5到2.1的更改不会对您的项目产生这种影响。您是否对quickstart android消息传递项目进行了任何调整?如果你做了一个git状态有什么变化吗?@ArthurThompson没有Arthur,正如我在上一篇文章中所说的,并作了深入的解释:-/我真的不明白。对我来说,这实际上并不取决于Android Studio状态。我可以在没有连接的情况下从设备启动应用程序,在接收FCM消息的能力方面,我得到了相同的行为。好的,但正如我所说的,问题不是来自我的代码,而是来自Android Studio。由于任何未知的原因,如果我用AndroidStudio 2构建应用程序,我无法让它工作,但当我用AndroidStudio 1.5构建应用程序时,它可以完美地工作