envío de notificaciones push usando FCM
Google obsoleto el Google Cloud Messaging (GCM) y puso en marcha nuevo servidor de notificación de inserción que es Firebase mensajería en la nube (FCM). FCM es igual como GCM, FCM es también una solución de mensajería multiplataforma para plataformas móviles
Firebase mensajería en la nube puede enviar tres tipos de mensajes (Message types)
1.Notification Mensaje
2.Data mensaje
3.message tanto con notificación y datos
Firebase mensajería en la nube pasos integrador: -
1.Setup nuevo proyecto o proyecto de importación en Firbase consola (https://firebase.google.com/)
2.Add el mismo paquete de Nombre Aplicación en la aplicación Firebase.
3. Obtenga el archivo "google-services.json" y ponga ese archivo en la carpeta de la aplicación de su proyecto. Este archivo contiene todas las URL y las claves para el servicio de Google, así que no cambie ni edite este archivo.
4.Agregue nuevas dependencias de Gradle en Project for Firebase.
//app/build.gradle
dependencies {
compile 'com.google.firebase:firebase-messaging:9.6.0'
}
apply plugin: 'com.google.gms.google-services'
5. Cree una clase que contenga todos los valores constantes que usamos en la aplicación para FCM.
public class Config {
public static final String TOPIC_GLOBAL = "global";
// broadcast receiver intent filters
public static final String REGISTRATION_COMPLETE = "registrationComplete";
public static final String PUSH_NOTIFICATION = "pushNotification";
// id to handle the notification in the notification tray
public static final int NOTIFICATION_ID = 100;
public static final int NOTIFICATION_ID_BIG_IMAGE = 101;
public static final String SHARED_PREF = "ah_firebase";
}
6. Crear una clase llamada MyFirebaseInstanceIDService.java la que se recibe el ID de registro base de fuego que será única para cada aplicación. La identificación de registro se usa para enviar mensajes a un solo dispositivo.
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
private static final String TAG = MyFirebaseInstanceIDService.class.getSimpleName();
@Override
public void onTokenRefresh() {
super.onTokenRefresh();
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
// Saving reg id to shared preferences
storeRegIdInPref(refreshedToken);
// sending reg id to your server
sendRegistrationToServer(refreshedToken);
// Notify UI that registration has completed, so the progress indicator can be hidden.
Intent registrationComplete = new Intent(Config.REGISTRATION_COMPLETE);
registrationComplete.putExtra("token", refreshedToken);
LocalBroadcastManager.getInstance(this).sendBroadcast(registrationComplete);
}
private void sendRegistrationToServer(final String token) {
// sending gcm token to server
Log.e(TAG, "sendRegistrationToServer: " + token);
}
private void storeRegIdInPref(String token) {
SharedPreferences pref = getApplicationContext().getSharedPreferences(Config.SHARED_PREF, 0);
SharedPreferences.Editor editor = pref.edit();
editor.putString("regId", token);
editor.commit();
}
}
7.Cree una clase de servicio más llamada MyFirebaseMessagingService.java. Esto recibirá mensajes de firebase.
public class MyFirebaseMessagingService extends FirebaseMessagingService {
private static final String TAG = MyFirebaseMessagingService.class.getSimpleName();
private NotificationUtils notificationUtils;
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Log.e(TAG, "From: " + remoteMessage.getFrom());
if (remoteMessage == null)
return;
// Check if message contains a notification payload.
if (remoteMessage.getNotification() != null) {
Log.e(TAG, "Notification Body: " + remoteMessage.getNotification().getBody());
handleNotification(remoteMessage.getNotification().getBody());
}
}
private void handleNotification(String message) {
if (!NotificationUtils.isAppIsInBackground(getApplicationContext())) {
// app is in foreground, broadcast the push message
Intent pushNotification = new Intent(Config.PUSH_NOTIFICATION);
pushNotification.putExtra("message", message);
LocalBroadcastManager.getInstance(this).sendBroadcast(pushNotification);
// play notification sound
NotificationUtils notificationUtils = new NotificationUtils(getApplicationContext());
notificationUtils.playNotificationSound();
}else{
// If the app is in background, firebase itself handles the notification
}
}
/**
* Showing notification with text only
*/
private void showNotificationMessage(Context context, String title, String message, String timeStamp, Intent intent) {
notificationUtils = new NotificationUtils(context);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
notificationUtils.showNotificationMessage(title, message, timeStamp, intent);
}
/**
* Showing notification with text and image
*/
private void showNotificationMessageWithBigImage(Context context, String title, String message, String timeStamp, Intent intent, String imageUrl) {
notificationUtils = new NotificationUtils(context);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
notificationUtils.showNotificationMessage(title, message, timeStamp, intent, imageUrl);
}
}
8.In la AndroidManifest.xml añadir estos dos servicios firebase MyFirebaseMessagingService y MyFirebaseInstanceIDService.
<!-- Firebase Notifications -->
<service android:name=".service.MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<service android:name=".service.MyFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
<!-- ./Firebase Notifications -->
ahora simplemente Send your First Message
Notas:
* 1.Read el documento de Google para Firebase Cloud Messaging *
2. Si desea migrar una Aplicación de cliente GCM para Android a abeto ebase mensajería en la nube sigue estos pasos y Doc (Migrate a GCM Client App)
3.Android tutorial muestra y Código (Receive Reengagement Notifications)
C2DM está en desuso. Utilice https://developer.android.com/guide/google/gcm/index.html – gigadot
bien, intentaré aprender y desarrollar el tutorial anterior – user1676640
mi respuesta aquí: espero que ayude: http: // stackoverflow. com/a/12437549/554740 – HelmiB