编程语言
首页 > 编程语言> > php-尝试将数据发送到GCM时缺少MissingRegistraton错误

php-尝试将数据发送到GCM时缺少MissingRegistraton错误

作者:互联网

我已经搜索了很多,但是找不到这个问题的任何解决方案.

我正在使用PHP服务器,并尝试将PushNotifications发送到我的Android应用.但是,当我在浏览器中尝试代码时,出现以下错误:“ Error = MissingRegistration”.

这是我运行的代码:

registration_ids = array($regId);
        $message = array(
            'hangMessage' => $message,
            'userId' => $user_id
            );

        $result = $gcm->send_notification($registration_ids, $message);

这是我调用的代码:

$url = "https://android.googleapis.com/gcm/send";

    $fields = array(
        'registration_ids' => $regisration_ids,
        'data' => $message,
        );

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

    //Open connection
    $ch = curl_init();

    //Set the url, number of POST vars, POST data
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    //Disabling SSL Certificate support temporarly
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));

    //Execute psot
    $result = curl_exec($ch);
    if($result == false){
        die('Curl failed: ' . Curl_error($ch));
    }

    //Close connection
    curl_close($ch);
    echo $result;

根据Google API控制台报告系统,请求甚至不会一直发送到服务器.

任何人都知道什么地方可能出问题了吗?

解决方法:

您的请求应如下所示:

Content-Type:application/json
Authorization:key=AIzaSyB-1uEai2WiUapxCs2Q0GZYzPu7Udno5aA

{
  "registration_ids" : ["APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx..."],
  "data" : {
    ...
  },
}

因此,我认为错误可能在以下行中:

'Content-Type= application/json'

尝试将=更改为:.

由于内容类型标头无效,因此GCM服务器可以为内容类型采用默认值(可能是application / x-www-form-urlencoded; charset = UTF-8,在这种情况下,注册ID需要使用其他密钥,这将解释MissingRegistration错误).

顺便说一句,您收到MissingRegistraton错误的事实意味着该请求确实到达了GCM服务器. GCM请求未记录在Google API控制台报告系统中.

标签:push-notification,google-cloud-messaging,php,android
来源: https://codeday.me/bug/20191123/2066573.html