在多个设备上发送推送通知

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

以上是关于在多个设备上发送推送通知的主要内容,如果未能解决你的问题,请参考以下文章

如何向多个设备(iOS)发送推送通知?

推送通知未在 iPhone 应用程序中的多个设备上传递?

如何在具有多个登录用户的 iOS 设备上处理推送通知?

向多个设备发送 iOS 推送通知

如何将 Chrome 推送通知发送到多个设备

从 php 服务器向 ios 设备发送多个推送通知