我为我的应用程序选择了 Google Cloud Messaging,到目前为止,它在 Google API 17、18、19 和 21 上完美运行。但是,在 Google API 16 上,我在注册级别遇到超时。以前有人遇到过这个吗?我正在使用 Google 推荐的 AsyncTask。
我的代码:
private class PrefetchData extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// before making http calls
}
@Override
protected Void doInBackground(Void... arg0) {
try{
// ...
// register device to Google Cloud Messaging if not already done
if(gcmDeviceRegID.equals("")){
gcm = GoogleCloudMessaging.getInstance(getApplicationContext());
gcmDeviceRegID = gcm.register(PROJECT_NUMBER);
}
}
catch( Exception e ){
e.printStackTrace();
return null;
}
return null;
}
//...
日志:
W/InstanceID/Rpc(887): Found 10016
W/InstanceID/Rpc(887): No response android.os.ConditionVariable@41206630
W/System.err(887): java.io.IOException: TIMEOUT
W/System.err(887): at com.google.android.gms.iid.zzc.zzb(Unknown Source)
W/System.err(887): at com.google.android.gms.iid.zzc.zza(Unknown Source)
W/System.err(887): at com.google.android.gms.iid.InstanceID.zzc(Unknown Source)
W/System.err(887): at com.google.android.gms.iid.InstanceID.getToken(Unknown Source)
W/System.err(887): at com.google.android.gms.gcm.GoogleCloudMessaging.register(Unknown Source)
W/System.err(887): at com.domain.appname.SplashScreenActivity$PrefetchData.doInBackground(SplashScreenActivity.java:104)
W/System.err(887): at com.domain.appname.SplashScreenActivity$PrefetchData.doInBackground(SplashScreenActivity.java:1)
W/System.err(887): at android.os.AsyncTask$2.call(AsyncTask.java:287)
W/System.err(887): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
W/System.err(887): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
W/System.err(887): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
W/System.err(887): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
如您所知,SplashScreenActivity.java:104 就是这一行:
gcmDeviceRegID = gcm.register(PROJECT_NUMBER);
知道如何解决这个问题吗? 谢谢!
最佳答案
根据 Arthur Thompson 的评论,这个问题正在通过使用新的推荐方式注册到 GCM 来解决(从 2015 年 6 月 28 日开始):
InstanceID instanceID = InstanceID.getInstance(getApplicationContext());
gcmDeviceRegID = instanceID.getToken(PROJECT_NUMBER,GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
而不是
gcm = GoogleCloudMessaging.getInstance(getApplicationContext());
gcmDeviceRegID = gcm.register(PROJECT_NUMBER);
有用的链接: https://developers.google.com/cloud-messaging/android/legacy-regid https://developers.google.com/cloud-messaging/registration
感谢和问候
关于java - Google 云消息注册超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32672759/