Php android的FCM通知

Php android的FCM通知,php,android,firebase,firebase-cloud-messaging,Php,Android,Firebase,Firebase Cloud Messaging,我尝试使用PHP脚本发送FCM通知,在数据库插入事件中,我尝试从FCM控制台发送通知,使用topic选项工作正常,知道我使用MainActivity.java OnCreate类中的以下代码将应用程序实例注册到某个主题“exptopic”: FirebaseMessaging.getInstance().subscribeToTopic("exptopic"); 现在,PHP脚本如下所示: function sendMessage($data,$target){ //FCM api U

我尝试使用PHP脚本发送FCM通知,在数据库插入事件中,我尝试从FCM控制台发送通知,使用topic选项工作正常,知道我使用MainActivity.java OnCreate类中的以下代码将应用程序实例注册到某个主题“exptopic”:

FirebaseMessaging.getInstance().subscribeToTopic("exptopic");
现在,PHP脚本如下所示:

function sendMessage($data,$target){
    //FCM api URL
    $url = 'https://fcm.googleapis.com/fcm/send';

    //api_key available in Firebase console -> project settings -> cloud messaging -> server key

    $server_key = "API_KEY";//my api key

    $fields = array();
    $fields['data'] = array('message'=>$data);
    $fields['to'] = $target;

    $headers = array('content-type:application/json',
            'Authorization:key='.$server_key);

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
    $result = curl_exec($ch);

    if($result === FALSE){
        die('FCM Send error: '.curl_error($ch));
        echo 'notification not sent';
    }
    curl_close($ch);
    echo $result;
    return $result;
}
显然,
$target=“exptopic”
当我运行snedMessage函数时,它返回以下结果:

{"multicast_id":6779996340041741184,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"InvalidRegistration"}]}

有人能帮忙吗?

您缺少数据中的
优先级
字段。试试这个:

$fields["priority"] = "high" //This is required
编辑:

我在这个机构取得了成功。也许可以尝试一下:

<?php

// Get cURL resource
$ch = curl_init();

// Set url
curl_setopt($ch, CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send');

// Set method
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');

// Set options
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// Set headers
curl_setopt($ch, CURLOPT_HTTPHEADER, [
  "Authorization: key=API_KEY",
  "Content-Type: application/json",
 ]
);
// Create body
$json_array = [
        "notification" => [
            "title" => "TEST",
            "sound" => "default",
            "body" => $data
        ],
        "to" => $target,
        "priority" => "high"
    ]; 
$body = json_encode($json_array);

// Set body
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);

// Send the request & save response to $resp
$resp = curl_exec($ch);

if(!$resp) {
  die('Error: "' . curl_error($ch) . '" - Code: ' . curl_errno($ch));
} else {
  echo "Response HTTP Status Code : " . curl_getinfo($ch,     CURLINFO_HTTP_CODE);
  echo "\nResponse HTTP Body : " . $resp;
}

// Close request to clear up some resources
curl_close($ch);

基于,
to
字段应该是
/topics/exptopic

MySQL似乎与此问题无关,标记已删除。感谢您的回复,但它返回了相同的错误,我认为这不是问题如果此答案有用,请单击其左侧的向上投票按钮。如果它回答了您的问题,请单击复选标记接受它。这样别人就知道你得到了(足够的)帮助。