如何通过一个" get"传递多个值在PHP?

时间:2014-06-29 00:02:00

标签: php android google-cloud-messaging

我正在尝试为Android实现推送通知。我想从服务器向多个电话发送相同的消息。为此,我需要通过“获取”发送超过一个注册密钥“regId”。如果你看一下send_message.php的底部我有$regId = $_GET["regId"];我只想传递一个以上的值。我该怎么做?

GCM.php     

class GCM {

    // 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;
  }

  }

  ?>

send_message.php

<?php
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;
}
?>

我只是尝试测试演示应用程序,我必须看看我是否可以同时发送两个设备,其值为硬编码但仍然无法正常工作。我只是想在我正确地做之前先看看它是否有效。根据我读到的关于谷歌云消息的内容,如果您使用HTTP,它应该可以发送到多个设备。任何人都知道它失败的原因?它给了我“错误”:“InvalidRegistration”。我想php代码没有问题,而是GCM。这是我试过的:

<?php

if (isset($_GET["message"])) {
    $regId = array("key1", "key2");
      $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;
}
?>

1 个答案:

答案 0 :(得分:2)

听起来您正在使用$_GET传递注册ID。

这不是一个好主意,特别是对于多个ID。

我假设您想要从Android应用中发布数据

您应该使用$_POST

执行此操作

我建议你用JSON数组对它进行编码并将其发送到你的服务器

你可以在你的应用中创建它:

JSONArray regArray = new JSONArray();
regArray.put(regIds); //array of  Ids
JSONObject json = new JSONObject();
json.put("message", message); //string
json.put("regIds", regArray);

这将创建以下JSON

看起来像是下面的事情:

{   "message":"some message here",
    "regIds": [
        "dsdfsfet366767547",
        "63567356366reygh",
        "sgdgtwetwetsdgsdg",
        "sdgsdgsdgwet24t"
    ]
}