在多个设备上发送推送通知
Posted
技术标签:
【中文标题】在多个设备上发送推送通知【英文标题】:Sending Push Notification on multiple devices 【发布时间】:2013-06-10 06:29:57 【问题描述】:我正在尝试按照本教程在我的 android 应用上制作推送通知
http://www.androidhive.info/2012/10/android-push-notifications-using-google-cloud-messaging-gcm-php-and-mysql/
我已经完成了本教程,但我的问题是。它只会一一发送通知。我需要发送一次通知给所有 gcm_id 或注册的 id。
有人已经解决了这个问题吗?
这是我的 index.php
<!--
To change this template, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function()
);
function sendPushNotification(id)
var data = $('form#'+id).serialize();
$('form#'+id).unbind('submit');
$.ajax(
url: "send_message.php",
type: 'GET',
data: data,
beforeSend: function()
,
success: function(data, textStatus, xhr)
$('.txt_message').val("");
,
error: function(xhr, textStatus, errorThrown)
);
return false;
</script>
<style type="text/css">
.container
width: 950px;
margin: 0 auto;
padding: 0;
h1
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
font-size: 24px;
color: #777;
div.clear
clear: both;
ul.devices
margin: 0;
padding: 0;
ul.devices li
float: left;
list-style: none;
border: 1px solid #dedede;
padding: 10px;
margin: 0 15px 25px 0;
border-radius: 3px;
-webkit-box-shadow: 0 1px 5px rgba(0, 0, 0, 0.35);
-moz-box-shadow: 0 1px 5px rgba(0, 0, 0, 0.35);
box-shadow: 0 1px 5px rgba(0, 0, 0, 0.35);
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
color: #555;
ul.devices li label, ul.devices li span
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
font-size: 12px;
font-style: normal;
font-variant: normal;
font-weight: bold;
color: #393939;
display: block;
float: left;
ul.devices li label
height: 25px;
width: 50px;
ul.devices li textarea
float: left;
resize: none;
ul.devices li .send_btn
background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#0096FF), to(#005DFF));
background: -webkit-linear-gradient(0% 0%, 0% 100%, from(#0096FF), to(#005DFF));
background: -moz-linear-gradient(center top, #0096FF, #005DFF);
background: linear-gradient(#0096FF, #005DFF);
text-shadow: 0 1px 0 rgba(0, 0, 0, 0.3);
border-radius: 3px;
color: #fff;
</style>
</head>
<body>
<?php
include_once 'db_functions.php';
$db = new DB_Functions();
$users = $db->getAllUsers();
if ($users != false)
$no_of_users = mysql_num_rows($users);
else
$no_of_users = 0;
?>
<div class="container">
<h1>No of Devices Registered: <?php echo $no_of_users; ?></h1>
<hr/>
<ul class="devices">
<?php
if ($no_of_users > 0)
?>
<?php
while ($row = mysql_fetch_array($users))
?>
<li>
<form id="<?php echo $row["id"] ?>" name="" method="post" onsubmit="return sendPushNotification('<?php echo $row["id"] ?>')">
<label>Name: </label> <span><?php echo $row["name"] ?></span>
<div class="clear"></div>
<label>Email:</label> <span><?php echo $row["email"] ?></span>
<div class="clear"></div>
<div class="send_container">
<textarea rows="3" name="message" cols="25" class="txt_message" placeholder="Type message here"></textarea>
<input type="hidden" name="regId" value="<?php echo $row["gcm_regid"] ?>"/>
<input type="submit" class="send_btn" value="Send" onclick=""/>
</div>
</form>
</li>
<?php
else ?>
<li>
No Users Registered Yet!
</li>
<?php ?>
</ul>
</div>
</body>
</html>
send_message.php
<?php
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
if (isset($_GET["regId"]) && isset($_GET["message"]))
$regId = $_GET["regId"];
$message = $_GET["message"];
include_once './GCM.php';
$gcm = new GCM();
$registatoin_ids = array($regId);
$message = array("price" => $message);
$result = $gcm->send_notification($registatoin_ids, $message);
echo $result;
?>
GCM.php
<?php
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
* Description of GCM
*
* @author Ravi Tamada
*/
class GCM
//put your code here
// constructor
function __construct()
/**
* Sending Push Notification
*/
public function send_notification($registatoin_ids, $message)
// include config
include_once './config.php';
// Set POST variables
$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;
?>
【问题讨论】:
【参考方案1】:我在 PHP 中没有 exp,但我可以告诉你可以修改代码的地方。
制作一个 id 数组并放入registration_ids
。
最后,您必须将所有 id 放入registatoin_ids
$fields = array(
'registration_ids' => $registatoin_ids, // HERE IT IS
'data' => $message,
);
转入send_notification($registatoin_ids, $message)
。
目前它只有一个 reg_id,因此它正在向单个设备发送通知。
【讨论】:
我也是,我没有使用php的exp。我已经多次更改此行,但仍然没有得到正确的代码。 您可以使用$registatoin_ids = array( "123", "456" );
向您展示静态数组的代码...您可以查看***.com/questions/13599110/…
我将此代码更改为数组,它可以工作 $registatoin_ids = array($regId);
不错!我很高兴为您提供帮助... :)
Ravi Tamada 是谁?你在更新什么? @user1225296以上是关于在多个设备上发送推送通知的主要内容,如果未能解决你的问题,请参考以下文章