J'ai développé une application de notification Push dans Android
à partir de ce tutoriel: Notification Push dans Android app . Le bouton d'enregistrement s'affiche lorsque j'exécute l'application Lorsque je clique sur le bouton d'enregistrement et lorsque l'enregistrement est réussi, une notification s'affiche sur mon appareil.
Comment puis-je l'inclure dans ma propre application? Mon application possède une application d'exemple d'analyse XML. Ici, lorsqu'un nouvel article est ajouté, je souhaite afficher (la nouvelle commande s'affiche) un message de notification sur l'appareil. Il est généré automatiquement ici.
Je publie une application de démonstration de Google Cloud Messaging .
Assurez-vous de créer une application de démonstration avec un niveau d'API égal ou supérieur à Android OS 2.2 avec Google API
L'utilisateur doit se connecter à au moins un compte Google pour utiliser ce service.
Vous devez d'abord ajouter bibliothèque GCM .
Ensuite, créez sur la classe que j'ai nommée GCMIntentService
qui étend GCMBaseIntentService comme suit:
package com.example.gcmdemo;
import Android.content.Context;
import Android.content.Intent;
import Android.util.Log;
import com.google.Android.gcm.GCMBaseIntentService;
import com.google.Android.gcm.GCMConstants;
public class GCMIntentService extends GCMBaseIntentService {
private static final String TAG = "Push Notification Demo GCMIntentService";
@Override
protected void onError(Context context, String errorId) {
if(GCMConstants.ERROR_ACCOUNT_MISSING.equalsIgnoreCase(errorId)) {
Log.v(TAG, "Error Account Missing");
} else if(GCMConstants.ERROR_AUTHENTICATION_FAILED.equalsIgnoreCase(errorId)) {
Log.v(TAG, "Error Authentication Failed");
} else if(GCMConstants.ERROR_INVALID_PARAMETERS.equalsIgnoreCase(errorId)) {
Log.v(TAG, "Error Invalid Parameters");
} else if(GCMConstants.ERROR_INVALID_SENDER.equalsIgnoreCase(errorId)) {
Log.v(TAG, "Error Invalid Sender");
} else if(GCMConstants.ERROR_PHONE_REGISTRATION_ERROR.equalsIgnoreCase(errorId)) {
Log.v(TAG, "Error Phone Registration Error");
} else if(GCMConstants.ERROR_SERVICE_NOT_AVAILABLE.equalsIgnoreCase(errorId)) {
Log.v(TAG, "Error Service Not Available");
}
}
@Override
protected void onMessage(Context context, Intent intent) {
// App Server Sends message as key value pairs
String value1 = intent.getStringExtra("key1");
String value2 = intent.getStringExtra("key2");
Log.v(TAG, "key1: "+value1 );
Log.v(TAG, "key2: "+value2 );
}
@Override
protected void onRegistered(Context context, String regId) {
Log.v(TAG, "Successfull Registration : "+regId);
}
@Override
protected void onUnregistered(Context context, String regId) {
Log.v(TAG, "Successfully Unregistred : "+regId);
}
@Override
protected String[] getSenderIds(Context context) {
return super.getSenderIds(context);
}
@Override
protected void onDeletedMessages(Context context, int total) {
super.onDeletedMessages(context, total);
}
@Override
protected boolean onRecoverableError(Context context, String errorId) {
return super.onRecoverableError(context, errorId);
}
}
Voici comment vérifier l'inscription dans l'activité de démonstration suivante:
package com.example.gcmdemo;
import Android.app.Activity;
import Android.os.Bundle;
import Android.util.Log;
import Android.view.Menu;
import com.google.Android.gcm.GCMRegistrar;
public class MainActivity extends Activity {
private static final String TAG = "Push Notification Demo Activity";
private static final String SENDER_ID = "1069713227710";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GCMRegistrar.checkDevice(this);
GCMRegistrar.checkManifest(this);
final String regId = GCMRegistrar.getRegistrationId(this);
if (regId.equals("")) {
GCMRegistrar.register(this, SENDER_ID);
} else {
Log.v(TAG, "Already registered : "+regId);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
Et enfin le manifeste de démonstration:
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.example.gcmdemo"
Android:versionCode="1"
Android:versionName="1.0" >
<uses-sdk
Android:minSdkVersion="8"
Android:targetSdkVersion="8" />
<permission
Android:name="com.example.gcmdemo.permission.C2D_MESSAGE"
Android:protectionLevel="signature" />
<uses-permission Android:name="com.example.gcmdemo.permission.C2D_MESSAGE" />
<!-- App receives GCM messages. -->
<uses-permission Android:name="com.google.Android.c2dm.permission.RECEIVE" />
<!-- GCM connects to Google Services. -->
<uses-permission Android:name="Android.permission.INTERNET" />
<!-- GCM requires a Google account. -->
<uses-permission Android:name="Android.permission.GET_ACCOUNTS" />
<!-- Keeps the processor from sleeping when a message is received. -->
<uses-permission Android:name="Android.permission.WAKE_LOCK" />
<application
Android:icon="@drawable/ic_launcher"
Android:label="@string/app_name"
Android:theme="@style/AppTheme" >
<activity
Android:name=".MainActivity"
Android:label="@string/title_activity_main" >
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver
Android:name="com.google.Android.gcm.GCMBroadcastReceiver"
Android:permission="com.google.Android.c2dm.permission.SEND" >
<intent-filter>
<action Android:name="com.google.Android.c2dm.intent.RECEIVE" />
<action Android:name="com.google.Android.c2dm.intent.REGISTRATION" />
<category Android:name="com.example.gcmdemo" />
</intent-filter>
</receiver>
<service Android:name=".GCMIntentService" />
</application>
</manifest>
Vous aurez également besoin de script côté serveur tiers tel que spécifié ici .
Envoi d'une notification push à l'aide de FCM
Google a déconseillé Google Cloud Messaging (GCM) et a lancé un nouveau serveur de notification Push qui est Firebase Cloud Messaging (FCM). FCM est identique à GCM, FCM est également une solution de messagerie multiplateforme pour les plates-formes mobiles
La messagerie Firebase Cloud peut envoyer trois types de messages ( types de messages )
1.Message de notification
2.Message de données
3. message avec notification et données
Messagerie cloud Firebase Étapes d'intégration: -
1. Configurer un nouveau projet ou un projet d'importation dans la console Firbase (https://firebase.google.com/)
2.Ajoutez le même nom de package d'application dans l'application Firebase.
3.Obtenez le fichier "google-services.json" et placez-le dans le dossier d'application de votre projet.Ce fichier contient toutes les URL et les clés des services Google, alors ne modifiez pas ou ne modifiez pas ce fichier.
4.Ajoutez de nouvelles dépendances Gradle dans Project for Firebase.
//app/build.gradle
dependencies {
compile 'com.google.firebase:firebase-messaging:9.6.0'
}
apply plugin: 'com.google.gms.google-services'
5.Créez une classe qui contient toutes les valeurs constantes que nous utilisons dans l'application pour 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. Créez une classe nommée MyFirebaseInstanceIDService.Java qui recevra l'ID d'enregistrement Firebase qui sera unique à chaque application. L'ID d'enregistrement est utilisé pour envoyer un message à un seul appareil.
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.Créez une classe de service supplémentaire nommée MyFirebaseMessagingService.Java. Cela recevra des messages 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.Dans AndroidManifest.xml, ajoutez ces deux services Firebase MyFirebaseMessagingService et 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 -->
Maintenant simplement Envoyez votre premier message
Remarques:
* 1.Lisez le document Google pour Firebase Cloud Messaging *
2.Si vous souhaitez migrer une application client GCM pour Android vers Firebase Cloud Messaging, suivez ces étapes et Doc ( Migrate une application client GCM )
3.Exemple de tutoriel et de code Android ( Recevoir des notifications de réengagement )
vous suggère personnellement qu'au lieu de GCM, il existe également une autre bibliothèque nommée Parse pour PushNotification, cela fonctionne de la même manière que Google Cloud Messaging, mais c'est tellement tellement tellement facile que GCM
Il vous suffit de télécharger le fichier JAR et la simple ligne de code deux-trois pour Push-NOTIFICATION
pour apprendre à utiliser ce site https://parse.com/tutorials/Android-Push-notifications
Même vous n'avez pas à utiliser PHP ou tout type de code côté serveur qu'il vous fournit
regarde je vais te faire une démo
Parse.initialize(this, "YOUR_APP_ID", "YOUR_CLIENT_KEY");
PushService.setDefaultPushCallback(this, YourDefaultActivity.class);
du code ci-dessus est suffisant pour recevoir une notification Push
si vous voulez envoyer une notification ils fournissent Nice UI regardez l'image de UI qu'ils fournissent