更新:GCM已弃用,使用FCM
如何在PHP后端集成新的谷歌云消息传递?
更新:GCM已弃用,使用FCM
如何在PHP后端集成新的谷歌云消息传递?
当前回答
你也可以试试下面这段代码:
<?php
define("GOOGLE_API_KEY", "AIzaSyCJiVkatisdQ44rEM353PFGbia29mBVscA");
define("GOOGLE_GCM_URL", "https://android.googleapis.com/gcm/send");
function send_gcm_notify($reg_id, $message) {
$fields = array(
'registration_ids' => array( $reg_id ),
'data' => array( "message" => $message ),
);
$headers = array(
'Authorization: key=' . GOOGLE_API_KEY,
'Content-Type: application/json'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, GOOGLE_GCM_URL);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
$result = curl_exec($ch);
if ($result === FALSE) {
die('Problem occurred: ' . curl_error($ch));
}
curl_close($ch);
echo $result;
}
$reg_id = "APA91bHuSGES.....nn5pWrrSz0dV63pg";
$msg = "Google Cloud Messaging working well";
send_gcm_notify($reg_id, $msg);
其他回答
这很容易做到。Elad Nava放在这里的页面上的cURL代码是有效的。Elad评论了他收到的错误。
描述在为该收件人处理消息时发生的错误的字符串。可能的值与上表中记录的值相同,再加上“Unavailable”(意味着GCM服务器繁忙,无法为特定的收件人处理消息,因此可以重试)。
我已经得到了一个服务设置,似乎已经工作(ish),到目前为止,我已经回来的都是不可用的回报从谷歌。这种情况很可能很快就会改变。
要回答这个问题,请使用PHP,确保Zend框架在您的include路径中,并使用以下代码:
<?php
ini_set('display_errors',1);
include"Zend/Loader/Autoloader.php";
Zend_Loader_Autoloader::getInstance();
$url = 'https://android.googleapis.com/gcm/send';
$serverApiKey = "YOUR API KEY AS GENERATED IN API CONSOLE";
$reg = "DEVICE REGISTRATION ID";
$data = array(
'registration_ids' => array($reg),
'data' => array('yourname' => 'Joe Bloggs')
);
print(json_encode($data));
$client = new Zend_Http_Client($url);
$client->setMethod('POST');
$client->setHeaders(array("Content-Type" => "application/json", "Authorization" => "key=" . $serverApiKey));
$client->setRawData(json_encode($data));
$request = $client->request('POST');
$body = $request->getBody();
$headers = $request->getHeaders();
print("<xmp>");
var_dump($body);
var_dump($headers);
结果出来了。一个在Zend Framework PHP中使用google新GCM的工作示例(很快就会工作)。
在搜索了很长一段时间后,我终于能够弄清楚我到底需要什么,连接到GCM使用PHP作为服务器端脚本语言,下面的教程将让我们清楚地了解如何设置我们需要开始使用GCM的一切
Android推送通知使用谷歌云消息(GCM), PHP和MySQL
这是我从CodeMonkeysRU分叉出来的一个库。
我分叉的原因是因为谷歌需要指数回退。我使用redis服务器将消息排队,并在设定的时间后重新发送。
我还将其更新为支持iOS。
https://github.com/stevetauber/php-gcm-queue
<?php
function sendMessageToPhone($deviceToken, $collapseKey, $messageText, $yourKey) {
echo "DeviceToken:".$deviceToken."Key:".$collapseKey."Message:".$messageText
."API Key:".$yourKey."Response"."<br/>";
$headers = array('Authorization:key=' . $yourKey);
$data = array(
'registration_id' => $deviceToken,
'collapse_key' => $collapseKey,
'data.message' => $messageText);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://android.googleapis.com/gcm/send");
if ($headers)
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($ch);
var_dump($response);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (curl_errno($ch)) {
return false;
}
if ($httpCode != 200) {
return false;
}
curl_close($ch);
return $response;
}
$yourKey = "YOURKEY";
$deviceToken = "REGISTERED_ID";
$collapseKey = "COLLAPSE_KEY";
$messageText = "MESSAGE";
echo sendMessageToPhone($deviceToken, $collapseKey, $messageText, $yourKey);
?>
在上面的脚本中只需更改:
“YOURKEY”到API键到API控制台的服务器键。 "REGISTERED_ID"与您设备的注册ID "COLLAPSE_KEY"和你需要的键 "MESSAGE"包含您想要发送的消息
让我知道,如果你有任何问题在这个我能够获得通知成功使用相同的脚本。
使用这个
function pnstest(){
$data = array('post_id'=>'12345','title'=>'A Blog post', 'message' =>'test msg');
$url = 'https://fcm.googleapis.com/fcm/send';
$server_key = 'AIzaSyDVpDdS7EyNgMUpoZV6sI2p-cG';
$target ='fO3JGJw4CXI:APA91bFKvHv8wzZ05w2JQSor6D8lFvEGE_jHZGDAKzFmKWc73LABnumtRosWuJx--I4SoyF1XQ4w01P77MKft33grAPhA8g-wuBPZTgmgttaC9U4S3uCHjdDn5c3YHAnBF3H';
$fields = array();
$fields['data'] = $data;
if(is_array($target)){
$fields['registration_ids'] = $target;
}else{
$fields['to'] = $target;
}
//header with content_type api key
$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));
}
curl_close($ch);
return $result;
}