El registro de Google Cloud Messaging falla
PROBLEMA RESUELTO ACTUALIZAR:
Resolví este problema. El problema está en el método.registerGCMInBackground()
. GoogleCloudMessaging.getInstance()
espera elApplicationContext
.
private void registerGCMInBackground(final String userId) {
new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... params) {
String msg = "";
Log.d("Register GCM", "started");
try {
if (gcm == null) {
//PROBLEM SOLVED HERE
gcm = GoogleCloudMessaging.getInstance(getApplicationContext());
Log.d("GCM", gcm.toString());
}
regid = gcm.register(SENDER_ID); //////NULL POINTER EXCEPTION
msg = "Device registered, registration ID=" + regid;
// You should send the registration ID to your server over HTTP
sendRegistrationIdToBackend(userId, regid);
// For this demo: we don't need to send it because the device will send
// upstream messages to a server that echo back the message using the
// 'from' address in the message.
// Persist the regID - no need to register again.
storeRegistrationId(context, regid);
} catch (IOException ex) {
return "Error :" + ex.getMessage();
// If there is an error, don't just keep trying to register.
// Require the user to click a button again, or perform
// exponential back-off.
}
return regid;
}
-------- Problema resuelto--------------
Tengo problemas para registrar mi dispositivo Android enGCM
(Google Cloud Messaging). Estoy usando el ejemplo deDesarrolladores de Google. Con el uso del ejemplo de desarrollador de Google me aseguré de lo siguiente:
Parece ser el mismo problema como estePregunta. Lamentablemente todavía no se responde. Recibo una excepción de puntero nulo en la siguiente línea:
regid = gcm.register(SENDER_ID);
Aquí está mi código de problema:Actividad de muestra
static final String TAG = "GCM";
public static final String EXTRA_MESSAGE = "message";
public static final String PROPERTY_REG_ID = "registration_id";
private static final String PROPERTY_APP_VERSION = "appVersion";
private static final int PLAY_SERVICES_RESOLUTION_REQUEST = 9000;
String SENDER_ID = "xxxxxxxxxxxxxxx";
GoogleCloudMessaging gcm;
AtomicInteger msgId = new AtomicInteger();
Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.registration);
final Button register = (Button) findViewById(R.id.btn_register);
register.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EditText mobilePhoneNumber = (EditText) findViewById(R.id.et_phonenumber);
if(!mobilePhoneNumber.getText().toString().isEmpty()){
User user = new User();
user.setMobilePhoneNumber(mobilePhoneNumber.getText().toString());
EditText firstName = (EditText) findViewById(R.id.et_firstName);
user.setFirstName(firstName.getText().toString());
EditText lastName = (EditText) findViewById(R.id.et_lastName);
user.setLastName(lastName.getText().toString());
EditText email = (EditText) findViewById(R.id.et_email);
user.setEmail(email.getText().toString());
Log.d("email: ", user.getEmail().toString());
if (android.os.Build.VERSION.SDK_INT>14) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);
}
UserService userService = new UserService();
String path = userService.createNewUser(user);
Log.d("Location: ", path);
Toast.makeText(getApplicationContext(),
path, Toast.LENGTH_LONG).show();
String userID = path.replace("/user/", "");
userID = userID.replace("/users/", "");
Log.d("UserID:::", userID);
Log.d("User Service", "register in Background started");
if(checkPlayServices()){
registerGCMInBackground(userID);
}
}
else{
Toast.makeText(getApplicationContext(),
"Please enter your Mobile Phone Number", Toast.LENGTH_LONG).show();
}
}
});
private void registerGCMInBackground(final String userId) {
new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... params) {
String msg = "";
Log.d("Register GCM", "started");
try {
if (gcm == null) {
gcm = GoogleCloudMessaging.getInstance(context);
Log.d("GCM", gcm.toString());
}
regid = gcm.register(SENDER_ID); //////NULL POINTER EXCEPTION
msg = "Device registered, registration ID=" + regid;
// You should send the registration ID to your server over HTTP
sendRegistrationIdToBackend(userId, regid);
// For this demo: we don't need to send it because the device will send
// upstream messages to a server that echo back the message using the
// 'from' address in the message.
// Persist the regID - no need to register again.
storeRegistrationId(context, regid);
} catch (IOException ex) {
return "Error :" + ex.getMessage();
// If there is an error, don't just keep trying to register.
// Require the user to click a button again, or perform
// exponential back-off.
}
return regid;
}
@Override
protected void onPostExecute(String msg) {
}
}.execute(null, null, null);
}
Aquí está mi salida de consola:Salida de consola
Estoy tratando desde hace dos días completos con este problema. :( ¡Muchas gracias!