java中的Android GCM推送通知服务器端

Posted

技术标签:

【中文标题】java中的Android GCM推送通知服务器端【英文标题】:Android GCM Push Notification server side in java 【发布时间】:2014-08-26 19:23:47 【问题描述】:

我有几个关于 GCM 的问题。

    在官方页面for GCM,在Getting Started下,写着Decide which Google-provided GCM connection server you want to use— HTTP or XMPP (CCS).现在我在实践中明白这两者之间的区别,但是当他说DECIDE which one to choose时,我不确定他是什么期待我吗?对于这两者,我需要做些不同的事情吗? 我已经为 GCM 准备好了 android 应用程序。对于服务器部分,我不确定我应该做什么。我可以向https://android.googleapis.com/gcm/send 发出 POST 请求并传递参数吗?我可以为此使用 HTTPClient,对吗?有什么特别的吗? 另外,我在步骤 2 中必须做的服务器。它不一定是服务器,对吧?它可以是任何独立的 java 代码,我可以运行它,对 gcm 进行 POST?仅用于测试目的。

【问题讨论】:

要做推送通知,你只需要Java代码,这里是[***.com/a/21853810/952511][1] [1]:***.com/a/21853810/952511 【参考方案1】:

    是的,http 和 ccs 服务器之间存在很大差异。前者涉及简单的http请求。后者需要xmpp协议实现。

    是的,如果您采用 gcm http 方法,任何提交 http 请求的代码都应该可以工作。

    出于测试目的,您不需要服务器。任何提交http请求的代码都可以。但是,您必须将设备注册 ID 传递给您的服务器代码才能发送 GCM 消息。

【讨论】:

是的,我知道 http 和 ccs 使用不同的协议。但是说,在我的开发人员控制台上,我有一个项目Test Project。现在,如果我使用 HTTP 向它发送消息,那么它将表现为 HTTP,如果我使用 XMPP,那么它将表现为 CCS?是对的吗?如何使用它取决于我自己,我会相应地从云端获取行为,对吗? @kraken 这几乎是正确的。要使用 ccs,您必须额外填写一个表格,将您的 API 项目列入白名单以供 GCM ccs 使用。【参考方案2】:

2 - 基本上就是这样,这是我的服务器代码,它是我服务器中的一个 php 文件

public function send_push()
    $message = "your message";

    // Set POST variables
    $url = 'https://android.googleapis.com/gcm/send';

    $fields = array(
                    'registration_ids'  => array("GCM_REGISTRATION"),
                    'data'              => array( "message" => $message ),
                    );

    $headers = array( 
                        'Authorization: key=YOUR_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 );

    curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode( $fields ) );

    // Execute post
    $result = curl_exec($ch);

    // Close connection
    curl_close($ch);

    echo $result;

GCM_REGISTRATION 是您第一次运行应用程序以在 GCM 中注册后获得的哈希值。如果一切正常,你可以在 logcat 中看到这个

api_key 是您在创建应用时获得的哈希值(您可能在文档中看到过)

3 - 我相信它不需要是服务器,因为它实际上会将消息发送到 Google 服务器,然后再将其传递到您的应用程序

【讨论】:

以上是关于java中的Android GCM推送通知服务器端的主要内容,如果未能解决你的问题,请参考以下文章

Android GCM Java 服务器 - 没有消息数据的推送通知

如何在基于 Java 的应用服务器上使用 GCM 向 iOS 设备发送推送通知

某些 android 设备未收到 GCM 推送通知

在 iOS 上不使用 GCM 接收推送通知

使用 GCM 从 java 服务器向 android 手机发送希伯来语推送通知时出现乱码

通过java发送推送通知GCM [关闭]