how - push notifications android
Cómo obtener RegistrationID usando GCM en Android (3)
En respuesta a su primera pregunta: Sí, debe ejecutar una aplicación de servidor para enviar los mensajes, así como una aplicación de cliente para recibirlos.
En respuesta a su segunda pregunta: Sí, cada aplicación necesita su propia clave de API. Esta clave es para su aplicación de servidor, no para el cliente.
Estoy tratando de hacer notificaciones push en Android usando GCM. Leí los documentos de Google para GCM y su aplicación de demostración. Creé el programa del lado del cliente mencionado aquí http://android.amolgupta.in/
. Pero no obtengo la identificación de registro. Además, no obtengo algunos puntos como:
- ¿Necesito un programa de servidor también con este
- en la aplicación de demostración de Google mencionan que necesito cambiar la clave de la API en "samples / gcm-demo-server / WebContent / WEB-INF / classes / api.key" ¿es necesario hacerlo cada vez que estoy creando un nuevo proyecto?
¿Alguien puede proporcionarme un proyecto adecuado que no sea google proporcionado para que aclare mis conceptos?
Cualquier ayuda será apreciada.
Aquí he escrito algunos pasos para Cómo obtener el RegID y la notificación comenzando desde cero
- Crear / Registrar aplicación en Google Cloud
- Configurar Cloud SDK con desarrollo
- Configurar proyecto para GCM
- Obtener ID de registro de dispositivo
- Enviar notificaciones automáticas
- Recibir notificaciones push
Puede encontrar un tutorial completo aquí:
Fragmento de código para obtener la ID de registro (Token de dispositivo para notificación push).
Configurar proyecto para GCM
Actualizar el archivo AndroidManifest
Para habilitar GCM en nuestro proyecto, necesitamos agregar algunos permisos a nuestro archivo de manifiesto. Vaya a AndroidManifest.xml
y agregue este código: Agregar permisos
<uses-permission android:name="android.permission.INTERNET”/>
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name=“.permission.RECEIVE" />
<uses-permission android:name=“<your_package_name_here>.permission.C2D_MESSAGE" />
<permission android:name=“<your_package_name_here>.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
Agregue la declaración del receptor de difusión GCM en su etiqueta de aplicación:
<application
<receiver
android:name=".GcmBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" ]]>
<intent-filter]]>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="" />
</intent-filter]]>
</receiver]]>
<application/>
Agregar declaración de servicio GCM
<application
<service android:name=".GcmIntentService" />
<application/>
Obtener ID de registro (token de dispositivo para notificación push)
Ahora ve a tu actividad de lanzamiento / salpicadura
Agregar constantes y variables de clase
private final static int PLAY_SERVICES_RESOLUTION_REQUEST = 9000;
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 final static String TAG = "LaunchActivity";
protected String SENDER_ID = "Your_sender_id";
private GoogleCloudMessaging gcm =null;
private String regid = null;
private Context context= null;
Actualizar los métodos OnCreate y OnResume
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_launch);
context = getApplicationContext();
if (checkPlayServices()) {
gcm = GoogleCloudMessaging.getInstance(this);
regid = getRegistrationId(context);
if (regid.isEmpty()) {
registerInBackground();
} else {
Log.d(TAG, "No valid Google Play Services APK found.");
}
}
}
@Override
protected void onResume() {
super.onResume();
checkPlayServices();
}
// # Implement GCM Required methods(Add below methods in LaunchActivity)
private boolean checkPlayServices() {
int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
if (resultCode != ConnectionResult.SUCCESS) {
if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) {
GooglePlayServicesUtil.getErrorDialog(resultCode, this,
PLAY_SERVICES_RESOLUTION_REQUEST).show();
} else {
Log.d(TAG, "This device is not supported - Google Play Services.");
finish();
}
return false;
}
return true;
}
private String getRegistrationId(Context context) {
final SharedPreferences prefs = getGCMPreferences(context);
String registrationId = prefs.getString(PROPERTY_REG_ID, "");
if (registrationId.isEmpty()) {
Log.d(TAG, "Registration ID not found.");
return "";
}
int registeredVersion = prefs.getInt(PROPERTY_APP_VERSION, Integer.MIN_VALUE);
int currentVersion = getAppVersion(context);
if (registeredVersion != currentVersion) {
Log.d(TAG, "App version changed.");
return "";
}
return registrationId;
}
private SharedPreferences getGCMPreferences(Context context) {
return getSharedPreferences(LaunchActivity.class.getSimpleName(),
Context.MODE_PRIVATE);
}
private static int getAppVersion(Context context) {
try {
PackageInfo packageInfo = context.getPackageManager()
.getPackageInfo(context.getPackageName(), 0);
return packageInfo.versionCode;
} catch (NameNotFoundException e) {
throw new RuntimeException("Could not get package name: " + e);
}
}
private void registerInBackground() {
new AsyncTask() {
@Override
protected Object doInBackground(Object...params) {
String msg = "";
try {
if (gcm == null) {
gcm = GoogleCloudMessaging.getInstance(context);
}
regid = gcm.register(SENDER_ID);
Log.d(TAG, "########################################");
Log.d(TAG, "Current Device''s Registration ID is: " + msg);
} catch (IOException ex) {
msg = "Error :" + ex.getMessage();
}
return null;
}
protected void onPostExecute(Object result) {
//to do here
};
}.execute(null, null, null);
}
Nota : almacene REGISTRATION_KEY
, es importante para enviar mensajes PN a GCM. También tenga en cuenta que esta clave será única para todos los dispositivos y GCM enviará Notificaciones Push solo por REGISTRATION_KEY
.
Use este código para obtener la ID de registro usando GCM
String regId = "", msg = "";
public void getRegisterationID() {
new AsyncTask() {
@Override
protected Object doInBackground(Object...params) {
String msg = "";
try {
if (gcm == null) {
gcm = GoogleCloudMessaging.getInstance(Login.this);
}
regId = gcm.register(YOUR_SENDER_ID);
Log.d("in async task", regId);
// try
msg = "Device registered, registration ID=" + regId;
} catch (IOException ex) {
msg = "Error :" + ex.getMessage();
}
return msg;
}
}.execute(null, null, null);
}
y no te olvides de escribir permisos en manifiesto ...
¡Espero que ayude!