FAQ sur le SDK Android de Pushwoosh
- À quoi ressemblent un token push Android et un HWID ?
- Comment puis-je obtenir le token push de mon appareil Android ?
- Quelles autorisations sont nécessaires et lesquelles sont facultatives ?
- Comment définir un UserID ?
- Quelle est la précision du nombre total d’abonnés Android ?
- Puis-je utiliser des balises HTML dans les notifications push envoyées à Android ?
- Comment définir une icône de notification sous Android Lollipop (et versions ultérieures) ?
- Utiliser le SDK Pushwoosh avec d’autres services FCM
- Utiliser Pushwoosh avec les bibliothèques LeakCanary ou AppMetrica
- Supprimer une notification reçue d’un appareil
À quoi ressemblent un token push Android et un HWID ?
Anchor link toLes tokens push des appareils Android ont une longueur variable (moins de 255 caractères) et commencent par APA91b, par exemple :
APA91bFoi3lMMre9G3XzR1LrF4ZT82_15MsMdEICogXSLB8-MrdkRuRQFwNI5u8Dh0cI90ABD3BOKnxkEla8cGdisbDHl5cVIkZah5QUhSAxzx4Roa7b4xy9tvx9iNSYw-eXBYYd8k1XKf8Q_Qq1X9-x-U-Y79vdPq
Les tokens contiennent souvent un préfixe séparé par un deux-points avant APA91b, par exemple : eQnyCE6ULAQ:APA91bGrh4ya3b_owo9tshZNVAGhZdGMGb3sA5HbM...
Pushwoosh utilise des UUID comme HWID, c’est-à-dire des chaînes générées aléatoirement de 32 caractères alphanumériques : 123e4567-e89b-12d3-a456-426655440000
Comment puis-je obtenir le token push de mon appareil Android ?
Anchor link toVous pouvez obtenir le token push de votre appareil Android dans le journal de la console. Utilisez l’outil logcat dans Android Studio.
Ouvrez monitor.bat dans %USERPROFILE%\AppData\Local\Android\sdk\tools\monitor.bat, connectez votre appareil à un PC et autorisez le débogage USB dans les paramètres Android. Exécutez votre application sur l’appareil. Localisez /registerDevice, trouvez le token push de votre appareil pour l’utiliser plus tard dans les Appareils de Test.

