Android GCM:.register函数需要服务器吗?

时间:2013-12-09 22:45:30

标签: android google-cloud-messaging

我正在尝试在我的Android应用程序上实现谷歌的GCM,我遇到了一个关于.register()函数的问题。

private void registerInBackground() {
    new AsyncTask<Void, Void, String>() {
        @Override
        protected String doInBackground(Void... params) {
            String msg = "";
            try {
                if (gcm == null) {
                    gcm = GoogleCloudMessaging.getInstance(context);
                }
                regid = gcm.register(SENDER_ID);
                Log.d(TAG, "registered gcm");
                msg = "Device registered, registration ID=" + regid;
                Log.d(TAG, "Current Device's Registration ID is: "+msg);  

                // You should send the registration ID to your server over HTTP, so it
                // can use GCM/HTTP or CCS to send messages to your app.
              //  sendRegistrationIdToBackend();

                // For this demo: we don't need to send it because the device will send
                // upstream messages to a server that echo back the message using the
                // 'from' address in the message.

                // Persist the regID - no need to register again.
                storeRegistrationId(context, regid);
            } catch (IOException ex) {
                msg = "Error :" + ex.getMessage();
                // If there is an error, don't just keep trying to register.
                // Require the user to click a button again, or perform
                // exponential back-off.
            }
            return msg;
        }

对于regid = gcm.register(SENDER_ID);,应用程序使用哪种类型的连接发送到GCM以注册SENDER_ID?它是否只通过Wi-Fi进行,还是需要建立服务器以便向GCM注册。我的主要问题是,客户端应用程序如何向GCM注册以获取该注册ID?

1 个答案:

答案 0 :(得分:1)

AFAIR,不,它不需要您身边的自定义服务器来接收Registration ID。 Google服务器将其发送给用户设备。您(您的自定义服务器)稍后将需要此ID才能请求Google向用户设备发送推送通知。将使用此特定registration ID标识用户设备。所以你的服务器需要存储它。您可以在服务器端将某种registration ID映射到某个友好名称。

简而言之,您需要一个自定义服务器,当您收到来自Google的用户设备时,您将从该服务器向其发送注册ID。但是,(.register)函数不需要它。