从 GCM 2.0 迁移到 GCM 3.0 InstanceID API

Migrate from GCM 2.0 to GCM 3.0 InstanceID API

目前我已经在 Play 商店和我正在使用的项目中发布了我的应用程序

compile 'com.google.android.gms:play-services:7.0.0'

Google 播放服务库版本 7.0 在我的项目中使用 Google 云消息传递实现推送通知。

Google播放服务库版本7.0使用旧的注册程序使用register()方法

GoogleCloudMessaging.register(SENDER_ID);

但是 Googel 文档说。

GCM register() is deprecated starting May 28, 2015. New app development should use the Instance ID API to handle the creation, rotation, and updating of registration tokens

InstanceID API 包含在 Google 播放服务版本 7.5 中,因此我必须从 7.0 迁移到 7.5 或更高版本。但是应用程序已经在使用 GCM register() 方法的 Play 商店中。

我参考了这个 link,它解释了如何使用 InstanceID,但我找不到任何迁移指南来从 GCM register() 迁移到 InstanceID

那么我如何从 GCM register() 方法迁移到 InstanceID API

任何帮助将不胜感激。

您只需实施 InstanceId-API,重新注册设备并将新 ID 存储在您的服务器上。

这就是他们如何解释应用程序从 C2DM 升级到 GCM here 的迁移,其中完全不同的服务因此这将适用于升级到最新的 GCM-APIInstanceId-API 作为嗯。

您应该尝试在发送通知时是否可以混合使用 InstanceIDs 和旧的 RegIds(我找不到任何提示)。否则,您必须将布尔值或其他任何内容与存储在服务器上的每个 ID 一起保存,以便能够区分您应该使用哪种方法向特定设备发送通知。

您应该在应用程序的 build.gradle 中添加 GCM 依赖项。

compile 'com.google.android.gms:play-services-gcm:10.0.1'

然后在你的 activity 中你应该在 Async TaskThread,[=13= 中添加一段代码]

String authorizedEntity = PROJECT_ID; // Project id from Google Developer Console
String scope = "GCM";
String token = InstanceID.getInstance(context).getToken(authorizedEntity,scope);

LoginActivity.Java:

public class LoginActivity extends AppCompatActivity{

private String deviceToken;

@Override protected void onCreate(Bundle savedInstance) {
    super.onCreate(savedInstance);
    setContentView(R.layout.activity_login_new);
    ButterKnife.bind(this);

      if (!NetworkHelper.checkActiveInternet(this)) {
        Methodutils.messageWithTitle(LoginActivity.this, "No Internet Connection",
            "Please check your internet connection.", v -> finish());
      } else {
        new RegisterDevice(false).execute();
      }
    }
  }

private class RegisterDevice extends AsyncTask<String, String, String> {
    private ProgressDialog dialog;

    @Override protected void onPreExecute() {
      super.onPreExecute();

      dialog = new ProgressDialog(LoginActivity.this);
      dialog.setMessage("loading...");
      dialog.setCancelable(false);
      dialog.show();
    }

    @Override protected String doInBackground(String... params) {
      try {

        String authorizedEntity = AppConstants.APP_ID;
        String scope = "GCM";

        deviceToken = InstanceID.getInstance(LoginActivity.this).getToken(authorizedEntity, scope);

        Log.e("New Device Token - ", deviceToken != null ? deviceToken : "NA");
        if (deviceToken != null) {
          return deviceToken;
        }
      } catch (IOException e) {
        e.printStackTrace();
      } catch (Exception e) {
        e.printStackTrace();
      }
      return null;
    }

    @Override public void onPostExecute(String result) {
      super.onPostExecute(result);
      if (dialog.isShowing) {
        dialog.dismiss();
      }
      if (result == null) return;
    }
  }

}