始终从 GCM 中的 php(服务器端)获取无效注册
Always get the invalid registration from the php (server side) in GCM
{"multicast_id":7955245346327511217,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"InvalidRegistration"}]}
我的 GCM 编程总是 return 这件事。
我已在 android 清单中正确输入项目 ID。
我已经为连接 API 提供了正确的 google API。
这是我的 php 代码。
我已将 api_key 存储在另一个文件中,并将其包含在其中。
谁能告诉我为什么会出现此错误。
$url = 'https://android.googleapis.com/gcm/send';
$fields = array(
'registration_ids' => $registatoinids,
'data' => $message,
);
$headers = array(
'Authorization: key='. API_KEY,
'Content-Type: application/json'
);
$cn = curl_init();
curl_setopt($cn, CURLOPT_URL, $url);
curl_setopt($cn, CURLOPT_POST, true);
curl_setopt($cn, CURLOPT_HTTPHEADER, $headers);
curl_setopt($cn, CURLOPT_RETURNTRANSFER, true);
curl_setopt($cn, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($cn, CURLOPT_POSTFIELDS, json_encode($fields));
$result = curl_exec($cn);
if ($result === FALSE) {
die('connection failed: ' . curl_error($cn));
}
curl_close($cn);
echo $result;
"InvalidRegistration"表示您发送的Registration id没有被注册。正确检查 API 密钥和注册 ID。
您是否在文件中为 API_KEY 定义了值?
请参阅下面的 php 文件。这对我有用。
<?php
//Generic php function to send GCM push notification
function sendMessageThroughGCM($registatoin_ids, $message) {
//Google cloud messaging GCM-API url
$url = 'https://android.googleapis.com/gcm/send';
$fields = array(
'registration_ids' => $registatoin_ids,
'data' => $message,
);
// Update your Google Cloud Messaging API Key
define("GOOGLE_API_KEY", "API_SERVER_KEY");
$headers = array(
'Authorization: key=' . GOOGLE_API_KEY,
'Content-Type: application/json'
);
$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('Curl failed: ' . curl_error($ch));
}
curl_close($ch);
echo $result;
}
?>
在此行中定义您的 API_SERVER_KEY。
define("GOOGLE_API_KEY", "API_SERVER_KEY");
参考这个网站:http://programmerguru.com/android-tutorial/how-to-send-push-notifications-using-gcm-service/
注册ID(通过$registatoinids传入)无效时返回InvalidRegistration-error,这个错误基本上与你的PHP-code或API-Key无关.
只需检查您尝试向其发送通知的设备的注册 ID,并在调用时传递(新)ID
'registration_ids' => $registatoinids
如果您的设备没有任何reg-id,只需重新注册。
请参考this section of the documentation.
首先,您应该使用 Firebase 控制台检查已删除尾随空格的注册令牌是否有效。如果向特定设备发送消息没有问题。
然后您应该检查用于在您的 database.In 中存储注册令牌的字段的大小 我的情况发生了什么 我使用 phpMyAdmin,它使用 MySQL/MariaDb database.And 我已经为 varchar 指定了 80 的长度,这导致将注册令牌截断为 80 的长度。因此,它变成了无效的。这就是我收到 'InvalidRegistration' 错误的原因。所以我将长度更改为 200,我认为这已经足够了。希望对你有帮助。
{"multicast_id":7955245346327511217,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"InvalidRegistration"}]}
我的 GCM 编程总是 return 这件事。 我已在 android 清单中正确输入项目 ID。 我已经为连接 API 提供了正确的 google API。 这是我的 php 代码。 我已将 api_key 存储在另一个文件中,并将其包含在其中。 谁能告诉我为什么会出现此错误。
$url = 'https://android.googleapis.com/gcm/send';
$fields = array(
'registration_ids' => $registatoinids,
'data' => $message,
);
$headers = array(
'Authorization: key='. API_KEY,
'Content-Type: application/json'
);
$cn = curl_init();
curl_setopt($cn, CURLOPT_URL, $url);
curl_setopt($cn, CURLOPT_POST, true);
curl_setopt($cn, CURLOPT_HTTPHEADER, $headers);
curl_setopt($cn, CURLOPT_RETURNTRANSFER, true);
curl_setopt($cn, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($cn, CURLOPT_POSTFIELDS, json_encode($fields));
$result = curl_exec($cn);
if ($result === FALSE) {
die('connection failed: ' . curl_error($cn));
}
curl_close($cn);
echo $result;
"InvalidRegistration"表示您发送的Registration id没有被注册。正确检查 API 密钥和注册 ID。
您是否在文件中为 API_KEY 定义了值? 请参阅下面的 php 文件。这对我有用。
<?php
//Generic php function to send GCM push notification
function sendMessageThroughGCM($registatoin_ids, $message) {
//Google cloud messaging GCM-API url
$url = 'https://android.googleapis.com/gcm/send';
$fields = array(
'registration_ids' => $registatoin_ids,
'data' => $message,
);
// Update your Google Cloud Messaging API Key
define("GOOGLE_API_KEY", "API_SERVER_KEY");
$headers = array(
'Authorization: key=' . GOOGLE_API_KEY,
'Content-Type: application/json'
);
$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('Curl failed: ' . curl_error($ch));
}
curl_close($ch);
echo $result;
}
?>
在此行中定义您的 API_SERVER_KEY。
define("GOOGLE_API_KEY", "API_SERVER_KEY");
参考这个网站:http://programmerguru.com/android-tutorial/how-to-send-push-notifications-using-gcm-service/
注册ID(通过$registatoinids传入)无效时返回InvalidRegistration-error,这个错误基本上与你的PHP-code或API-Key无关.
只需检查您尝试向其发送通知的设备的注册 ID,并在调用时传递(新)ID
'registration_ids' => $registatoinids
如果您的设备没有任何reg-id,只需重新注册。 请参考this section of the documentation.
首先,您应该使用 Firebase 控制台检查已删除尾随空格的注册令牌是否有效。如果向特定设备发送消息没有问题。
然后您应该检查用于在您的 database.In 中存储注册令牌的字段的大小 我的情况发生了什么 我使用 phpMyAdmin,它使用 MySQL/MariaDb database.And 我已经为 varchar 指定了 80 的长度,这导致将注册令牌截断为 80 的长度。因此,它变成了无效的。这就是我收到 'InvalidRegistration' 错误的原因。所以我将长度更改为 200,我认为这已经足够了。希望对你有帮助。