# Android SDK anpassen

<Aside type="note">
Stellen Sie sicher, dass Sie das Pushwoosh Android SDK in Ihr Projekt integriert haben:

* [Firebase-Integration](/de/developer/pushwoosh-sdk/android-sdk/firebase-integration/quick-start/)
* [Amazon-Integration](/de/developer/pushwoosh-sdk/android-sdk/amazon/)
</Aside>

## Deep-Linking

Fügen Sie in Ihrer Activity, die den Deep-Link verarbeiten wird, das \<data>-Tag mit den Parametern scheme, host und pathPrefix hinzu.

```txt
<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>
```

<Aside type="note">
Der Name der Deep-Link-Seite (_promotion_ im gegebenen Beispiel) gehört in das **host**-Feld, **nicht in pathPrefix**.
</Aside>

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 sie definitiv etwas Nützliches tun!

```java
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

Wenn Sie In-App-Käufe in [Customer Journeys](/de/product/customer-journey/pushwoosh-journey-overview) verfolgen möchten, konfigurieren Sie das Senden von Kaufinformationen an Pushwoosh, indem Sie diese Methode aufrufen:


```java
Pushwoosh.getInstance().sendInappPurchase(@NonNull String sku, @NonNull BigDecimal price, @NonNull String currency);
```
## Geozones-Push-Benachrichtigung  

Um Geozone-Pushes zu verwenden, fügen Sie die Bibliothek `com.pushwoosh:pushwoosh-location` hinzu und rufen Sie auf:  

```java
PushwooshLocation.startLocationTracking();
```

Fügen Sie in Ihrer **AndroidManifest.xml** die erforderlichen Berechtigungen hinzu:


```xml
<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

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

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


## Verwendung der Badge-Nummer auf Android

Pushwoosh unterstützt das Setzen der Badge-Nummer 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 Bibliothek `com.pushwoosh:pushwoosh-badge` zu Ihrer Anwendung hinzu.

## Öffnen einer benutzerdefinierten Activity

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

```txt title="AndroidManifest.xml"
<activity android:name="YourActivity">
    <intent-filter>
        <action android:name="${applicationId}.MESSAGE"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>
```

## Steuerung des Log-Levels

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

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

## Verwendung von Proguard

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

```txt title="proguard-rules.pro"
-keep class com.pushwoosh.** { *; }
-dontwarn com.pushwoosh.**
```

