这真的让我很烦恼。我有一个使用GCM的应用程序,有些人抱怨无法登录,因为出现了错误。让我展示一下我是如何制作登录功能的:
// Login Activity
//....
public void onClickLoginButton (View v) {
// Do some stuff...
new GCMRegister().execute(); //AsyncTask
}
private class GCMRegister extends AsyncTask<Void, Void, Integer> {
@Override
protected Integer doInBackground (Void... params) {
ConnectivityManager connMgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
try {
//Get GCM Registration key
registrationId = googleCloud.register(Settings.PROJECT_NUMBER);
} catch (Exception e) {
Log.e("GCMRegister", e.toString());
return -1;
}
return 1;
} else {
return -3;
}
}
@Override
protected void onPostExecute(Integer result) {
if (result == 1) {
new LoginAsync().execute(); // Another AsyncTask to check in my database if user is valid and save its key
} else {
user.setEnabled(true);
password.setEnabled(true);
login.setEnabled(true);
if (result == -1) {
Toast.makeText(Login.this, "A problem occured login in", Toast.LENGTH_LONG).show();
} else if (result == -3) {
Toast.makeText(Login.this, "I need an internet connection", Toast.LENGTH_LONG).show();
}
}
}
很多人抱怨由于“登录出现问题”错误而无法登录,这表明GCM在注册时失败。即使使用我自己的设备(Android 4.4.2),我也不能一次成功地登录。我需要尝试2到3次登录,直到它正常工作(并且我有良好的连接)。我的LogCat中的错误是:
08-04 21:29:10.922: E/GCMRegister(18182): java.io.IOException: SERVICE_NOT_AVAILABLE
那么我的代码有什么问题?这让我抓狂。