Guide d'intégration de base du SDK Android
Cette section contient des informations sur la manière d’intégrer le SDK Pushwoosh dans votre application Android.
Prérequis
Anchor link toPour intégrer le SDK Android de Pushwoosh dans votre application, vous aurez besoin des éléments suivants :
Étapes d’intégration
Anchor link to1. Configurer Firebase Cloud Messaging
Anchor link toTout d’abord, connectez votre projet Android à Firebase :
- Ouvrez votre projet dans Android Studio
- Allez dans Tools > Firebase > Cloud Messaging et cliquez sur « Set up Firebase Cloud Messaging »
- Suivez les instructions de l’assistant. Lors de la dernière étape, l’assistant ajoutera les dépendances nécessaires à vos fichiers
build.gradle
2. Ajouter le SDK Pushwoosh
Anchor link toAjoutez la dépendance de la bibliothèque Pushwoosh au fichier build.gradle de votre application :
implementation 'com.pushwoosh:pushwoosh-firebase:6.+'
Remplacez « + » par la version actuelle du SDK Android de Pushwoosh
3. Ajouter les métadonnées Pushwoosh à AndroidManifest.xml
Anchor link toOuvrez votre fichier AndroidManifest.xml et ajoutez les métadonnées suivantes à l’intérieur de la balise <application>
:
<meta-data android:name="com.pushwoosh.appid" android:value="__YOUR_APP_CODE__" /><meta-data android:name="com.pushwoosh.senderid" android:value="@string/fcm_sender_id" /><meta-data android:name="com.pushwoosh.apitoken" android:value="__YOUR_DEVICE_API_TOKEN__" />
Où :
com.pushwoosh.appid
est votre code d’application Pushwooshcom.pushwoosh.apitoken
est votre Jeton d’API d’appareil Pushwoosh
Important : Assurez-vous de donner au jeton l’accès à la bonne application dans votre Panneau de contrôle Pushwoosh. En savoir plus
Pour définir com.pushwoosh.senderid
, ajoutez fcm_sender_id au fichier res/values/strings.xml de votre projet :
<resources> <string name="fcm_sender_id">__YOUR_FCM_SENDER_ID__</string></resources>
4. Code d’initialisation
Anchor link toEnregistrez-vous pour les notifications push en ajoutant ce code à votre logique d’initialisation :
Pushwoosh.getInstance().registerForPushNotifications()
5. Lancer le projet
Anchor link to- Compilez et lancez le projet.
- Allez dans le Panneau de contrôle Pushwoosh et envoyez une notification push.
- Vous devriez voir la notification dans l’application.
Intégration étendue
Anchor link toÀ ce stade, vous avez déjà intégré le SDK et pouvez envoyer et recevoir des notifications push. Explorons maintenant les fonctionnalités principales.
Notifications push
Anchor link toDans le SDK Pushwoosh, il existe deux callbacks conçus pour gérer les notifications push :
onMessageReceived
: Cette méthode est invoquée lorsqu’une notification push est reçue.onMessageOpened
: Cette méthode est appelée lorsque l’utilisateur interagit avec la notification (l’ouvre).
Ces callbacks permettent aux développeurs de gérer la réception et l’interaction de l’utilisateur avec les notifications push au sein de leurs applications :
<meta-data android:name="com.pushwoosh.notification_service_extension" android:value="com.your.package.YourNotificationServiceExtension" />
import android.util.Logimport com.pushwoosh.notification.NotificationServiceExtensionimport com.pushwoosh.notification.PushMessage
class YourNotificationServiceExtension : NotificationServiceExtension() {
override fun onMessageReceived(data: PushMessage): Boolean { Log.d("Pushwoosh", "onMessageReceived: ${data.toJson()}") return false }
override fun onMessageOpened(message: PushMessage) { Log.d("Pushwoosh", "onMessageOpened: ${message.toJson()}") }
}
import android.util.Log;import com.pushwoosh.notification.NotificationServiceExtension;import com.pushwoosh.notification.PushMessage;
public class YourNotificationServiceExtensionJava extends NotificationServiceExtension {
@Override public boolean onMessageReceived(PushMessage data) { Log.d("Pushwoosh", "onMessageReceived: " + data.toJson()); return false; }
@Override public void onMessageOpened(PushMessage message) { Log.d("Pushwoosh", "onMessageOpened: " + message.toJson()); }}
Configuration utilisateur
Anchor link toEn vous concentrant sur le comportement et les préférences de chaque utilisateur, vous pouvez fournir un contenu personnalisé, ce qui entraîne une satisfaction et une fidélité accrues des utilisateurs.
import com.pushwoosh.Pushwooshimport com.pushwoosh.tags.TagsBundleimport java.util.Date
class Registration {
public void afterUserLogin(User user) { Pushwoosh pushwoosh = Pushwoosh.getInstance()
// Définir l'ID utilisateur if (user.getUserId() != null) { pushwoosh.setUserId(user.getUserId()) }
// Définir l'e-mail de l'utilisateur if (user.getEmail() != null) { pushwoosh.setEmail(user.getEmail()) }
// Définir des informations utilisateur supplémentaires comme tags pour Pushwoosh if (user.getUserDetails() != null) { val details = user.getUserDetails() val tagsBuilder = TagsBundle.Builder()
if (details.getAge() != null) { tagsBuilder.putInt("age", details.getAge()) }
if (details.getUserName() != null) { tagsBuilder.putString("name", details.getUserName()) }
if (details.lastLoginDate() != null) { tagsBuilder.putDate("last_login", details.getLastLoginDate()) }
// Construire et envoyer les tags val tags = tagsBuilder.build() if (!tags.isEmpty()) { pushwoosh.setTags(tags) } } }}
import com.pushwoosh.Pushwoosh;import com.pushwoosh.tags.TagsBundle;import java.util.Date;
public class Registration {
public void afterUserLogin(User user) { Pushwoosh pushwoosh = Pushwoosh.getInstance();
// Définir l'ID utilisateur if (user.getUserId() != null) { pushwoosh.setUserId(user.getUserId()); }
// Définir l'e-mail de l'utilisateur if (user.getEmail() != null) { pushwoosh.setEmail(user.getEmail()); }
// Définir des informations utilisateur supplémentaires comme tags pour Pushwoosh if (user.getUserDetails() != null) { UserDetails details = user.getUserDetails(); TagsBundle.Builder tagsBuilder = new TagsBundle.Builder();
if (details.getAge() != null) { tagsBuilder.putInt("age", details.getAge()); }
if (details.getUserName() != null) { tagsBuilder.putString("name", details.getUserName()); }
if (details.getLastLoginDate() != null) { tagsBuilder.putDate("last_login", details.getLastLoginDate()); }
// Construire et envoyer les tags TagsBundle tags = tagsBuilder.build(); if (!tags.isEmpty()) { pushwoosh.setTags(tags); } } }}
Tags
Anchor link toLes tags sont des paires clé-valeur attribuées aux utilisateurs ou aux appareils, permettant une segmentation basée sur des attributs tels que les préférences ou le comportement, ce qui rend possible la messagerie ciblée.
import com.pushwoosh.Pushwooshimport com.pushwoosh.tags.TagsBundleimport java.util.List
class UpdateUser { public void afterUserUpdateProfile(User user) { val pushwoosh = Pushwoosh.getInstance() val tagsBuilder = TagsBundle.Builder()
// Définir la liste des catégories favorites if (user.favoriteCategories != null && user.favoriteCategories.isNotEmpty()) { tagsBuilder.putList("favorite_categories", user.getFavoriteCategories()) }
// Définir les informations de paiement tagsBuilder.putBoolean("is_subscribed", user.isSubscribed()) tagsBuilder.putString("payment_status", user.getPaymentStatus()) tagsBuilder.putString("billing_address", user.getBillingAddress())
// Construire et envoyer les tags pushwoosh.setTags(tagsBuilder.build()) }}
import com.pushwoosh.Pushwoosh;import com.pushwoosh.tags.TagsBundle;import java.util.List;
public class UpdateUser { public void afterUserUpdateProfile(User user) { Pushwoosh pushwoosh = Pushwoosh.getInstance(); TagsBundle.Builder tagsBuilder = TagsBundle.Builder();
// Définir la liste des catégories favorites if (user.getFavoriteCategories() != null && !user.getFavoriteCategories().isEmpty()) { tagsBuilder.putList("favorite_categories", user.getFavoriteCategories()); }
// Définir les informations de paiement tagsBuilder.putBoolean("is_subscribed", user.isSubscribed()); tagsBuilder.putString("payment_status", user.getPaymentStatus()); tagsBuilder.putString("billing_address", user.getBillingAddress());
// Construire et envoyer les tags pushwoosh.setTags(tagsBuilder.build()); }}
Événements
Anchor link toLes événements sont des actions ou des occurrences spécifiques de l’utilisateur au sein de l’application qui peuvent être suivies pour analyser le comportement et déclencher des messages ou des actions correspondants.
import com.pushwoosh.Pushwooshimport com.pushwoosh.inapp.InAppManagerimport com.pushwoosh.tags.TagsBundleimport java.util.Date
class Registration {
public void afterUserLogin(User user) { if (user.getUserName() != null && user.getLastLoginDate() != null) { val attributes = TagsBundle.Builder() .putString("name", user.getUserName()) .putDate("last_login", user.getLastLoginDate()) .build()
InAppManager.getInstance().postEvent("login", attributes) } }
public void afterUserPurchase(User user, Product product) { Pushwoosh pushwoosh = Pushwoosh.getInstance()
// Suivre l'événement d'achat val purchaseAttributes = TagsBundle.Builder() .putString("product_id", product.getId()) .putString("product_name", product.getName()) .putDouble("price", product.getPrice()) .putInt("quantity", product.getQuantity()) .build()
InAppManager.getInstance().postEvent("purchase", purchaseAttributes)
// Définir les tags utilisateur val tagsBuilder = TagsBundle.Builder() tagsBuilder.putDate("last_purchase_date", Date()) val lifetimeSpend = getCurrentLifetimeSpend() + product.getPrice() tagsBuilder.putDouble("lifetime_spend", getCurrentLifetimeSpend()) pushwoosh.setTags(tagsBuilder.build()) }}
import com.pushwoosh.Pushwoosh;import com.pushwoosh.tags.TagsBundle;import java.util.Date;
public class Registration {
public void afterUserLogin(User user) { if (user.getUserName() != null && user.getLastLoginDate() != null) { TagsBundle attributes = new TagsBundle.Builder() .putString("name", user.getUserName()) .putDate("last_login", user.getLastLoginDate()) .build();
Pushwoosh.getInstance().postEvent("login", attributes); } }
public void afterUserPurchase(User user, Product product) { Pushwoosh pushwoosh = Pushwoosh.getInstance();
// Suivre l'événement d'achat TagsBundle purchaseAttributes = new TagsBundle.Builder() .putString("product_id", product.getId()) .putString("product_name", product.getName()) .putDouble("price", product.getPrice()) .putInt("quantity", product.getQuantity()) .build();
Pushwoosh.getInstance().postEvent("purchase", purchaseAttributes);
// Définir les tags utilisateur TagsBundle.Builder tagsBuilder = new TagsBundle.Builder(); tagsBuilder.putDate("last_purchase_date", new Date()); double lifetimeSpend = getCurrentLifetimeSpend() + product.getPrice(); tagsBuilder.putDouble("lifetime_spend", getCurrentLifetimeSpend()); pushwoosh.setTags(tagsBuilder.build()); }}
Rich Media
Anchor link toLe Rich Media fait référence au contenu interactif et multimédia, tel que des images, des vidéos ou du HTML, utilisé dans les notifications et les messages in-app pour améliorer l’engagement des utilisateurs.
Pour activer la fonctionnalité Modal Rich Media, vous devez la configurer dans le fichier AndroidManifest.xml
de votre application en ajoutant l’entrée de métadonnées suivante :
<meta-data android:name="com.pushwoosh.rich_media_type" android:value="Modal" />
import android.util.Logimport com.pushwoosh.richmedia.RichMediaimport com.pushwoosh.richmedia.RichMediaManagerimport com.pushwoosh.richmedia.RichMediaPresentingDelegateimport com.pushwoosh.inapp.view.config.ModalRichmediaConfigimport com.pushwoosh.inapp.view.config.enums.*
class MainActivity : AppCompatActivity(), RichMediaPresentingDelegate {
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) RichMediaManager.setDelegate(this)
// Configurer le Rich Media modal val config = ModalRichmediaConfig() .setViewPosition(ModalRichMediaViewPosition.BOTTOM) .setPresentAnimationType(ModalRichMediaPresentAnimationType.SLIDE_UP) .setDismissAnimationType(ModalRichMediaDismissAnimationType.SLIDE_DOWN)
// Appliquer la configuration RichMediaManager.setDefaultRichMediaConfig(config) }
override fun shouldPresent(richMedia: RichMedia): Boolean { Log.d("Pushwoosh", "Le Rich Media sera présenté avec : ${richMedia.content}") return true }
override fun onPresent(richMedia: RichMedia) { Log.d("Pushwoosh", "Le Rich Media a été présenté : ${richMedia.content}") }
override fun onClose(richMedia: RichMedia) { Log.d("Pushwoosh", "Le Rich Media a été fermé : ${richMedia.content}") }
override fun onError(richMedia: RichMedia, pushwooshException: PushwooshException) { Log.e("Pushwoosh", "Échec de la présentation du Rich Media : ${richMedia.content}. Erreur : ${pushwooshException.message}") }}
import android.util.Log;import com.pushwoosh.richmedia.RichMedia;import com.pushwoosh.richmedia.RichMediaManager;import com.pushwoosh.richmedia.RichMediaPresentingDelegate;import com.pushwoosh.inapp.view.config.ModalRichmediaConfig;import com.pushwoosh.inapp.view.config.enums.*;
public class MainActivity extends AppCompatActivity implements RichMediaPresentingDelegate {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); RichMediaManager.setDelegate(this);
// Configurer le Rich Media modal ModalRichmediaConfig config = new ModalRichmediaConfig() .setViewPosition(ModalRichMediaViewPosition.BOTTOM) .setPresentAnimationType(ModalRichMediaPresentAnimationType.SLIDE_UP) .setDismissAnimationType(ModalRichMediaDismissAnimationType.SLIDE_DOWN);
// Appliquer la configuration RichMediaManager.setDefaultRichMediaConfig(config); }
@Override public boolean shouldPresent(RichMedia richMedia) { Log.d("Pushwoosh", "Le Rich Media sera présenté avec : " + richMedia.getContent()); return true; }
@Override public void onPresent(RichMedia richMedia) { Log.d("Pushwoosh", "Le Rich Media a été présenté : " + richMedia.getContent()); }
@Override public void onClose(RichMedia richMedia) { Log.d("Pushwoosh", "Le Rich Media a été fermé : " + richMedia.getContent()); }
@Override public void onError(RichMedia richMedia, PushwooshException pushwooshException) { Log.e("Pushwoosh", "Échec de la présentation du Rich Media : " + richMedia.getContent() + ". Erreur : " + pushwooshException.getMessage()); }}
Dépannage
Anchor link toSi vous rencontrez des problèmes pendant le processus d’intégration, veuillez vous référer à la section support et communauté.