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

Posted

技术标签:

【中文标题】Android GCM:.register 函数需要服务器吗?【英文标题】:Android GCM: .register function need a server? 【发布时间】:2013-12-09 22:45:30 【问题描述】:

我正在尝试在我的 android 应用程序上实现 google 的 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】:

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

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

【讨论】:

以上是关于Android GCM:.register 函数需要服务器吗?的主要内容,如果未能解决你的问题,请参考以下文章

Android GCM 注册失败。为啥?

在 Android 中升级应用程序后使用 GCM 的 RegistrationId

Android APP 从 GCM 迁移到 FCM。旧 GCM 令牌不起作用

Android 2.2 上的 GCM SERVICE_NOT_AVAILABLE

应用程序是不是应该每 7 天调用一次 gcm.register() 以确保注册 ID 有效?

带有GCM服务的java.lang.ClassNotFoundException