之前一直没注意到,在使用谷歌gcm消息推送服务时,第一次运行,注册谷歌服务,拿到的registrationID是空的,导致传给后台服务就是空的,无法接收到信息,大概原因是你向谷歌注册服务,要想立马获取registrationID的话,是不确定的,你需要启动一个线程,尝试执行几次,知道获取到的registrationID不为空,再传给后台服务,如下代码:给遇到相同问题的同学一个建议,谢谢阅读
new Thread() {
@Override
public void run() {
int time = 30;
while (time > 0) {
time--;
//registrationID不一定立即返回给你,你需要开启线程去查询,知道不为空为止
regId = GCMRegistrar.getRegistrationId(LoginActivity.this);
if (!(regId.equals("") || regId == null)) {
// 1 表示 iPhone 2 表示android
String groupName = APIDoc.getUserDocCaptain().getGroupName4Account(account);
String deviceId = ((TelephonyManager) getSystemService(TELEPHONY_SERVICE)).getDeviceId();
TradeResult tradeResult = TradeAPI.getInstance().setRegistDeviceID(ClientAPI.getAeid(),String.valueOf(account), groupName, regId, 2, deviceId,ConfigurationUtil.getInstance().getVersion());//将registrationID传给后台
if (tradeResult.isSucceed()) {
System.out.println("-----" + time);
return;
}
}
try {
sleep(1000 * 3);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();