[AIR接入Android平台]Google GCM 推送

文档:https://developer.android.com/google/gcm/gs.html

使用前提:测试server和手机都用vpn或其他翻墙软件,使其能访问google

然后在https://console.developers.google.com 配置google推送后台

  1. 开启google 推送服务100055_11345.png

  2. **添加app服务器的ip100451_64039.png**

推送开发流程:客户端调用GCMRegistrar.register拿到registrationId,将registrationId 发给服务端,服务端再通过这个类似token的registrationId想google服务器发送消息。客户端服务再向google服务器拿消息。

  1. 客户端开发主要是继承GCMBaseIntentService,并在继承类中添加消息处理方式,可以查看demo 中GCMIntentService。
  1. 集成后就可以调用GCMRegistrar.register,然后在GCMBaseIntentService中的onRegistered中拿到registrationId,注册后可以使用GCMRegistrar.getRegistrationId拿id

  2. 最重要的是manifest的配置,注意点如下图

clipboard.png

红色部分要一致

服务端php代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
define("GOOGLE\_API\_KEY""google后台拿到的API KEY");
function send\_push\_notification($registatoin_ids, $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'
        );
        //print_r($headers);
        // 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;
    }
    $registatoin_ids = array("客服端拿到的registrationId");
    $message = array("message"=>"客服端onMessage的Intent中包含这个数组的key","action"=>"com.antoinecampbell.gcmdemo.ECHO");
    send\_push\_notification($registatoin_ids,$message);
?>

google推送参数分析:

registration_ids:客户端拿到的registrationId`

data:服务端向客户端推送的信息,是一个Json类型。客服端onMessage的Intent中包含这个Json的key`