Zum Inhalt springen

FAQ zum Pushwoosh Android SDK

Wie sehen Android-Push-Token und HWID aus?

Anchor link to

Android-Geräte-Push-Tokens unterscheiden sich in der Länge (weniger als 255 Zeichen) und beginnen mit APA91b, zum Beispiel:

APA91bFoi3lMMre9G3XzR1LrF4ZT82_15MsMdEICogXSLB8-MrdkRuRQFwNI5u8Dh0cI90ABD3BOKnxkEla8cGdisbDHl5cVIkZah5QUhSAxzx4Roa7b4xy9tvx9iNSYw-eXBYYd8k1XKf8Q_Qq1X9-x-U-Y79vdPq

Tokens enthalten oft ein durch einen Doppelpunkt getrenntes Präfix vor APA91b, zum Beispiel: eQnyCE6ULAQ:APA91bGrh4ya3b_owo9tshZNVAGhZdGMGb3sA5HbM...

Pushwoosh verwendet UUID als HWIDs, d.h. zufällig generierte Zeichenketten von 32 alphanumerischen Zeichen: 123e4567-e89b-12d3-a456-426655440000

Wie erhalte ich das Push-Token meines Android-Geräts?

Anchor link to

Sie können das Push-Token Ihres Android-Geräts im Konsolenprotokoll erhalten. Verwenden Sie das logcat-Tool in Android Studio.

Öffnen Sie monitor.bat in %USERPROFILE%\AppData\Local\Android\sdk\tools\monitor.bat, verbinden Sie Ihr Gerät mit dem PC und erlauben Sie USB-Debugging in den Android-Einstellungen. Führen Sie Ihre Anwendung auf dem Gerät aus. Suchen Sie nach /registerDevice und finden Sie das Push-Token für Ihr Gerät, um es später in den Testgeräten zu verwenden.

Screenshot, der die logcat-Ausgabe mit Informationen zur Registrierung des Push-Tokens in Android Studio anzeigt

Welche Berechtigungen sind notwendig und welche sind optional?

Anchor link to

Wenn die Anwendung auf einem Android-Gerät installiert wird, fragt sie in Verbindung mit dem Pushwoosh SDK nach den folgenden Berechtigungen:

<!-- FCM connects to Firebase Services. -->
<uses-permission android:name="android.permission.INTERNET"/>
<!-- Keeps the processor from sleeping when a message is received. -->
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<!-- This permission is used to determine whether the device can access the network. -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!-- This app has permission to register and receive data message. -->
<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 mit demselben Benutzer verknüpft 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, sobald die Antwort „NotRegistered“ von FCM empfangen wird, die nach dem zweiten Versuch, ein bestimmtes Gerät zu erreichen, zurückgegeben werden kann. Das bedeutet, dass Sie 2 Push-Nachrichten 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 läuft.
  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 zum Löschen.
  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 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 Push-Nachrichten verwenden, die an Android gesendet werden?

Anchor link to

Ja, in Android können Sie die folgenden HTML-Tags verwenden, um das Aussehen einer Push-Nachricht 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.
Weitere Informationen zum 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. Nennen 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 Abhängigkeit pushwoosh-firebase neben dem Hauptmodul von Pushwoosh 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)) {
//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
}
}

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 den Bibliotheken LeakCanary oder AppMetrica

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, führt dies dazu, dass eine java.lang.NullPointerException ausgelöst wird.

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;
}
}
}

Löschen einer bestimmten empfangenen Benachrichtigung von einem Gerät lokal

Anchor link to

Wenn Sie eine nicht relevante Push-Nachricht entfernen möchten, wenn 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;
//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());
}
}
}

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.