目前我已经在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
?
任何帮助将不胜感激。
答案 0 :(得分:3)
您只需实施InstanceId-API
,重新注册设备并在服务器上存储新ID。
这就是他们如何解释从C2DM升级到GCM here的应用程序的迁移,其中包含完全不同的服务,因此这也适用于升级到最新的GCM-API
和InstanceId-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;
}
}
}