从GCM 2.0迁移到GCM 3.0 InstanceID API

时间:2015-09-29 04:46:06

标签: android google-cloud-messaging

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

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

Google Play服务库版本7.0,可在我的项目中使用Google云消息传递实施推送通知。

Google Play服务库版本7.0使用register()方法

使用旧的注册程序
GoogleCloudMessaging.register(SENDER_ID);

但Googel文档说。

  

GCM register()自2015年5月28日起不再使用。新应用   开发应该使用Instance ID API来处理创建,   轮换和更新注册令牌

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

我已参考此link,其中介绍了如何使用InstanceID,但我找不到任何迁移指南,以便从GCM register()迁移到InstanceID

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

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:3)

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

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

然后在您的活动中,您应该在异步任务线程

中添加一段代码
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;
    }
  }

}