在 PHP 中发送请求 Google Cloud Messaging 时出错
Posted
技术标签:
【中文标题】在 PHP 中发送请求 Google Cloud Messaging 时出错【英文标题】:Error in sending request Google Cloud Messaging in PHP 【发布时间】:2016-04-25 16:28:57 【问题描述】:我正在尝试使用 Google Clouding Messaging API 与 android 应用程序集成。对于后端,我使用的是 Laravel 5.2。我在 Google API 中生成了 3 个 api 密钥。这些是服务器 API 密钥、Android API 密钥和浏览器 API 密钥。我引用了这个tutorial。
这是我从服务器到 GCM 服务器的推送请求:
private function sendNotification($registatoin_ids,$message)
$url = 'https://android.googleapis.com/gcm/send';
$fields = array(
'registration_ids' => $registatoin_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_POST, true);
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 post
$result = curl_exec($ch);
if ($result === FALSE)
die('Curl failed: ' . curl_error($ch));
// Close connection
curl_close($ch);
echo $result;
function register(Request $request)
$name = $request->name;
$email = $request->email;
$gcm_regid = $request->reg_ids;
$registatoin_ids = array($gcm_regid);
$message = array("product" => "shirt");
$result = $this->sendNotification($registatoin_ids,$message);
echo $result;
我调用了注册函数。 email
、name
和 reg_ids
是模拟值。我刚刚分别通过了myemail
、myname
和随机字符串。注册功能是控制器的动作。对于GOOGLE_API_KEY
,我传递了服务器 api 密钥。但是当我请求时,它给了我以下错误。
"multicast_id":5065519232839143946,"success":0,"failure":1,"canonical_ids":0,"results":["error":"InvalidRegistration"]
我的推送请求正确吗?我可以将任何唯一值传递给reg_ids
。另外,我的GOOGLE_API_KEY
应该是Android、服务器还是浏览器的key?
【问题讨论】:
【参考方案1】:您收到的错误是401 HTTP status code,这意味着用于发送邮件的发件人帐户无法通过身份验证。以下是可能的原因:
HTTP 请求中缺少授权标头或语法无效。
作为密钥发送的项目编号无效。
密钥有效,但 GCM 服务已禁用。
请求来自未在服务器密钥 IP 中列入白名单的服务器。
API 密钥无效。
检查您在 Authentication 标头中发送的令牌是否是与您的项目关联的正确 API 密钥。详情请见Checking the validity of an API Key。
还可以尝试检查这个相关的 SO 问题 17969191 和 11242743 了解更多信息。
【讨论】:
以上是关于在 PHP 中发送请求 Google Cloud Messaging 时出错的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Google Cloud Functions (nodeJS) 发送 HTTP 请求
Google Cloud Vision - 如何使用 Node.js 发送请求属性
发送到 Google Cloud Functions onCall 请求的数据应该采用啥格式?
如何在 Java 中执行简单的 Google Cloud Trace 请求