Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用php FCM同时处理向Android和iOS发送的不同通知负载?_Php_Android_Ios_Firebase_Firebase Cloud Messaging - Fatal编程技术网

如何使用php FCM同时处理向Android和iOS发送的不同通知负载?

如何使用php FCM同时处理向Android和iOS发送的不同通知负载?,php,android,ios,firebase,firebase-cloud-messaging,Php,Android,Ios,Firebase,Firebase Cloud Messaging,我使用FCM通过我的php服务器发送Android和iOS应用程序的通知。只是因为不同平台需要不同的负载,现在我面临一个大问题 现在我的有效负载结构如下所示 "registration_id":[all my firebase token here] //***here just for iOS "notification":{ "title":"Match update", "body":"Arsenal goal in added time, score is now 3

我使用FCM通过我的php服务器发送Android和iOS应用程序的通知。只是因为不同平台需要不同的负载,现在我面临一个大问题

现在我的有效负载结构如下所示

"registration_id":[all my firebase token here]
 //***here just for iOS
 "notification":{
    "title":"Match update",
    "body":"Arsenal goal in added time, score is now 3-0"
    "sound" : "default"
    "priority" : 'high'
    "content_available" = true
 }
 //***here I need this for Android
"data":{
   "title":"Match update",
   "body":"Arsenal goal in added time, score is now 3-0"
   "id": "my_id"
    //other data I need in android
}
因此,通过发送有效负载,我实际上可以同时在iOS和Android中收到通知。这很好,但是

真正的问题从这里开始。

在android中,我没有应用程序扫描
通知
字段,我想在通知到达android设备时从“数据”字段开始处理我的应用程序。虽然我没有在“通知”中获取数据,但应用程序似乎会自动为我处理“通知”数据

但是,如果我没有在上面的有效负载中包含“通知”字段,Android部分将按照我想要的方式运行,但是在iOS中,我根本无法获得通知

在查看了本文中提到的平台覆盖后,我修改了我的有效载荷,如下所示:

"registration_id":[all my firebase token here]
"android":{
  "data":{
        "title":"Match update",
        "body":"Arsenal goal in added time, score is now 3-0"
    }
}
"apns":{
   "payload":{
            "aps":{
               "alert":{
                  "title":"Hello",
                  "body":"Please confirm your availability"
               }
            "sound" : "default"
            "priority" : 'high'
            "content_available" = true
            }
}
但是有了上面的有效负载结构,我的Android和iOS都无法收到任何通知

注意:我的Android和iOS应用程序都可以从Firebase控制台获得通知

所以我的问题是:如何将不同结构的有效载荷发送到不同的平台来解决这种困境

该页面中的示例消息如下所示:

{
  "message":{
     "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
     "notification":{
       "title":"Match update",
       "body":"Arsenal goal in added time, score is now 3-0"
     },
     "android":{
       "ttl":"86400s",
       "notification"{
         "click_action":"OPEN_ACTIVITY_1"
       }
     },
     "apns": {
       "headers": {
         "apns-priority": "5",
       },
       "payload": {
         "aps": {
           "category": "NEW_MESSAGE_CATEGORY"
         }
       }
     },
     "webpush":{
       "headers":{
         "TTL":"86400"
       }
     }
   }
 }

您的JSON似乎根本不是这样构造的。尝试复制示例结构并从那里开始工作,注意不同元素的嵌套。

打两个电话?@YvesLeBorg我不能,因为所有ios和android fcm令牌都在同一个数组中
注册id
不是fcm v1的密钥。目前,您可以使用
令牌
键发送到单个设备,使用
主题
键发送到主题,或使用
条件
发送到主题条件。有关更多信息和完整的令牌列表,请参阅。因此,在本例中,我需要一个for循环来为数组中的所有令牌调用firebase API 1乘1??这是一个选项。也可以使用主题。或者您可以使用批处理请求,它使用类似于的表示法。我们正在努力将批处理符号合并到FCM文档中。是否可以对android和ios使用两种不同的
标题
正文