通过cURL / PHP发送的设备上未收到Firebase通知

我有一个iOS应用程序,它是在应用程序商店生活。 我可以将推送通知发送到安装了该应用程序的iOS设备,但只有当我从Firebase控制台发送推送通知时。

当我尝试通过cURL请求发送推送通知时,来自服务器的响应表明我已成功,但是设备上未收到消息。 我已经尝试了多播和单个收件人有效载荷。

我必须错过更基本的东西,但我看不到它。

这是我的PHP代码:

<?php // API access key from Google API's Console define( 'API_ACCESS_KEY', 'AI*****4LPGkx8xtDG2tBl*****7KWJfmp1szcA' ); $registrationIds = array( $_GET['id'] ); // prep the bundle $msg = array ( 'message' => 'here is a message. message', 'title' => 'This is a title. title' ); $fields = array ( 'to' => "cUxd-iTVVWo:APA*****kQTuqJ5RREKhhlJjm27NCuVfUn5APg3lBFqh-YWjgx*****iOpAQeLB14CzM2YTwIJo_75jzCmbFLKj0_zpKSHvAEbmJz*****BBezGJIng-N4H-cAD6ahY7mQNYZtEJLAIE", 'data' => $msg ); $headers = array ( 'Authorization: key=' . API_ACCESS_KEY, 'Content-Type: application/json' ); $ch = curl_init(); curl_setopt( $ch,CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send' ); curl_setopt( $ch,CURLOPT_POST, true ); curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers ); curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, false ); curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode( $fields ) ); $result = curl_exec($ch ); curl_close( $ch ); echo $result; 

这是运行这个代码时得到的响应:

{ “multicast_id”:5814921248239922706, “成功”:1, “失败”:0, “canonical_ids”:0 “结果”:[{ “MESSAGE_ID”: “0:1476193002715692%a4ddee3cf9fd7ecd”}]}

有两个问题:

  1. 我需要在有效负载中包含notification部分而不是data
  2. 不知何故,有效载荷未被PHP正确格式化。

最后,我使用PHP函数shell_exec()通过SSH进行cURL请求。 这不是理想的,但它完成了工作。

示例代码:

 shell_exec('curl -X POST --header "Authorization: key=<key here>" --header "Content-Type: application/json" https://fcm.googleapis.com/fcm/send -d "{\"to\":\"'.$to.'\",\"priority\":\"high\",\"notification\":{\"body\": \"'.stripslashes($message).'\"}}"'); 

从Firebase 文档中,您可以select在消息有效内容中使用数据通知 。 但是,当您使用数据时 ,您有责任自行处理收到的通知。 换句话说,它不会被直接发送到您的应用程序客户端。 在Android中,您可以在didReceiveRemoteNotification中处理它对于iosonMessageReceived()

但是,如果您在有效内容中使用通知 ,则Firebase将立即将消息发送到您的客户端应用程序。

这就是为什么即使你的curl请求告诉你它已经成功发出请求,你也不会收到这个消息(如果你使用了数据的话 )。

尝试添加{priority:high}

 $fields = array ( 'to' => "cUxd-iTVVWo:APA*****kQTuqJ5RREKhhlJjm27NCuVfUn5APg3lBFqh-YWjgx*****iOpAQeLB14CzM2YTwIJo_75jzCmbFLKj0_zpKSHvAEbmJz*****BBezGJIng-N4H-cAD6ahY7mQNYZtEJLAIE", 'data' => $msg, 'priority' =>'high' );