Siehe die Anforderungen der **Google Play Services**-Bibliothek bezüglich Proguard hier:\
[https://developers.google.com/android/guides/setup](https://developers.google.com/android/guides/setup)

## Anpassen des Verhaltens beim Öffnen von Benachrichtigungen

Wenn Sie programmgesteuert auswählen müssen, welche Activity als Ergebnis einer Push-Benachrichtigung angezeigt werden soll, können Sie eine benutzerdefinierte [NotificationServiceExtension](https://github.com/Pushwoosh/pushwoosh-android-sdk/blob/master/Documentation/notification/NotificationServiceExtension.md) erstellen und den vollqualifizierten Klassennamen Ihrer NotificationServiceExtension in den Metadaten unter dem Wert `com.pushwoosh.notification_service_extension` angeben.

```txt title="AndroidManifest.xml"
<meta-data
    android:name="com.pushwoosh.notification_service_extension"
    android:value="com.your.package.YourNotificationServiceExtension" />
```

```java title="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);
    }
}
```

<Aside type="note">
**Wichtig**

Wenn Sie Proguard in Produktions-Builds verwenden, stellen Sie sicher, dass Ihre benutzerdefinierte NotificationServiceExtension nicht verschleiert wird (durch Hinzufügen einer `-keep class`-Regel), da dies sonst zu einer ClassNotFoundException führt.
</Aside>

## Anpassen von Push-Benachrichtigungen

Um die Ansicht von Push-Benachrichtigungen anzupassen, müssen Sie eine benutzerdefinierte Factory erstellen. Sie können eine benutzerdefinierte [NotificationFactory](https://pushwoosh.github.io/pushwoosh-android-sdk/pushwoosh/com.pushwoosh.notification/-notification-factory/index.html) erstellen und den vollqualifizierten Klassennamen Ihrer NotificationFactory in den Metadaten unter dem Wert `com.pushwoosh.notification_factory` angeben.

```txt title="AndroidManifest.xml"
<meta-data
    android:name="com.pushwoosh.notification_factory"
    android:value="com.your.package.YourNotificationFactory" />
```

```java title="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

Um das Erscheinungsbild einer [Gruppenzusammenfassung](https://developer.android.com/training/notify-user/group#set_a_group_summary) 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 angeben.

```java title="AndroidManifest.xml"
<meta-data
    android:name="com.pushwoosh.summary_notification_factory"
    android:value="com.your.package.YourSummaryNotificationFactory" />
```

```java title="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

<Aside>
Nur für Abonnements des **Custom Plan**. Für weitere Details kontaktieren Sie bitte unser [Vertriebsteam](https://www.pushwoosh.com/demo/?utm_source=docs&utm_medium=post&utm_campaign=customizing-android-sdk).
</Aside>

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:

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

## Erstellen einer Rich-Media-Warteschlange

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: 

```java title="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;
		}
    }
}
```

<Aside type="caution" title="Wichtig">
Wir empfehlen dringend, eine Warteschlange in der **Application** anstelle der **Activity** einzurichten. Andernfalls können mehrere Warteschlangen erstellt werden.
</Aside>

<Aside type="note">
Jeder Aufruf der [postEvent](/de/developer/api-reference/user-centric-api/#postevent)-Methode erlaubt nur die Anzeige einer In-App, und jede Push-Nachricht kann nur mit einer Rich Media verknüpft werden. Wenn Sie mehrere In-Apps anzeigen möchten, rufen Sie die [postEvent](/de/developer/api-reference/user-centric-api/#postevent)-Methode die erforderliche Anzahl von Malen auf.
</Aside>

## Push mit benutzerdefiniertem Ton

<Aside>
Verfügbar für Geräte mit Android 8+. 
</Aside>

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. 

<Aside type="note">
Bitte beachten Sie die entsprechenden Anleitungen, um herauszufinden, wo die Audiodatei in Projekten, die mit anderen Frameworks erstellt wurden, platziert werden muss. 
</Aside>

2\. Erstellen Sie einen [Benachrichtigungskanal.](/de/developer/pushwoosh-sdk/android-sdk/notification-channels/)

3\. Wählen Sie einen Ton beim Konfigurieren einer Push-Nachricht aus.

<img src="/android-push-notifications-customizing-android-sdk-5.0-1.webp" alt=""/>

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 in Ihrer /createMessage API-Anfrage wie folgt:

```java
"android_root_params": {"pw_channel": "push"} // hier müssen Sie den Namen für Ihren Kanal mit benutzerdefiniertem Ton angeben, zum Beispiel "push" für die Benachrichtigungen mit dem Ton push.wav.
"android_sound": "push" // hier sollten Sie den Dateinamen ohne Erweiterung angeben
```

Sobald Sie die Push-Nachricht 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-Nachricht 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

Wenn Ihre App Proguard zur Code- und Ressourcenverkleinerung verwendet, ist es wichtig, Ihre Sounddateien 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 die Ressourcen Ihrer App zusätzlich zur Codeverkleinerung durch Verwendung 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-Daten-Flags

Um ein Flag zu setzen, müssen Sie den Meta-Daten-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:

```txt title="AndroidManifest.xml"
<meta-data
    android:name="com.pushwoosh.appid"
    android:value="XXXXX-XXXXX" />
```

<table><thead><tr><th width="262.33243208828077" align="center">Flag</th><th width="284" align="center">Beschreibung</th><th align="center">Mögliche Werte</th></tr></thead><tbody><tr><td align="center">com.pushwoosh.appid</td><td align="center">Setzt die Pushwoosh-Anwendungs-ID.</td><td align="center">XXXXX-XXXXX</td></tr><tr><td align="center">com.pushwoosh.log_level</td><td align="center">Setzt das Logging-Level. Details finden Sie unter <a href="#controlling-log-level">Steuerung des Log-Levels</a>. </td><td align="center">NONE / ERROR / WARN / INFO / <strong>DEBUG</strong> (<em>Standard</em>) / NOISE</td></tr><tr><td align="center">com.pushwoosh.base_url</td><td align="center">Überschreibt die Basis-URL des Pushwoosh-Servers.</td><td align="center"><a href="https://cp.pushwoosh.com/json/1.3/">https://cp.pushwoosh.com/json/1.3/</a> (<em>Standard</em>)</td></tr><tr><td align="center">com.pushwoosh.notification_service_extension</td><td align="center">Benutzerdefinierte NotificationServiceExtension. Details finden Sie unter <a href="#customising-notification-open-behaviour">Anpassen des Verhaltens beim Öffnen von Benachrichtigungen</a>.  </td><td align="center">com.myapp.MyNotificationServiceExtension</td></tr><tr><td align="center">com.pushwoosh.notification_factory</td><td align="center"><p>Benutzerdefinierte NotificationFactory.</p><p>Details finden Sie unter <a href="#customizing-push-notifications">Anpassen von Push-Benachrichtigungen</a>. </p></td><td align="center">com.myapp.MyNotificationFactory</td></tr><tr><td align="center">com.pushwoosh.summary_notification_factory</td><td align="center">Benutzerdefinierte SummaryNotificationFactory.</td><td align="center">com.myapp.MySummaryNotificationFactory</td></tr><tr><td align="center">com.pushwoosh.multi_notification_mode</td><td align="center">Wenn true, werden Benachrichtigungen gruppiert. Wenn false, wird nur die zuletzt empfangene Benachrichtigung angezeigt.</td><td align="center">true / <strong>false</strong> (<em>Standard</em>)</td></tr><tr><td align="center">com.pushwoosh.allow_server_communication</td><td align="center">Wenn true, darf das SDK Netzwerkanfragen an Pushwoosh-Server senden.</td><td align="center"><strong>true</strong> (<em>Standard</em>) / false</td></tr><tr><td align="center">com.pushwoosh.handle_notifications_using_workmanager</td><td align="center">Wenn true, wird der WorkManager zum Verarbeiten von Benachrichtigungen festgelegt.</td><td align="center">true / <strong>false</strong> (<em>Standard</em>)</td></tr><tr><td align="center">com.pushwoosh.notification_icon</td><td align="center">Ressourcenname des benutzerdefinierten (kleinen) Benachrichtigungssymbols. Wenn null, wird das Standard-Anwendungssymbol verwendet. </td><td align="center">res/drawable-xxhdpi-v11/notification_small_icon.png / null</td></tr><tr><td align="center">com.pushwoosh.notification_icon_color</td><td align="center">Hintergrundfarbe des (kleinen) Benachrichtigungssymbols.</td><td align="center">#FFFFFF</td></tr><tr><td align="center">com.pushwoosh.allow_collecting_device_data</td><td align="center">Wenn true, darf das SDK Gerätedaten sammeln und an Pushwoosh senden.</td><td align="center"><strong>true</strong> (<em>Standard</em>) / false</td></tr><tr><td align="center">com.pushwoosh.allow_collecting_device_os_version</td><td align="center">Wenn true, darf das SDK die Betriebssystemversion des Geräts sammeln und an Pushwoosh senden.</td><td align="center"><strong>true</strong> (<em>Standard</em>) / false</td></tr><tr><td align="center">com.pushwoosh.allow_collecting_device_locale</td><td align="center">Wenn true, darf das SDK die Ländereinstellung des Geräts sammeln und an Pushwoosh senden.</td><td align="center"><strong>true</strong> (<em>Standard</em>) / false</td></tr><tr><td align="center">com.pushwoosh.allow_collecting_device_model</td><td align="center">Wenn true, darf das SDK das Gerätemodell sammeln und an Pushwoosh senden.</td><td align="center"><strong>true</strong> (<em>Standard</em>) / false</td></tr><tr><td align="center">com.pushwoosh.in_app_business_solutions_capping</td><td align="center">Begrenzt, wie oft die <em>push-unregister</em> In-App pro Tag angezeigt werden kann.</td><td align="center"><strong>1</strong> (<em>Standard</em>), 2, ..., n</td></tr><tr><td align="center">com.pushwoosh.start_foreground_service</td><td align="center">Wenn true, wird der Vordergrunddienst zusammen mit dem Aufruf von PushwooshLocation.startLocationTracking() gestartet</td><td align="center">true / <strong>false</strong> (<em>Standard</em>)</td></tr><tr><td align="center">com.pushwoosh.foreground_service_notification_text</td><td align="center">Setzt den Text einer Benachrichtigung, die erstellt wird, wenn der Vordergrunddienst für den Schlüssel „com.pushwoosh.start_foreground_service“ gestartet wird.</td><td align="center"><strong>In Bearbeitung</strong> (<em>Standard</em>)</td></tr><tr><td align="center">com.pushwoosh.foreground_service_notification_channel_name</td><td align="center">Setzt den Kanalnamen für die Benachrichtigung, die erstellt wird, wenn der Vordergrunddienst für den Schlüssel „com.pushwoosh.start_foreground_service“ gestartet wird. </td><td align="center"><strong>Vordergrunddienst</strong> (<em>Standard)</em></td></tr><tr><td align="center">com.pushwoosh.trusted_package_names</td><td align="center">Erlaubt das Teilen der Pushwoosh HWID mit dem angegebenen Paket</td><td align="center">"com.mycompany.myapp1, com.mycompany.myapp2"</td></tr></tbody></table>


## Löschen von Push-Benachrichtigungen über TTL (Time-To-Live)

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

1. Erstellen Sie eine benutzerdefinierte NotificationFactory. [Mehr erfahren](#customizing-push-notifications)

2. Erstellen Sie in der `onGenerateNotification()`-Methode eine Benachrichtigung mit der Klasse `Notification.Builder` oder `NotificationCompat.Builder` und rufen Sie die `setTimeoutAfter`-Methode auf:

```java
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 Ihres Codes zur Erstellung von Benachrichtigungen
                                           .setTimeoutAfter(timeout) // Zeit in Millisekunden, bevor die Benachrichtigung abgebrochen wird
                                           .build();
    }
}

```

## Teilen Sie Ihr Feedback mit uns

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](https://docs.google.com/forms/d/e/1FAIpQLSd_0b8jwn-V_JmoPLIxIFYbHACCQhrzidOZV3ELywoQPXRSxw/viewform) mitzuteilen.