Android SDK anpassen
Deep-Linking
Anchor link toFügen Sie in Ihrer Activity, die den Deep-Link verarbeiten soll, den Tag <data> mit den Parametern scheme, host und pathPrefix hinzu.
<activity android:name=".PromoActivity" android:label="PromoActivity"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="com.pushwoosh" android:host="promotion" android:pathPrefix="" /> </intent-filter></activity>Im obigen Beispiel öffnet der Deep-Link die PromoActivity. Die nachstehende grundlegende Implementierung zeigt zur Vereinfachung eine Benachrichtigung mit dem Wert der Promo-ID an. In Ihrer Anwendung könnte dies definitiv etwas Nützlicheres bewirken!
public class PromoActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.deep_link); setTitle("Deep link activity");
Intent intent = getIntent(); String action = intent.getAction(); Uri data = intent.getData();
if (TextUtils.equals(action, Intent.ACTION_VIEW)) { openUrl(data); } }
private void openUrl(Uri uri) { String promoId = uri.getQueryParameter("id"); Toast.makeText(getApplicationContext(), promoId, Toast.LENGTH_LONG).show(); }}In-App-Kauf-Tracking
Anchor link toWenn Sie In-App-Käufe in Customer Journeys verfolgen möchten, konfigurieren Sie das Senden von Kaufinformationen an Pushwoosh, indem Sie diese Methode aufrufen:
Pushwoosh.getInstance().sendInappPurchase(@NonNull String sku, @NonNull BigDecimal price, @NonNull String currency);Geozones-Push-Benachrichtigung
Anchor link toUm Geozone-Pushes zu verwenden, fügen Sie die com.pushwoosh:pushwoosh-location-Bibliothek hinzu und rufen Sie auf:
PushwooshLocation.startLocationTracking();Fügen Sie in Ihrer AndroidManifest.xml die erforderlichen Berechtigungen ein:
<manifest ... > <!-- Required for geolocation-based push notifications --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- Required for precise location tracking --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- Required for background location access on Android 10 (API level 29) and higher --> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /></manifest>Verwendung lokaler Benachrichtigungen mit Pushwoosh
Anchor link toWenn Sie die Pushwoosh Local Notifications API verwenden, fügen Sie die Berechtigung RECEIVE_BOOT_COMPLETED zu Ihrer AndroidManifest.xml hinzu:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>xVerwendung von Badge-Nummern unter Android
Anchor link toPushwoosh unterstützt das Setzen von Badge-Nummern auf der App-Icon-Verknüpfung für die folgenden Android-Launcher:
Sony, Samsung, LG, HTC, ASUS, ADW, APEX, NOVA, HUAWEI, ZUK, OPPO.
Um diese Funktionalität zu nutzen, fügen Sie einfach die com.pushwoosh:pushwoosh-badge-Bibliothek zu Ihrer Anwendung hinzu.
Öffnen einer benutzerdefinierten Activity
Anchor link toWenn Sie eine bestimmte Activity als Reaktion auf Push-Benachrichtigungen starten möchten, fügen Sie den folgenden Intent-Filter zu dieser Activity hinzu:
<activity android:name="YourActivity"> <intent-filter> <action android:name="${applicationId}.MESSAGE"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter></activity>Steuern des Log-Levels
Anchor link toUm beim Debugging und bei der Integration zu helfen, gibt das SDK standardmäßig alle Anfragen in der Konsole aus. Wenn Sie für den Produktions-Build bereit sind, fügen Sie die Metadaten com.pushwoosh.log_level mit dem Wert „ERROR“ zur AndroidManifest.xml hinzu. Auf diese Weise werden nur Informationen über Fehler in der Konsole ausgegeben. Eine andere Option könnte eine der folgenden sein:
NONE - Keine Logs vom SDK
ERROR - Nur Fehler in der Konsole anzeigen
WARN - Auch Warnungen anzeigen
INFO - Informationsmeldungen anzeigen
DEBUG - Sogar Debug-Informationen werden jetzt angezeigt
NOISE - Alles, was das SDK ausgeben kann und mehr
<meta-data android:name="com.pushwoosh.log_level" android:value="ERROR" />Verwendung von Proguard
Anchor link toBei Verwendung von Proguard fügen Sie die folgenden Optionen hinzu:
-keep class com.pushwoosh.** { *; }-dontwarn com.pushwoosh.**Die Anforderungen der Google Play Services-Bibliothek bezüglich Proguard finden Sie hier:
https://developers.google.com/android/guides/setup
Anpassen des Verhaltens beim Öffnen von Benachrichtigungen
Anchor link toWenn Sie programmgesteuert auswählen müssen, welche Activity als Ergebnis einer Push-Benachrichtigung angezeigt werden soll, können Sie eine benutzerdefinierte NotificationServiceExtension erstellen und den vollqualifizierten Klassennamen Ihrer NotificationServiceExtension in den Metadaten unter dem Wert com.pushwoosh.notification_service_extension einfügen.
<meta-data android:name="com.pushwoosh.notification_service_extension" android:value="com.your.package.YourNotificationServiceExtension" />public class YourNotificationServiceExtension extends NotificationServiceExtension { @Override protected void startActivityForPushMessage(PushMessage message) { // super.startActivityForPushMessage() starts default launcher activity // or activity marked with ${applicationId}.MESSAGE action. // Simply do not call it to override this behaviour. // super.startActivityForPushMessage(message);
// start your activity instead: Intent launchIntent = new Intent(getApplicationContext(), YourActivity.class); launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
// (Optional) pass notification data to Activity launchIntent.putExtra(Pushwoosh.PUSH_RECEIVE_EVENT, message.toJson().toString());
context.startActivity(launchIntent); }}Anpassen von Push-Benachrichtigungen
Anchor link toUm die Ansicht von Push-Benachrichtigungen anzupassen, müssen Sie eine benutzerdefinierte Factory erstellen. Sie können eine benutzerdefinierte NotificationFactory erstellen und den vollqualifizierten Klassennamen Ihrer NotificationFactory in den Metadaten unter dem Wert com.pushwoosh.notification_factory einfügen.
<meta-data android:name="com.pushwoosh.notification_factory" android:value="com.your.package.YourNotificationFactory" />public class YourNotificationFactory extends PushwooshNotificationFactory { @Override public Notification onGenerateNotification(@NonNull PushMessage pushMessage) { if (customNotification) { // TODO: generate and return custom notification }
// return default Pushwoosh notification return super.onGenerateNotification(pushMessage); }}Anpassen der Gruppenzusammenfassung
Anchor link toUm das Erscheinungsbild einer Gruppenzusammenfassung anzupassen, erstellen Sie eine benutzerdefinierte Factory. Sie können eine benutzerdefinierte SummaryNotificationFactory erstellen und den vollqualifizierten Klassennamen Ihrer SummaryNotificationFactory in den Metadaten unter dem Wert com.pushwoosh.summary_notification_factory einfügen.
<meta-data android:name="com.pushwoosh.summary_notification_factory" android:value="com.your.package.YourSummaryNotificationFactory" />public class YourSummaryNotificationFactory extends PushwooshSummaryNotificationFactory { @Override public String summaryNotificationMessage(int notificationsAmount) { // return the message you want return super.summaryNotificationMessage(notificationsAmount); } @Override public int summaryNotificationIconResId() { // return the icon resource id you want return super.summaryNotificationIconResId(); }}Private Endpunkt-URL
Anchor link toPushwoosh bietet private Endpunkte für Kunden mit Custom-Plan-Abonnements. Um einen privaten Endpunkt für das Android SDK einzurichten, müssen Sie Folgendes zu Ihrer AndroidManifest.xml-Datei hinzufügen:
<meta-data android:name="com.pushwoosh.base_url" android:value="PUSHWOOSH_PRIVATE_ENDPOINT_URL_PROVIDED" />Erstellen einer Rich-Media-Warteschlange
Anchor link toFalls mehrere Rich-Media-Seiten gleichzeitig angezeigt werden sollen (z. B. wenn Trigger-Events für zwei oder mehr In-Apps gleichzeitig stattfinden oder eine Rich-Media-Seite bereits angezeigt wird, wenn ein anderes Trigger-Event auftritt), können Sie eine Warteschlange für die Anzeige von Rich-Media-Seiten einrichten. Um eine Warteschlange zu erstellen, fügen Sie den folgenden Code zu Ihrem Projekt hinzu:
package com.pushwoosh.testingapp;
import com.pushwoosh.RichMediaManager;import com.pushwoosh.exception.PushwooshException;import com.pushwoosh.richmedia.RichMediaPresentingDelegate;import com.pushwoosh.richmedia.RichMedia;import com.pushwoosh.internal.utils.PWLog;
import java.util.ArrayDeque;import java.util.concurrent.locks.ReentrantLock;
public class DefaultRichMediaPresentingDelegate implements RichMediaPresentingDelegate { private final String TAG = DefaultRichMediaPresentingDelegate.class.getSimpleName(); private ArrayDeque<RichMedia> richMediaQueue = new ArrayDeque<>(); private RichMedia currentRichMedia = null; private ReentrantLock reentrantLock;
public DefaultRichMediaPresentingDelegate() { PWLog.noise(TAG, "new DefaultRichMediaPresentingDelegate:" + this); reentrantLock = new ReentrantLock(); }
@Override public boolean shouldPresent(RichMedia richMedia) { PWLog.noise(TAG, "shouldPresent:" + richMedia); if (currentRichMedia == null) { PWLog.noise(TAG, "currentRichMedia is null"); } if (richMedia.isLockScreen()) { PWLog.noise(TAG, "isLockScreen is true"); return true; } try { reentrantLock.lock(); if (currentRichMedia == null) { PWLog.noise(TAG, "show:" + richMedia); currentRichMedia = richMedia; return true; } else { PWLog.noise(TAG, "add to queue:" + richMedia); richMediaQueue.add(richMedia); return false; } } finally { reentrantLock.unlock(); } }
@Override public void onPresent(RichMedia richMedia) { PWLog.noise(TAG, "onPresent" + richMedia); }
@Override public void onError(RichMedia richMedia, PushwooshException pushwooshException) { PWLog.error(TAG, pushwooshException + " richMedia:"+richMedia.toString()); tryShowNextRichMediaThreadSafety(); }
@Override public void onClose(RichMedia richMedia) { PWLog.noise(TAG, "onClose:" + richMedia); tryShowNextRichMediaThreadSafety(); }
private void tryShowNextRichMediaThreadSafety() { try { reentrantLock.lock(); tryShowNextRichMedia(); } finally { reentrantLock.unlock(); } }
private void tryShowNextRichMedia() { if (!richMediaQueue.isEmpty()) { currentRichMedia = richMediaQueue.poll(); PWLog.noise(TAG, "try manual show:" + currentRichMedia); RichMediaManager.present(currentRichMedia); } else { PWLog.noise(TAG, "richMediaQueue is empty"); currentRichMedia = null; } }}Push mit benutzerdefiniertem Ton
Anchor link to- Legen Sie Ihre Audiodatei in den richtigen Ordner. Für das native Android-Framework sollten Ihre Dateien im Ordner
/app/src/main/res/rawplatziert werden.
2. Erstellen Sie einen Benachrichtigungskanal (Notification Channel).
3. Wählen Sie einen Ton bei der Konfiguration einer Push-Nachricht aus.

4. Legen Sie den Benachrichtigungskanal fest, zu dem die Nachricht gehören wird. Geben Sie dazu Folgendes im Feld „Android root params“ an:{"pw_channel": "PUSH NOTIFICATION CHANNEL NAME"} //`` hier müssen Sie den Namen für Ihren Kanal mit benutzerdefiniertem Ton angeben
Bei Verwendung der Remote-API setzen Sie die Parameter wie folgt in Ihrer /createMessage API-Anfrage:
"android_root_params": {"pw_channel": "push"} // here you need to specify the name for your channel with custom sound, for example, "push" for the notifications with push.wav sound."android_sound": "push" // here you should specify the file name without extensionSobald Sie die Push-Benachrichtigung mit diesen Parametern senden, wird der Benachrichtigungskanal mit dem ausgewählten Ton für alle Geräte mit Android 8+ erstellt.
Um nun die Push-Benachrichtigung mit einem benutzerdefinierten Ton zu senden, müssen Sie nur den mit diesem Ton verknüpften Kanal angeben.
Proguard-Regeln für benutzerdefinierte Benachrichtigungstöne
Anchor link toWenn Ihre App Proguard zur Code- und Ressourcen-Verkleinerung verwendet, ist es wichtig, Ihre Tondateien intakt und für externe Bibliotheken verfügbar zu halten. Wenn Sie die Eigenschaft minifyEnabled = true in Ihrer build.gradle verwenden, fügen Sie die folgenden Regeln zu Ihrer proguard-rules.pro hinzu:
-keep public class your.package.name.R$raw { *;}Wenn Sie zusätzlich zur Code-Verkleinerung die Ressourcen Ihrer App mit der Eigenschaft shrinkResources=true verkleinern, sollten Sie zusätzlich angeben, welche Ressourcen Sie behalten möchten. Erstellen Sie dazu eine neue XML-Datei mit einem beliebigen Namen, speichern Sie sie irgendwo in Ihrem Projekt (z. B. in res/xml) und geben Sie die Ressourcennamen unter dem Parameter tools:keep im resources-Tag an:
<?xml version="1.0" encoding="utf-8"?><resources xmlns:tools="http://schemas.android.com/tools" tools:keep="@raw/*"/>Vollständige Liste der Android SDK Meta-Data-Flags
Anchor link toUm ein Flag zu setzen, müssen Sie den Meta-Data-Block zu Ihrer AndroidManifest.xml-Datei innerhalb des application-Tags hinzufügen. Wenn Sie beispielsweise die Pushwoosh-Anwendungs-ID festlegen möchten, fügen Sie den folgenden Code zu Ihrer AndroidManifest.xml-Datei hinzu:
<meta-data android:name="com.pushwoosh.appid" android:value="XXXXX-XXXXX" />| Flag | Beschreibung | Mögliche Werte |
|---|---|---|
| com.pushwoosh.appid | Setzt die Pushwoosh-Anwendungs-ID. | XXXXX-XXXXX |
| com.pushwoosh.senderid | Setzt die Firebase-Projekt-Sender-ID. | 123456789000 |
| com.pushwoosh.log_level | Setzt das Logging-Level. Details finden Sie unter Steuern des Log-Levels. | NONE / ERROR / WARN / INFO / DEBUG (Standard) / NOISE |
| com.pushwoosh.base_url | Überschreibt die Basis-URL des Pushwoosh-Servers. | https://cp.pushwoosh.com/json/1.3/ (Standard) |
| com.pushwoosh.notification_service_extension | Benutzerdefinierte NotificationServiceExtension. Details finden Sie unter Anpassen des Verhaltens beim Öffnen von Benachrichtigungen. | com.myapp.MyNotificationServiceExtension |
| com.pushwoosh.notification_factory | Benutzerdefinierte NotificationFactory. Details finden Sie unter Anpassen von Push-Benachrichtigungen. | com.myapp.MyNotificationFactory |
| com.pushwoosh.summary_notification_factory | Benutzerdefinierte SummaryNotificationFactory. | com.myapp.MySummaryNotificationFactory |
| com.pushwoosh.multi_notification_mode | Wenn true, werden Benachrichtigungen gruppiert. Wenn false, wird nur die zuletzt empfangene Benachrichtigung angezeigt. | true / false (Standard) |
| com.pushwoosh.allow_server_communication | Wenn true, darf das SDK Netzwerkanfragen an Pushwoosh-Server senden. | true (Standard) / false |
| com.pushwoosh.handle_notifications_using_workmanager | Wenn true, ist der WorkManager für die Verarbeitung von Benachrichtigungen zuständig. | true / false (Standard) |
| com.pushwoosh.notification_icon | Ressourcenname des benutzerdefinierten (kleinen) Benachrichtigungssymbols. Wenn null, wird das Standard-Anwendungssymbol verwendet. | res/drawable-xxhdpi-v11/notification_small_icon.png / null |
| com.pushwoosh.notification_icon_color | Hintergrundfarbe des (kleinen) Benachrichtigungssymbols. | #FFFFFF |
| com.pushwoosh.allow_collecting_device_data | Wenn true, darf das SDK Gerätedaten sammeln und an Pushwoosh senden. | true (Standard) / false |
| com.pushwoosh.allow_collecting_device_os_version | Wenn true, darf das SDK die Betriebssystemversion des Geräts sammeln und an Pushwoosh senden. | true (Standard) / false |
| com.pushwoosh.allow_collecting_device_locale | Wenn true, darf das SDK die Ländereinstellung des Geräts sammeln und an Pushwoosh senden. | true (Standard) / false |
| com.pushwoosh.allow_collecting_device_model | Wenn true, darf das SDK das Gerätemodell sammeln und an Pushwoosh senden. | true (Standard) / false |
| com.pushwoosh.in_app_business_solutions_capping | Begrenzt, wie oft die push-unregister In-App pro Tag angezeigt werden kann. | 1 (Standard), 2, …, n |
| com.pushwoosh.start_foreground_service | Wenn true, wird der Vordergrunddienst zusammen mit dem Aufruf PushwooshLocation.startLocationTracking() gestartet | true / false (Standard) |
| com.pushwoosh.foreground_service_notification_text | Legt den Text einer Benachrichtigung fest, die erstellt wird, wenn der Vordergrunddienst für den Schlüssel „com.pushwoosh.start_foreground_service“ gestartet wird. | Work in progress (Standard) |
| com.pushwoosh.foreground_service_notification_channel_name | Legt den Kanalnamen für die Benachrichtigung fest, die erstellt wird, wenn der Vordergrunddienst für den Schlüssel „com.pushwoosh.start_foreground_service“ gestartet wird. | Foreground service (Standard) |
| com.pushwoosh.trusted_package_names | Ermöglicht die Freigabe der Pushwoosh-HWID für das angegebene Paket | ”com.mycompany.myapp1, com.mycompany.myapp2” |
Löschen von Push-Benachrichtigungen über TTL (Time-To-Live)
Anchor link toUm Push-Benachrichtigungen nach einem bestimmten Zeitraum automatisch mit TTL (Time-to-Live) zu löschen, befolgen Sie diese Schritte:
-
Erstellen Sie eine benutzerdefinierte NotificationFactory. Erfahren Sie mehr
-
Erstellen Sie in der
onGenerateNotification()-Methode eine Benachrichtigung mit der KlasseNotification.BuilderoderNotificationCompat.Builderund rufen Sie diesetTimeoutAfter-Methode auf:
public class YourNotificationFactory extends PushwooshNotificationFactory {
@Override public Notification onGenerateNotification(@NonNull PushMessage pushMessage) { Notification.Builder builder = new Notification.Builder(getApplicationContext(), addChannel(pushData));
Notification notification = builder.setContentText(pushData.getMessage()) .setContentTitle(title) .setContentText(text) // rest of your notification creation code .setTimeoutAfter(timeout) // Zeit in Millisekunden, bevor die Benachrichtigung abgebrochen wird .build(); }}Teilen Sie Ihr Feedback mit uns
Anchor link toIhr Feedback hilft uns, eine bessere Erfahrung zu schaffen. Daher würden wir uns freuen, von Ihnen zu hören, wenn Sie während des SDK-Integrationsprozesses auf Probleme stoßen. Wenn Sie auf Schwierigkeiten stoßen, zögern Sie bitte nicht, uns Ihre Gedanken über dieses Formular mitzuteilen.