FCM Push for iOS 错误 InvalidRegistration

Posted

技术标签:

【中文标题】FCM Push for iOS 错误 InvalidRegistration【英文标题】:FCM Push for iOS error InvalidRegistration 【发布时间】:2019-08-27 13:11:56 【问题描述】:

我正在尝试通过 php 脚本通过 Firebase Cloud Messagingios 应用发送推送通知。

目前我正在使用以下测试PHP 脚本。

$url = "https://fcm.googleapis.com/fcm/send";
$token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
$serverKey = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$title = "Title";
$body = "Body of the message";
$notification = array('title' =>$title , 'text' => $body, 'sound' => 'default', 'badge' => '1');
$arrayToSend = array('to' => $token, 'notification' => $notification,'priority'=>'high');
$json = json_encode($arrayToSend);
$headers = array();
$headers[] = 'Content-Type: application/json';
$headers[] = 'Authorization: key='. $serverKey;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST,"POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
//Send the request
$response = curl_exec($ch);
//Close request
if ($response === FALSE) 
    die('FCM Send Error: ' . curl_error($ch));

curl_close($ch);

但是,当我尝试通过浏览器运行脚本时收到以下错误消息。

"multicast_id":5417898622260949101,"success":0,"failure":1,"canonical_ids":0,"results":["error":"InvalidRegistration"]

但是当我从 FCM 控制台使用相同的设备令牌时,它可以正常工作。

我在互联网上尝试了许多 PHP 脚本,但最终得到相同的结果,这会是什么问题?

任何帮助将不胜感激。

【问题讨论】:

根据文档 (firebase.google.com/docs/cloud-messaging/…),“InvalidRegistration”指的是格式错误的值。您能否确保注册令牌的值中没有其他字符或空格? 还请注意,您当前使用的是旧版 HTTP 协议 - 如果可以,请考虑使用 HTTP v1 协议 (firebase.google.com/docs/reference/fcm/rest/v1/…) 来实现它,这将确保您的脚本保持未来的证明. @jeromegamez 我正在使用字符串传递令牌,肯定没有任何其他字符。但是我使用 trim 来确保在创建数组的最后一步没有附加额外的空格。关于第二点,我会尝试并告诉你。 【参考方案1】:

您使用的令牌似乎不是 FCM 的有效注册令牌,因此出现 InvalidRegistration 错误。

【讨论】:

当我在 FCM 控制台中使用相同的令牌时,它可以工作。所以令牌应该没问题。【参考方案2】:
$apiKey = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
$title = 'Title'; 
$message = 'hello message';
$notification =[ 
                    "text" => "Test",
                    'badge' => "1",
                    'sound' => 'shutter.mp3',
                    "android_channel_id"=>"test01",
                    'body'=>$message,
                    'icon'=>'notif_icn',
                    'title'=>$title,
                    'priority'=>'high',
                    'vibrate'=> 1,
                    'alert'=> $message
                ];

$msg = [
            'message'=> $message,
            'title'=> $title
        ];

$fields =[
            "content_available" => true,
            "priority" => "high",
            'registration_ids'=> $deviceToken,
            'data'=> $msg
        ];

$headers = array('Authorization: key=' . $apiKey,'Content-Type: application/json');    
if ($headers)
    $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_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
    $response = curl_exec($ch);
    if ($response === FALSE) 
        die('FCM Send Error: ' . curl_error($ch));
    
    curl_close($ch);

【讨论】:

给了我同样的错误,"multicast_id":9134981740272359930,"success":0,"failure":1,"canonical_ids":0,"results":["error":"无效注册"]

以上是关于FCM Push for iOS 错误 InvalidRegistration的主要内容,如果未能解决你的问题,请参考以下文章

Appcelerator iOS Rich Push Notification 在通过 FCM 发送时不显示图像

phonegap-plugin-push 获取不是 FCM 令牌的 APN 令牌

ionic iOS FCM 在开发模式下工作,但在生产模式下不工作

通过 FCM 发送时未收到推送通知,但在 IOS 上通过 APN 发送时收到

Expo Push Notification 无法检索收件人应用程序的 FCM 服务器密钥。确保您已按照指示提供了服务器密钥……

如何同时使用“web-push”和“fcm-push”节点包?