6
private void registerClient() {
    try {
        GCMRegistrar.checkDevice(this);
        GCMRegistrar.checkManifest(this);
        regId = GCMRegistrar.getRegistrationId(this);
        if (regId.equals("")) {
            registrationStatus = "Registering...";
            GCMRegistrar.register(this, "1074338555805");
            regId = GCMRegistrar.getRegistrationId(this);
            registrationStatus = "Registration Acquired";
            sendRegistrationToServer();
        } else {
            registrationStatus = "Already registered";
        }
    } catch (Exception e) {
        e.printStackTrace();
        registrationStatus = e.getMessage();
    }
}

android 2.3.3、2.3.5 中的 gcm 注册 id 为空,但它不为空并且在 android 2.3.4、4.0.4 中工作。

4

1 回答 1

0

正如 Google Play 服务设置指南中非常清楚地说明的那样。

https://developer.android.com/google/gcm/client.html

应用程序创建:

    // Check device for Play Services APK. If check succeeds, proceed with
    //  GCM registration.
    if (checkPlayServices()) {
        gcm = GoogleCloudMessaging.getInstance(this);
        regid = getRegistrationId(context);

        if (regid.isEmpty()) {
            registerInBackground();
        }
    } else {
        Log.i(TAG, "No valid Google Play Services APK found.");
    }

后台注册代码:

/**
 * 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 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;
    }

    @Override
    protected void onPostExecute(String msg) {
        mDisplay.append(msg + "\n");
    }
  }.execute(null, null, null);
  ...
}
于 2014-07-27T10:29:05.273 回答