Android Firebase通知已通过CURL和Firebase控制台成功发送,但在设备上未收到

Android Firebase通知已通过CURL和Firebase控制台成功发送,但在设备上未收到,android,firebase,curl,firebase-cloud-messaging,android-notifications,Android,Firebase,Curl,Firebase Cloud Messaging,Android Notifications,我正在尝试使用旧版应用服务器协议向我的android设备发送推送通知。根据响应,通知发送成功,但我在android设备上没有收到任何信息。 我还尝试使用firebase控制台发送通知,在那里也显示已成功发送,但我再次没有收到任何消息 这个问题在下面的回答中讨论过,但我没有犯这里回答中提到的错误 这是我提出的要求 curl -X POST -H "Authorization:key=MyAuthorizationKey" -H "Content-Type: application/json"

我正在尝试使用旧版应用服务器协议向我的android设备发送推送通知。根据响应,通知发送成功,但我在android设备上没有收到任何信息。 我还尝试使用firebase控制台发送通知,在那里也显示已成功发送,但我再次没有收到任何消息

这个问题在下面的回答中讨论过,但我没有犯这里回答中提到的错误

这是我提出的要求

 curl -X POST 
-H "Authorization:key=MyAuthorizationKey" 
-H "Content-Type: application/json" 
-d '{ "message": { "notification": { 
                       "title": "FCM Message", 
                        "body": "This is an FCM Message", },
      "to": "MyDeviceToken"}
}' https://fcm.googleapis.com/fcm/send 

这是我得到的答复

{"multicast_id":8835070472349844293,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1555418431449800%06445bacf9fd7ecd"}]}
发出此请求时,我的应用程序未在前台运行。因此,通知应该由谷歌服务提供和显示,但这并没有发生

这是我的清单文件代码:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.srishti.elderly">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".SignUp"
            android:label="SignUp" />
        <activity
            android:name=".SignIn"
            android:label="SignIn" />

        <service android:name=".MyFirebaseMessagingService"
            android:exported="false">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>

        </service>

        <activity android:name=".Home"
            android:label="Home"></activity>

        <meta-data
            android:name="com.google.firebase.messaging.default_notification_icon"
            android:resource="@drawable/ic_launcher_background"/>
        <meta-data
            android:name="com.google.firebase.messaging.default_notification_color"
            android:resource="@color/colorAccent"/>

    </application>

</manifest>
更新:

这是我尝试发送的新json:

curl -X POST 
-H "Authorization:key=Authorizationkey" 
-H "Content-Type: application/json" 
-d '{ 
     "data": { "title": "FCM Message", "body": "This is an FCM Message" }, 
     "to": "devicetoken"
}' https://fcm.googleapis.com/fcm/send 

更新:
当我在另一台设备上运行时,我的设备出现了问题,它正常工作。谢谢。

问题是您发送的消息仅在应用程序位于前台时有效,要使其在应用程序位于后台时有效,您应该使用数据,请尝试以下表单:

{
  "data": {
      "title":"FCM Message", 
      "Body":"This is an FCM Message"            
  }, 
 "to" : "devicetoken"
}  
说明:

  • 通知-仅当您的应用程序处于后台/被杀死时,才会直接发送到Android的通知托盘的消息;如果您的应用程序处于前台,则会发送到onMessageReceived()方法

  • 数据有效载荷-不管您的应用程序是在forground中还是在后台或被终止,这些消息将始终传递给onMessageReceived()方法


这意味着应用程序中的实现有问题,因此我们需要查看该代码以找出问题所在。我是否应该在此处发布清单文件代码?因为onMessageReceived方法不会被调用,因为它是一条通知消息,我是否也应该发布它?如果我们只讨论后台通知,那么只需要真正的manifest,但最好知道当应用程序打开时它是否工作以及你的设备安卓版本是什么?@Ismailaoui它是安卓6.0(API级别23)但是,即使在应用程序位于后台时,也不应该发送通知吗?我认为数据字段用于在应用程序中发送消息,以便在onMessageReceived方法上处理消息。但正如通知说明中所述,如果通知位于后台,则会发送到通知托盘,而我的应用程序位于后台圆形而非前台即使在前台也没有收到。因为您使用的是onMessageReceived,要在后台获得信息,您应该使用数据而不是消息。您可以做一个断点来查看是否收到有效负载吗?
{
  "data": {
      "title":"FCM Message", 
      "Body":"This is an FCM Message"            
  }, 
 "to" : "devicetoken"
}