字段"to"必须是JSON字符串[Firebase]

nat*_*iyu 5 php android json firebase firebase-cloud-messaging

我正在尝试使用cron作业发送通知.我从GCM迁移到FCM.在我的服务器端,我改变了https://android.googleapis.com/gcm/send to https://fcm.googleapis.com/fcm/send,也更新了如何请求数据变化registration_idsto.检查json传递它是一个有效的json但我有一个错误Field "to" must be a JSON string.反正有没有解决这个问题?

这是我的代码

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


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

    $message = array(
            'to' => $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;
}
Run Code Online (Sandbox Code Playgroud)

jay*_*i93 10

尝试明确转换$registrationIDsstring.

$message = array(
        'to' => (string)$registrationIDs,
        'data' => array(
                "message" => $messageText,
                "id" => $id,
        ),
);
Run Code Online (Sandbox Code Playgroud)

编辑答案

'to'参数需要string- 这是消息的接收者.

$registrationIDs可通过单独的参数(如字符串数组),以'registration_ids'

将代码编辑为以下内容:

$recipient = "YOUR_MESSAGE_RECIPIENT";

$message = array(
        'to' => $recipient,
        'registration_ids' => $registrationIDs,
        'data' => array(
                "message" => $messageText,
                "id" => $id,
        ),
);
Run Code Online (Sandbox Code Playgroud)

哪里$recipient

注册令牌,通知密钥或主题.

请参阅: Firebase云消息传递HTTP协议