Rejestr Google Cloud Messaging nie działa
PROBLEM ROZWIĄZANY AKTUALIZACJA:
Rozwiązałem ten problem. Problem tkwi w metodzieregisterGCMInBackground()
. GoogleCloudMessaging.getInstance()
oczekujeApplicationContext
.
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;
}
-------- Rozwiązany problem --------------
Mam problemy z zarejestrowaniem urządzenia z Androidem pod adresemGCM
(Google Cloud Messaging). Używam przykładu zGoogle Developers. Za pomocą Przykładu programisty Google zapewniłem następujące rzeczy:
Wydaje się, że to ten sam problemPytanie. Niestety wciąż nie odpowiedziałem. Otrzymuję wyjątek Null Pointer w następującym wierszu:
regid = gcm.register(SENDER_ID);
Oto mój kod problemu:Aktywność próbki
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);
}
Oto moje wyjście konsoli:Wyjście konsoli
Mam do czynienia od dwóch pełnych dni z tym problemem. :( Dziękuję Ci bardzo!