Android phonegap发送推送通知使用谷歌云消息使用php


Android phonegap send push notification using Google Cloud Messaging using php

我已经在cordova 3.4中开发了android应用程序,现在我想获得自动通知到他们的手机。对于这一点,我指的网站如下

  • http://devgirl.org/2013/07/17/tutorial-implement-push-notifications-in-your-phonegap-application/
  • http://devgirl.org/2012/10/25/tutorial-android-push-notifications-with-phonegap/
  • https://github.com/hollyschinsky/PushNotificationSample30/tree/master/platforms/android

我阅读了上面所有的链接,然后做了他们告诉我的所有事情,比如在谷歌云消息上创建项目,获得项目id,创建服务器密钥(在文本框中我给出了我的私有服务器IP),然后API密钥,我也有注册id设备,我用php编写代码发送推送通知到我的设备,但它给我"未经授权的错误404"

我的代码如下

    define( 'API_ACCESS_KEY', 'my api key' );
    //$registrationIds = array( $_GET['id'] );
    $registrationIds = array($id);
    //var_dump($registrationIds);die;
    //prep the bundle
    $msg = array
    (
            'message'       => 'New Jobs is updated',
            'title'         => 'get the job in cad',
            'subtitle'      => 'get the job in cad',
            'tickerText'    => 'Ticker text here...Ticker text here...Ticker text here',
            'vibrate'   => 1,
            'sound'     => 1
    );
    $fields = array
    (
            'registration_ids'  => $registrationIds,
            'data'              => $msg
    );
    $headers = array
    (
            'Authorization: key=' . API_ACCESS_KEY,
            'Content-Type: application/json'
    );
    $ch = curl_init();
    curl_setopt( $ch,CURLOPT_URL, 'https://android.googleapis.com/gcm/send' );
    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 );
    curl_close( $ch );
    echo $result;

我只是点击url并发送设备的注册id到我的php页面,但这个页面给我错误未经授权的错误401

Que.1。是否可以从托管在私人服务器上的php发送推送通知?

。2设备注册id强制发送推送通知给那些用户,他们安装的应用程序?

请任何人帮助我如何解决这个错误,如果有人有另一个解决方案,然后告诉我。我从昨天开始就努力了,但没有达到我的目标,所以请帮助我。

这是GCM代码,它与我的设备正常工作,虽然它在CI框架中,但希望你能使用它。必须为推送添加device_id以及您将获得的站点密码短语。试试吧。

function sendNotification($device_id,$message) {
        /*echo $device_id;
        echo "<br>";
        echo $message;*/
        // note: you have to specify API key in config before
        $this->load->library('gcm');
        // simple adding message. You can also add message in the data,
        // but if you specified it with setMesage() already
        // then setMessage's messages will have bigger priority
        $msg = $this->gcm->setMessage($message);
        //var_dump($message);
        // add recepient or few
        $this->gcm->addRecepient($device_id);
        //var_dump($device_id);
        // set additional data
        //$this->gcm->setData($params);
        // also you can add time to live
        $this->gcm->setTtl(500);
        // and unset in further
        //$this->gcm->setTtl(false);
        // set group for messages if needed
        //$this->gcm->setGroup('Test');
        // or set to default
        //$this->gcm->setGroup(false);
        // send
        return $this->gcm->send();
    }

希望它能解决你的问题。

<?php 
$register_keys = array("YOUR_REGISTRY_KEYS")
$google_api_key = "YOUR_API_KEY";
$registatoin_ids = $register_keys; 
$message = array("price" => $message);  
// 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));
}
//print_r($result);
// Close connection
curl_close($ch);
?>