Zum Inhalt springen

Android SDK anpassen

Deep-Linking

Anchor link to

Fü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 to

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

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

Wenn Sie die Pushwoosh Local Notifications API verwenden, fügen Sie die Berechtigung RECEIVE_BOOT_COMPLETED zu Ihrer AndroidManifest.xml hinzu:

AndroidManifest.xml
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>x

Verwendung von Badge-Nummern unter Android

Anchor link to

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

Wenn Sie eine bestimmte Activity als Reaktion auf Push-Benachrichtigungen starten möchten, fügen Sie den folgenden Intent-Filter zu dieser Activity hinzu:

AndroidManifest.xml
<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 to

Um 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

AndroidManifest.xml
<meta-data android:name="com.pushwoosh.log_level" android:value="ERROR" />

Verwendung von Proguard

Anchor link to

Bei Verwendung von Proguard fügen Sie die folgenden Optionen hinzu:

proguard-rules.pro
-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 to

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

AndroidManifest.xml
<meta-data
android:name="com.pushwoosh.notification_service_extension"
android:value="com.your.package.YourNotificationServiceExtension" />
YourNotificationServiceExtension.java
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 to

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

AndroidManifest.xml
<meta-data
android:name="com.pushwoosh.notification_factory"
android:value="com.your.package.YourNotificationFactory" />
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 to

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

AndroidManifest.xml
<meta-data
android:name="com.pushwoosh.summary_notification_factory"
android:value="com.your.package.YourSummaryNotificationFactory" />
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 to

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

AndroidManifest.xml
<meta-data android:name="com.pushwoosh.base_url" android:value="PUSHWOOSH_PRIVATE_ENDPOINT_URL_PROVIDED" />

Erstellen einer Rich-Media-Warteschlange

Anchor link to

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

Application.java
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
  1. Legen Sie Ihre Audiodatei in den richtigen Ordner. Für das native Android-Framework sollten Ihre Dateien im Ordner /app/src/main/res/raw platziert 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 extension

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

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

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

AndroidManifest.xml
<meta-data
android:name="com.pushwoosh.appid"
android:value="XXXXX-XXXXX" />
FlagBeschreibungMögliche Werte
com.pushwoosh.appidSetzt die Pushwoosh-Anwendungs-ID.XXXXX-XXXXX
com.pushwoosh.senderidSetzt die Firebase-Projekt-Sender-ID.123456789000
com.pushwoosh.log_levelSetzt 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_extensionBenutzerdefinierte 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_factoryBenutzerdefinierte SummaryNotificationFactory.com.myapp.MySummaryNotificationFactory
com.pushwoosh.multi_notification_modeWenn true, werden Benachrichtigungen gruppiert. Wenn false, wird nur die zuletzt empfangene Benachrichtigung angezeigt.true / false (Standard)
com.pushwoosh.allow_server_communicationWenn true, darf das SDK Netzwerkanfragen an Pushwoosh-Server senden.true (Standard) / false
com.pushwoosh.handle_notifications_using_workmanagerWenn true, ist der WorkManager für die Verarbeitung von Benachrichtigungen zuständig.true / false (Standard)
com.pushwoosh.notification_iconRessourcenname des benutzerdefinierten (kleinen) Benachrichtigungssymbols. Wenn null, wird das Standard-Anwendungssymbol verwendet. res/drawable-xxhdpi-v11/notification_small_icon.png / null
com.pushwoosh.notification_icon_colorHintergrundfarbe des (kleinen) Benachrichtigungssymbols.#FFFFFF
com.pushwoosh.allow_collecting_device_dataWenn true, darf das SDK Gerätedaten sammeln und an Pushwoosh senden.true (Standard) / false
com.pushwoosh.allow_collecting_device_os_versionWenn true, darf das SDK die Betriebssystemversion des Geräts sammeln und an Pushwoosh senden.true (Standard) / false
com.pushwoosh.allow_collecting_device_localeWenn true, darf das SDK die Ländereinstellung des Geräts sammeln und an Pushwoosh senden.true (Standard) / false
com.pushwoosh.allow_collecting_device_modelWenn true, darf das SDK das Gerätemodell sammeln und an Pushwoosh senden.true (Standard) / false
com.pushwoosh.in_app_business_solutions_cappingBegrenzt, wie oft die push-unregister In-App pro Tag angezeigt werden kann.1 (Standard), 2, …, n
com.pushwoosh.start_foreground_serviceWenn true, wird der Vordergrunddienst zusammen mit dem Aufruf PushwooshLocation.startLocationTracking() gestartettrue / false (Standard)
com.pushwoosh.foreground_service_notification_textLegt 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_nameLegt 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_namesErmö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 to

Um Push-Benachrichtigungen nach einem bestimmten Zeitraum automatisch mit TTL (Time-to-Live) zu löschen, befolgen Sie diese Schritte:

  1. Erstellen Sie eine benutzerdefinierte NotificationFactory. Erfahren Sie mehr

  2. Erstellen Sie in der onGenerateNotification()-Methode eine Benachrichtigung mit der Klasse Notification.Builder oder NotificationCompat.Builder und rufen Sie die setTimeoutAfter-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 to

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