java - Google 云消息注册超时

标签 java android timeout google-cloud-messaging registration

我为我的应用程序选择了 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/

相关文章:

java - Dropwizard TLS 和 SSL : deactivate SSLv3

java - 迭代函数

android - 将数据发送回 Android 中的主 Activity

java - Google 教程中的这段 Java 代码在创建 Void 类型的变量时正确吗?

java - 为什么elasticsearch慢查询中take_millis和timeout之间有很多时间开销

java - 是否可以将 jframe 表单添加到现有类中?

android - 暂停和恢复如何在Android的协程中工作

php - 在 PHP 中,什么对应于 MySQLi 中的 mysql.connect_timeout?

Python 多处理 : socket error timeout while remote connection to a Manager

java - 我可以使用 lambda 重写 JDK8 中功能接口(interface)的 toString 方法吗