Passer au contenu

FAQ sur le SDK Android de Pushwoosh

À quoi ressemblent un token push Android et un HWID ?

Anchor link to

Les 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 to

Vous 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.

Capture d'écran montrant la sortie logcat avec les informations d'enregistrement du token push affichées dans Android Studio

Quelles autorisations sont nécessaires et lesquelles sont facultatives ?

Anchor link to

Lorsqu’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 to

Vous 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 to

Pushwoosh 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 :

  1. Votre abonné désinstalle l’application.
  2. Pushwoosh envoie un message au serveur FCM.
  3. Le serveur FCM envoie le message à l’appareil de votre utilisateur.
  4. 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.
  5. Le client FCM sur l’appareil informe le serveur FCM que l’application a été désinstallée.
  6. Le serveur FCM marque l’ID d’enregistrement pour suppression.
  7. Pushwoosh envoie un autre message à FCM.
  8. FCM retourne un message NotRegistered.
  9. 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 to

Oui, 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 to

Dans 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 to

Vous 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 :

build.gradle
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
}
}

Enregistrez les routeurs dans votre AndroidManifest.xml :

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 to

Lorsque 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 to

Si 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 :

MainActivity.java
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 to

Vos 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.