FAQ zum Pushwoosh Android SDK
- Wie sehen ein Android-Push-Token und eine HWID aus?
- Wie erhalte ich mein Android-Geräte-Push-Token?
- Welche Berechtigungen sind notwendig und welche optional?
- Wie setze ich eine UserID?
- Wie genau ist die Gesamtzahl der Android-Abonnenten?
- Kann ich HTML-Tags in Pushes verwenden, die an Android gesendet werden?
- Wie stellt man ein Benachrichtigungssymbol in Android Lollipop (und späteren Versionen) ein?
- Verwendung des Pushwoosh SDK mit anderen FCM-Diensten
- Verwendung von Pushwoosh mit LeakCanary- oder AppMetrica-Bibliotheken
- Löschen einer empfangenen Benachrichtigung von einem Gerät
Wie sehen ein Android-Push-Token und eine HWID aus?
Anchor link toAndroid-Geräte-Push-Token unterscheiden sich in der Länge (weniger als 255 Zeichen) und beginnen mit APA91b, zum Beispiel:
APA91bFoi3lMMre9G3XzR1LrF4ZT82_15MsMdEICogXSLB8-MrdkRuRQFwNI5u8Dh0cI90ABD3BOKnxkEla8cGdisbDHl5cVIkZah5QUhSAxzx4Roa7b4xy9tvx9iNSYw-eXBYYd8k1XKf8Q_Qq1X9-x-U-Y79vdPq
Token enthalten oft ein durch einen Doppelpunkt getrenntes Präfix vor APA91b, zum Beispiel: eQnyCE6ULAQ:APA91bGrh4ya3b_owo9tshZNVAGhZdGMGb3sA5HbM...
Pushwoosh verwendet UUIDs als HWIDs, d.h. zufällig generierte Zeichenketten aus 32 alphanumerischen Zeichen: 123e4567-e89b-12d3-a456-426655440000
Wie erhalte ich mein Android-Geräte-Push-Token?
Anchor link toSie können Ihr Android-Geräte-Push-Token im Konsolenprotokoll erhalten. Verwenden Sie das logcat-Tool in Android Studio.
Öffnen Sie monitor.bat unter %USERPROFILE%\AppData\Local\Android\sdk\tools\monitor.bat, verbinden Sie Ihr Gerät mit dem PC und erlauben Sie das USB-Debugging in den Android-Einstellungen. Führen Sie Ihre Anwendung auf dem Gerät aus. Suchen Sie nach /registerDevice, um das Push-Token für Ihr Gerät zu finden, das Sie später in den Testgeräten verwenden können.

