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

时间:2014-08-26 19:23:47

标签: java android push-notification google-cloud-messaging

我对GCM有几个问题。

  1. 在官方页面for GCM上,在“入门”下,它显示Decide which Google-provided GCM connection server you want to use— HTTP or XMPP (CCS).现在我理解这两者在实践中的区别,但当他说决定选择哪一个时,我不是确定他对我的期望是什么?对于其中两个,我需要做些什么。
  2. 我已准备好为GCM准备的Android应用程序。对于服务器的一部分,我不确定我应该做什么。我可以向https://android.googleapis.com/gcm/send传递参数执行POST请求吗?我可以使用HTTPClient这个,对吗?有什么特别的东西吗?
  3. 此外,我必须在步骤2中执行的服务器。它不一定是服务器吗?它可以是任何独立的Java代码,我可以运行它,对gcm进行POST?仅用于测试目的。

2 个答案:

答案 0 :(得分:3)

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服务器,而这些服务器会将其发送到您的应用

答案 1 :(得分:3)

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

  2. 是的,如果您采用gcm http方法,任何提交http请求的代码都应该有效。

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