在服务器上管理GCM注册ID

6

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

  • 安卓应用程序可以从GCM服务器注册和注销ID。
  • 服务器端可以使用注册ID和服务器密钥向设备发送消息。

那么,我应该如何从GCM服务器获取设备注册ID?是否需要直接从安卓设备中获取?

感谢您的建议。

3个回答

4

学习基本信息的最佳地方是在 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注册ID传递到服务器端实现存在困惑。您可以在sendRegistrationIdToBackend()方法中定义此操作。
您需要创建一个接收POST请求的端点,每个设备都会在收到GCM注册ID后将其发布到该端点。然后,您的服务器实现将知道所有已安装您的应用程序并已在GCM上注册的设备。
注意:您可能需要注意一件事情,那就是如果某个设备两次发布其RegistrationID,或者某个用户卸载并重新安装应用程序但遇到相同的RegistrationID,则不要创建重复的RegistrationIDs,否则您的数据库将存储重复数据。如果发生这种情况,并且您想向所有用户发送推送通知,则某些用户可能会收到多个推送通知,具体取决于数据库中有多少重复数据。

嗯,谢谢。基本上,我需要在客户端应用程序中创建一个代码,将注册ID保存在我们的数据库服务器中。 - caknia
1
@andikurnia,完全正确!然后,您可以使用来自数据库的RegistrationIDs列表开始向GCM服务器发送请求。 - Andrea Thacker

1

首先,您将无法从GCM服务器获得任何注册号码。您只能从Google开发人员控制台获取项目ID应用程序密钥您必须使用客户端应用程序创建注册ID。 您需要编写一些代码来创建注册ID。 您可以参考this link。 在这里,它被很好地解释了。


0

获取 Android 设备的 GCM ID,您需要遵循以下步骤。每个设备都会为每个应用程序分配唯一的 GCM ID。

  1. 您需要在 Google API 控制台 上注册。
  2. 请访问 此链接 获取来自应用程序的 GCM ID。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接