11

迁移到 Firebase 后,我使用 firebase 控制台测试了发送通知,它工作正常,但我需要在特定时间发送每日通知,所以我没有使用 firebase 控制台,而是使用我以前的 cron 作业每天发送通知。我改为https://android.googleapis.com/gcm/sendhttps://fcm.googleapis.com/fcm/send我的设备没有收到任何通知。

有没有办法解决这个问题?还是我错过了什么?我的 cron 工作在我仍在使用 GCM 的设备上运行良好。

这是我的代码

function sendNotificationFCM($apiKey, $registrationIDs, $messageText,$id) {


    $headers = array(
            'Content-Type:application/json',
            'Authorization:key=' . $apiKey
    );

    $message = array(
            'registration_ids' => $registrationIDs,
            'data' => array(
                    "message" => $messageText,
                    "id" => $id,
            ),
    );


    $ch = curl_init();

    curl_setopt_array($ch, array(
            CURLOPT_URL => 'https://fcm.googleapis.com/fcm/send',
            CURLOPT_HTTPHEADER => $headers,
            CURLOPT_POST => true,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_POSTFIELDS => json_encode($message)
    ));

    $response = curl_exec($ch);
    curl_close($ch);

    return $response;
}
4

4 回答 4

12

notification我在我的 json 中添加了对象。我发现在我的remoteMessage.getNotification().getBody()它返回 null 这就是为什么它没有收到我的 cron 发送的任何通知。

编辑

这是我的 json 对象

$message = array(
            'registration_ids' => $registrationIDs,
            'notification' => array(
                                    "title" => $id, 
                                    "body" => $messageText,
                                    "icon" => "name_of_icon" ),
            'data' => array(
                    "message" => $messageText,
                    "id" => $id,
            ),
    );
于 2016-06-02T07:32:11.150 回答
9

除了将网址更改为以下内容:

https://fcm.googleapis.com/fcm/send

您还必须更改发送请求数据的方式:

 Content-Type:application/json
 Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA

 {
   "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...", // "to" replaces "registration_ids" of gcm in fcm
   "data" : {
   ...
  },
}

查看此完整指南

于 2016-05-26T11:42:45.217 回答
1

我无法直接在所选答案中发表评论。考虑到 json 消息会根据您希望/需要在接收方操作系统(android/ios)中接收的内容而变化。

例如,当应用程序在后台时,android 获取通知,您需要在请求中添加数据json。

对于 iOS,不需要数据键,但您必须将通知键连同isContentAvailble标志设置为 true 并将优先级设置为高。

在选择的有效答案中,您使用registration_ids键应该仅在您将通知发送到多个设备时使用,也许您应该查看主题通知。

于 2018-07-04T21:27:37.783 回答
-2

尝试使用这个:)

FCM 的 Python 客户端

于 2016-06-16T12:30:07.720 回答