Zum Inhalt springen

FAQ zum Pushwoosh Android SDK

Wie sehen ein Android-Push-Token und eine HWID aus?

Anchor link to

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

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

Screenshot der logcat-Ausgabe mit Informationen zur Push-Token-Registrierung in Android Studio

Welche Berechtigungen sind notwendig und welche optional?

Anchor link to

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

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

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

  1. Ihr Abonnent deinstalliert die App.
  2. Pushwoosh sendet eine Nachricht an den FCM-Server.
  3. Der FCM-Server sendet die Nachricht an das Gerät Ihres Benutzers.
  4. 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.
  5. Der FCM-Client auf dem Gerät informiert den FCM-Server, dass die App deinstalliert wurde.
  6. Der FCM-Server markiert die Registrierungs-ID zur Löschung.
  7. Pushwoosh sendet eine weitere Nachricht an FCM.
  8. FCM gibt eine NotRegistered-Nachricht zurück.
  9. 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 to

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

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

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

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

Registrieren Sie die Router in Ihrer AndroidManifest.xml:

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 to

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

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

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;
//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 to

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