Quelles autorisations sont nécessaires et lesquelles sont facultatives ?
Anchor link toLorsqu’elle est installée sur un appareil Android, l’application demandera les autorisations suivantes en lien avec le SDK Pushwoosh :
<!-- FCM se connecte aux services Firebase. --> <uses-permission android:name="android.permission.INTERNET"/>
<!-- Empêche le processeur de se mettre en veille lorsqu'un message est reçu. --> <uses-permission android:name="android.permission.WAKE_LOCK"/>
<!-- Cette autorisation est utilisée pour déterminer si l'appareil peut accéder au réseau. --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!-- Cette application a l'autorisation de s'enregistrer et de recevoir des messages de données. --> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />Notre SDK ne demande pas l’autorisation d’accéder aux images, aux contacts de l’appareil, etc.
Comment définir un UserID ?
Anchor link toVous pouvez définir un identifiant utilisateur (UserID), qui peut être un ID Facebook, un nom d’utilisateur, un e-mail ou tout autre ID utilisateur unique. Cela vous permet de faire correspondre les données et les événements sur plusieurs appareils associés au même utilisateur. Pour définir l’UserID, appelez la méthode setUserId.
Exemple
Pushwoosh.getInstance().setUserId("testUser");Quelle est la précision du nombre total d’abonnés Android ?
Anchor link toPushwoosh efface les appareils Android désabonnés de la base de données après avoir reçu la réponse “NotRegistered” de FCM, qui peut être retournée après la deuxième tentative de joindre un appareil spécifique. Cela signifie que vous devez envoyer 2 notifications push à un appareil désabonné pour qu’il soit supprimé de la base de données.
Voici le scénario le plus courant décrit dans la documentation FCM :
- Votre abonné désinstalle l’application.
- Pushwoosh envoie un message au serveur FCM.
- Le serveur FCM envoie le message à l’appareil de votre utilisateur.
- Le client FCM sur l’appareil reçoit le message et détecte que votre application a été désinstallée ; les détails de la détection dépendent de la plateforme sur laquelle l’application s’exécute.
- Le client FCM sur l’appareil informe le serveur FCM que l’application a été désinstallée.
- Le serveur FCM marque l’ID d’enregistrement pour suppression.
- Pushwoosh envoie un autre message à FCM.
- FCM retourne un message NotRegistered.
- Pushwoosh supprime le token push de votre base d’utilisateurs.
La suppression complète de l’ID d’enregistrement de FCM peut prendre un certain temps. Il est donc possible qu’un message envoyé à l’étape 7 ci-dessus reçoive un ID de message valide en réponse, même si le message ne sera pas livré à l’application cliente.
Puis-je utiliser des balises HTML dans les notifications push envoyées à Android ?
Anchor link toOui, sous Android, vous pouvez utiliser les balises HTML suivantes pour modifier l’apparence d’une notification push :
<span style="color: green;"><b><i><span style="text-decoration: underline;">Hello world!Hello hi hey</span></i></b></span>Placez ces balises HTML dans le champ de saisie Message, et utilisez-les également dans la requête API. Certains appareils Android peuvent ne pas traiter correctement ces balises HTML, mais la plupart des appareils affichent correctement le formatage.
Comment définir une icône de notification sous Android Lollipop (et versions ultérieures) ?
Anchor link toDans Android Lollipop, les icônes ont été modifiées pour être uniquement blanches. Par conséquent, si vous sélectionnez targetSdkVersion >= 21 dans votre fichier AndroidManifest.xml, Android n’utilisera que le canal alpha de l’icône.
Pour en savoir plus sur ce comportement, consultez la documentation Android.
Le système ignore tous les canaux non-alpha dans les icônes d’action et dans l’icône de notification principale. Supposez que ces icônes seront uniquement alpha. Le système dessine les icônes de notification en blanc et les icônes d’action en gris foncé. Ceci est hors du contrôle du SDK Pushwoosh.
1. Créez l’icône de notification conformément aux directives Android. Selon la documentation, le système ignorera toutes les couleurs.
2. Nommez l’icône pw_notification.png et placez-la dans le dossier res/drawable. Le SDK Pushwoosh utilisera cette icône par défaut pour les notifications.
3. Alternativement, vous pouvez utiliser l’API distante et définir la valeur du paramètre "android_icon" sur l’image de l’icône (sans extension de fichier).
Utiliser le SDK Pushwoosh avec d’autres services FCM
Anchor link toVous pouvez utiliser Pushwoosh avec d’autres SDK qui utilisent FCM pour la messagerie push. Pour ce faire, créez un service de routeur pour distribuer les événements entre les services. Tout d’abord, ajoutez la dépendance pushwoosh-firebase à côté du module Pushwoosh principal :
implementation 'com.pushwoosh:pushwoosh-firebase:6.0.3'Créez la classe de routage :
import com.pushwoosh.firebase.PushwooshFcmHelper;
class FirebaseMessagingRouterService : FirebaseMessagingService() {
override fun onNewToken(token: String?) { super.onNewToken(token) PushwooshFcmHelper.onTokenRefresh(token) sendTokenToAnotherService(token) }
override fun onMessageReceived(remoteMessage: RemoteMessage) { if (PushwooshFcmHelper.isPushwooshMessage(remoteMessage)) { //c'est un push Pushwoosh, le SDK le gérera automatiquement PushwooshFcmHelper.onMessageReceived(this, remoteMessage) } else { //ce n'est pas un push Pushwoosh, vous devez le gérer vous-même dispatchNonPushwooshMessage(remoteMessage); } }
private fun dispatchNonPushwooshMessage(remoteMessage: RemoteMessage) { // Implémentez votre logique de gestion des pushs ici }}import com.pushwoosh.firebase.PushwooshFcmHelper;
public class FirebaseMessagingRouterService extends FirebaseMessagingService {
@Override public void onNewToken(String token) { super.onNewToken(token); PushwooshFcmHelper.onTokenRefresh(token); sendTokenToAnotherService(token); }
@Override public void onMessageReceived(RemoteMessage remoteMessage) { if (PushwooshFcmHelper.isPushwooshMessage(remoteMessage)) { //c'est un push Pushwoosh, le SDK le gérera automatiquement PushwooshFcmHelper.onMessageReceived(this, remoteMessage); } else { //ce n'est pas un push Pushwoosh, vous devez le gérer vous-même dispatchNonPushwooshMessage(remoteMessage); } }
private void dispatchNonPushwooshMessage(RemoteMessage remoteMessage) { // Implémentez votre logique de gestion des pushs ici }}Enregistrez les routeurs dans votre AndroidManifest.xml :
<service android:name=".FirebaseMessagingRouterService"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT"/> </intent-filter></service>Utiliser Pushwoosh avec les bibliothèques LeakCanary ou AppMetrica
Anchor link toLorsque vous intégrez des outils d’analyse tels que LeakCanary, AppMetrica ou autres, ces bibliothèques démarrent un nouveau processus, créant une nouvelle instance de l’application. Comme vous ne pouvez pas écouter les notifications push dans un autre processus, cela entraîne le lancement d’une java.lang.NullPointerException.
Si vous appelez registerForPushNotifications à l’intérieur de Application.onCreate(), vous devez vérifier si vous êtes dans le processus principal de l’application. Utilisez le code suivant pour effectuer cette vérification :
List<ActivityManager.RunningAppProcessInfo> runningAppProcesses = ((ActivityManager) getSystemService(Context.ACTIVITY_SERVICE)).getRunningAppProcesses();if (runningAppProcesses != null && runningAppProcesses.size() != 0) { for (ActivityManager.RunningAppProcessInfo runningAppProcessInfo : runningAppProcesses) { boolean isCurrentProcess = runningAppProcessInfo.pid == android.os.Process.myPid(); boolean isMainProcessName = getPackageName().equals(runningAppProcessInfo.processName); if (isCurrentProcess && isMainProcessName) {
Pushwoosh.getInstance().registerForPushNotifications(...); break; } }}Supprimer localement des notifications spécifiques reçues sur un appareil
Anchor link toSi vous souhaitez supprimer une notification push non pertinente lors de l’exécution d’une action spécifique dans votre application, vous pouvez utiliser l’approche suivante :
public class MainActivity extends AppCompatActivity {
List<NotificationCreatedEvent> savedPushes = new ArrayList<>();
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Pushwoosh.getInstance().registerForPushNotifications();
PushwooshNotificationSettings.setMultiNotificationMode(true);
findViewById(R.id.clear_button).setOnClickListener( v -> { cancelPushes(); });
EventBus.subscribe(NotificationCreatedEvent.class, event -> { try { if (event.getMessage().getCustomData() == null) return;
//annuler uniquement les pushs avec un drapeau spécifique if (new JSONObject(event.getMessage().getCustomData()).getBoolean("cancel")) { savedPushes.add(event); } } catch (JSONException e) { } }); } private void cancelPushes() { NotificationManager manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
if (manager == null) { return; }
for (NotificationCreatedEvent event : savedPushes) { manager.cancel(event.getMessageTag(), event.getMessageId()); } }}Partagez vos commentaires avec nous
Anchor link toVos commentaires nous aident à créer une meilleure expérience. Si vous rencontrez des difficultés lors du processus d’intégration du SDK, partagez vos réflexions avec nous via ce formulaire.