FAQ sur le SDK Android de Pushwoosh
- À quoi ressemblent un jeton push Android et un HWID ?
- Comment puis-je obtenir le jeton 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 dans 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 jeton push Android et un HWID ?
Anchor link toLes jetons push des appareils Android diffèrent en longueur (moins de 255 caractères) et commencent par APA91b, par exemple :
APA91bFoi3lMMre9G3XzR1LrF4ZT82_15MsMdEICogXSLB8-MrdkRuRQFwNI5u8Dh0cI90ABD3BOKnxkEla8cGdisbDHl5cVIkZah5QUhSAxzx4Roa7b4xy9tvx9iNSYw-eXBYYd8k1XKf8Q_Qq1X9-x-U-Y79vdPq
Les jetons 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 jeton push de mon appareil Android ?
Anchor link toVous pouvez obtenir le jeton 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 jeton 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 identifiant 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 réception de la réponse “NotRegistered” de FCM, qui peut être renvoyée après la deuxième tentative pour atteindre un appareil spécifique. Cela signifie que vous devez envoyer 2 notifications push à un appareil désabonné pour le faire supprimer de la base de données.
Voici le scénario le plus courant décrit dans la documentation de 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 renvoie un message NotRegistered.
- Pushwoosh supprime le jeton 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 obtienne 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 afin de 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 le formatage correctement.
Comment définir une icône de notification dans 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.
Voir plus sur le comportement dans 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 le nom de l’image de l’icône (sans l’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 routage pour distribuer les événements entre les services. Tout d’abord, ajoutez la dépendance pushwoosh-firebase à côté du module principal de Pushwoosh :
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)) { //this is a Pushwoosh push, SDK will handle it automatically PushwooshFcmHelper.onMessageReceived(this, remoteMessage) } else { //this is not a Pushwoosh push, you should handle it by yourself dispatchNonPushwooshMessage(remoteMessage); } }
private fun dispatchNonPushwooshMessage(remoteMessage: RemoteMessage) { // Implement your push handling logics here }}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)) { //this is a Pushwoosh push, SDK will handle it automatically PushwooshFcmHelper.onMessageReceived(this, remoteMessage); } else { //this is not a Pushwoosh push, you should handle it by yourself dispatchNonPushwooshMessage(remoteMessage); } }
private void dispatchNonPushwooshMessage(RemoteMessage remoteMessage) { // Implement your push handling logics here }}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 reçues spécifiques d’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;
//cancel pushes only with a specific flag 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.