Welche Berechtigungen sind notwendig und welche optional?
Anchor link toWenn die Anwendung auf einem Android-Gerät installiert wird, fragt sie im Zusammenhang mit dem Pushwoosh SDK nach den folgenden Berechtigungen:
<!-- FCM verbindet sich mit den Firebase-Diensten. --> <uses-permission android:name="android.permission.INTERNET"/>
<!-- Verhindert, dass der Prozessor in den Ruhezustand geht, wenn eine Nachricht empfangen wird. --> <uses-permission android:name="android.permission.WAKE_LOCK"/>
<!-- Diese Berechtigung wird verwendet, um festzustellen, ob das Gerät auf das Netzwerk zugreifen kann. --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!-- Diese App hat die Berechtigung, sich zu registrieren und Datennachrichten zu empfangen. --> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />Unser SDK fragt nicht nach der Berechtigung, auf Bilder, Gerätekontakte usw. zuzugreifen.
Wie setze ich eine UserID?
Anchor link toSie können eine Benutzerkennung (UserID) festlegen, die eine Facebook-ID, ein Benutzername, eine E-Mail-Adresse oder eine andere eindeutige Benutzer-ID sein kann. Dies ermöglicht es Ihnen, Daten und Ereignisse über mehrere Geräte hinweg abzugleichen, die demselben Benutzer zugeordnet sind. Um die UserID festzulegen, rufen Sie die Methode setUserId auf.
Beispiel
Pushwoosh.getInstance().setUserId("testUser");Wie genau ist die Gesamtzahl der Android-Abonnenten?
Anchor link toPushwoosh löscht abgemeldete Android-Geräte aus der Datenbank, nachdem die Antwort “NotRegistered” von FCM empfangen wurde, die nach dem zweiten Versuch, ein bestimmtes Gerät zu erreichen, zurückgegeben werden kann. Das bedeutet, dass Sie 2 Pushes an ein abgemeldetes Gerät senden müssen, damit es aus der Datenbank entfernt wird.
Das Folgende ist das häufigste Szenario, das in der FCM-Dokumentation beschrieben wird:
- Ihr Abonnent deinstalliert die App.
- Pushwoosh sendet eine Nachricht an den FCM-Server.
- Der FCM-Server sendet die Nachricht an das Gerät Ihres Benutzers.
- Der FCM-Client auf dem Gerät empfängt die Nachricht und stellt fest, dass Ihre Anwendung deinstalliert wurde; die Details der Erkennung hängen von der Plattform ab, auf der die App ausgeführt wird.
- Der FCM-Client auf dem Gerät informiert den FCM-Server, dass die App deinstalliert wurde.
- Der FCM-Server markiert die Registrierungs-ID zur Löschung.
- Pushwoosh sendet eine weitere Nachricht an FCM.
- FCM gibt eine NotRegistered-Nachricht zurück.
- Pushwoosh entfernt das Push-Token aus Ihrer Benutzerbasis.
Es kann eine Weile dauern, bis die Registrierungs-ID vollständig aus FCM entfernt ist. Daher ist es möglich, dass eine in Schritt 7 oben gesendete Nachricht eine gültige Nachrichten-ID als Antwort erhält, obwohl die Nachricht nicht an die Client-App zugestellt wird.
Kann ich HTML-Tags in Pushes verwenden, die an Android gesendet werden?
Anchor link toJa, in Android können Sie die folgenden HTML-Tags verwenden, um das Erscheinungsbild eines Pushs zu ändern:
<span style="color: green;"><b><i><span style="text-decoration: underline;">Hello world!Hello hi hey</span></i></b></span>Platzieren Sie diese HTML-Tags im Eingabefeld Nachricht und verwenden Sie sie auch in der API-Anfrage. Einige Android-Geräte verarbeiten diese HTML-Tags möglicherweise nicht korrekt, aber die meisten Geräte zeigen die Formatierung richtig an.
Wie stellt man ein Benachrichtigungssymbol in Android Lollipop (und späteren Versionen) ein?
Anchor link toIn Android Lollipop wurden die Symbole so geändert, dass sie nur noch weiß sind. Wenn Sie also targetSdkVersion >= 21 in Ihrer AndroidManifest.xml-Datei auswählen, verwendet Android nur den Alpha-Kanal des Symbols.
Mehr über dieses Verhalten finden Sie in der Android-Dokumentation.
Das System ignoriert alle Nicht-Alpha-Kanäle in Aktionssymbolen und im Hauptbenachrichtigungssymbol. Gehen Sie davon aus, dass diese Symbole nur Alpha-Kanäle haben. Das System zeichnet Benachrichtigungssymbole in Weiß und Aktionssymbole in Dunkelgrau. Dies liegt außerhalb der Kontrolle des Pushwoosh SDK.
1. Erstellen Sie das Benachrichtigungssymbol gemäß den Android-Richtlinien. Gemäß der Dokumentation wird das System alle Farben ignorieren.
2. Benennen Sie das Symbol pw_notification.png und legen Sie es im Ordner res/drawable ab. Das Pushwoosh SDK wird dieses Symbol als Standard für Benachrichtigungen verwenden.
3. Alternativ können Sie die Remote-API verwenden und den Wert des Parameters "android_icon" auf das Symbolbild (ohne Dateierweiterung) setzen.
Verwendung des Pushwoosh SDK mit anderen FCM-Diensten
Anchor link toSie können Pushwoosh zusammen mit anderen SDKs verwenden, die FCM für Push-Nachrichten nutzen. Erstellen Sie dazu einen Router-Dienst, um Ereignisse zwischen den Diensten zu verteilen. Fügen Sie zunächst die pushwoosh-firebase-Abhängigkeit neben dem Haupt-Pushwoosh-Modul hinzu:
implementation 'com.pushwoosh:pushwoosh-firebase:6.0.3'Erstellen Sie die Routing-Klasse:
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)) { //dies ist ein Pushwoosh-Push, das SDK wird ihn automatisch behandeln PushwooshFcmHelper.onMessageReceived(this, remoteMessage) } else { //dies ist kein Pushwoosh-Push, Sie sollten ihn selbst behandeln dispatchNonPushwooshMessage(remoteMessage); } }
private fun dispatchNonPushwooshMessage(remoteMessage: RemoteMessage) { // Implementieren Sie hier Ihre Logik zur Push-Behandlung }}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)) { //dies ist ein Pushwoosh-Push, das SDK wird ihn automatisch behandeln PushwooshFcmHelper.onMessageReceived(this, remoteMessage); } else { //dies ist kein Pushwoosh-Push, Sie sollten ihn selbst behandeln dispatchNonPushwooshMessage(remoteMessage); } }
private void dispatchNonPushwooshMessage(RemoteMessage remoteMessage) { // Implementieren Sie hier Ihre Logik zur Push-Behandlung }}Registrieren Sie die Router in Ihrer AndroidManifest.xml:
<service android:name=".FirebaseMessagingRouterService"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT"/> </intent-filter></service>Verwendung von Pushwoosh mit LeakCanary- oder AppMetrica-Bibliotheken
Anchor link toWenn Sie Analyse-Tools wie LeakCanary, AppMetrica oder andere integrieren, starten diese Bibliotheken einen neuen Prozess und erstellen eine neue Instanz der App. Da Sie in einem anderen Prozess nicht auf Push-Benachrichtigungen lauschen können, wird eine java.lang.NullPointerException ausgelöst.
Wenn Sie registerForPushNotifications innerhalb von Application.onCreate() aufrufen, sollten Sie prüfen, ob Sie sich im Hauptprozess der Anwendung befinden. Verwenden Sie den folgenden Code, um diese Prüfung durchzuführen:
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; } }}Lokales Löschen bestimmter empfangener Benachrichtigungen von einem Gerät
Anchor link toWenn Sie einen nicht relevanten Push entfernen möchten, während Sie eine bestimmte Aktion in Ihrer Anwendung ausführen, können Sie den folgenden Ansatz verwenden:
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;
//Pushes nur mit einem bestimmten Flag abbrechen 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()); } }}Teilen Sie uns Ihr Feedback mit
Anchor link toIhr Feedback hilft uns, eine bessere Erfahrung zu schaffen. Wenn Sie während des SDK-Integrationsprozesses auf Schwierigkeiten stoßen, teilen Sie uns Ihre Gedanken über dieses Formular mit.