在服务器中管理GCM注册ID

时间:2015-03-11 02:53:10

标签: android google-cloud-messaging

我今天了解GCM服务器。阅读developer.android.com部分GCM中的内容,我仍然不确定如何管理第三方服务器中的注册ID。我的理解是:

  • android app可以从/向GCM服务器注册和注销其ID。
  • 服务器端可以使用注册ID和
    向设备发送消息 服务器密钥。

那么,如何从GCM服务器获取设备注册ID?我需要直接从Android设备上获取吗?

感谢您的建议。

3 个答案:

答案 0 :(得分:4)

了解基本信息的最佳位置是here at developer.android.com

您将在他们的教程中看到此示例代码:

 /**
 * Registers the application with GCM servers asynchronously.
 * <p>
 * Stores the registration ID and app versionCode in the application's
 * shared preferences.
 */
private void registerInBackground() {
    new AsyncTask() {
        @Override
        protected String doInBackground(Void... params) {
            String msg = "";
            try {
                if (gcm == null) {
                    gcm = GoogleCloudMessaging.getInstance(context);
                }
                regid = gcm.register(SENDER_ID);
                msg = "Device registered, registration ID=" + regid;

                // 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.
                // The request to your server should be authenticated if your app
                // is using accounts.
                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 registration ID - 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;
        }

        @Override
        protected void onPostExecute(String msg) {
            mDisplay.append(msg + "\n");
        }
    }.execute(null, null, null);
    ...
}

如果我理解正确,您会对如何将GCM RegistrationId引入服务器实施感到困惑。您可以在要定义的sendRegistrationIdToBackend()方法中执行此操作。

您需要创建一个端点来接收POST请求,每个设备在从GCM收到一个POSTID后,都会将其注册后发布。然后,您的服务器实现将了解已安装您的应用并已向GCM注册的所有设备。

注意:您可能需要注意的一件事是,如果设备最终发布了两次RegistrationID,或者用户卸载然后重新安装应用程序,则不会创建重复的RegistrationID,但GCM会为他们提供相同的注册ID,您最终可以使用存储在服务器上的数据库中的重复项。如果发生这种情况并且您希望向所有用户发送推送,那么您的某些用户可能最终会获得多个推送通知,具体取决于数据库中有多少重复项。

答案 1 :(得分:1)

首先,您不会从GCM服务器获得任何注册号。您只能从Google Developer Console获得Project IdApp Key您必须使用客户端应用创建注册ID。您必须编写一些代码来创建注册ID。您可以关注this link。这里解释得非常好。

答案 2 :(得分:0)

您需要按照以下步骤从Android设备获取gcm Id。每个设备的每个应用都有一个唯一的gcm Id。

  1. 您必须在Google api console
  2. 上注册
  3. 按照此link从应用
  4. 获取gcm ID