Android phonegap 使用 php 使用 Google Cloud Messaging 发送推送通知

Posted

技术标签:

【中文标题】Android phonegap 使用 php 使用 Google Cloud Messaging 发送推送通知【英文标题】:Android phonegap send push notification using Google Cloud Messaging using php 【发布时间】:2014-05-15 11:46:43 【问题描述】:

我已经在 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 中编写了用于向我的设备发送推送通知的代码,但它给了我“unauthorised Error 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 页面,但是这个页面给了我错误 unauthorised Error 401

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

Que.2 向安装应用程序的用户发送推送通知是否必须提供设备注册 ID?

请任何人帮助我如何解决上述错误,如果有人有其他解决方案,请告诉我。我从昨天开始尝试但没有达到我的目标,所以请帮助我。

【问题讨论】:

【参考方案1】:

这是 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();
    

希望它能解决你的问题。

【讨论】:

另外你必须加载 gcm 库,否则它将无法工作。【参考方案2】:
<?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);
?>

【讨论】:

如果你能简单解释/总结一下这段代码的作用会更好。 不清楚这是如何假设 OP 提出的不同问题。

以上是关于Android phonegap 使用 php 使用 Google Cloud Messaging 发送推送通知的主要内容,如果未能解决你的问题,请参考以下文章

Android/sencha/phonegap ajax 调用本地 php 文件返回整个代码?

android / phonegap性能[关闭]

阅读 Android 扩展文件 - PhoneGap 构建

如何使 phonegap 构建应用程序在后台工作

Android平台PhoneGap的PayPal插件

PhoneGap - Angularjs http 服务(PHP API 调用)不工作