# Verwendung des Pushwoosh-Standortmoduls in Android-Apps

<Aside type="caution">
Bitte beachten Sie, dass geobasiertes Messaging für HMS-Geräte (Huawei Mobile Services) nicht verfügbar ist, da es auf den Standortdiensten von Google basiert.
</Aside>

Es gibt zwei Kategorien für den Standortzugriff in Android:

*   **Vordergrund**-Standortzugriff
*   **Hintergrund**-Standortzugriff

Für die Aktualisierung des Benutzerstandorts im **Vordergrund** muss eine der folgenden Bedingungen erfüllt sein:

*   Eine der Aktivitäten der App ist aktiv
*   Ein Vordergrunddienst vom Typ `foregroundServiceType = “location”` wird für die App gestartet

Der **Hintergrund**-Zugriff ermöglicht es der App, die Geolokalisierung des Benutzers abzurufen, während die App inaktiv ist und keine Vordergrunddienste vom Typ „location“ für diese App gestartet sind.

## Vordergrund-Standortzugriff

Wenn Sie das Pushwoosh-Standortmodul verwenden möchten, um den Standort des Benutzers nur zu aktualisieren, wenn Ihre App aktiv ist, fügen Sie das `pushwoosh-location`-Modul zu Ihrer **app/build.gradle** hinzu:

```java title="build.gradle"
implementation 'com.pushwoosh:pushwoosh-location:6.+'
```

<Aside>
Die neueste Modulversion finden Sie im Pushwoosh Github-Repo: [https://github.com/Pushwoosh/pushwoosh-android-sdk/releases](https://github.com/Pushwoosh/pushwoosh-android-sdk/releases)
</Aside>

Um das Modul zu starten, verwenden Sie die `startLocationTracking`-Methode:

<Tabs>
<TabItem label="Java">
```java
PushwooshLocation.startLocationTracking();
```
</TabItem>

<TabItem label="Kotlin">
```kotlin
PushwooshLocation.startLocationTracking()
```
</TabItem>
</Tabs>

<Aside type="note">
Das `pushwoosh-location`-Modul fordert alle erforderlichen Berechtigungen von einem Benutzer an (ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION).
</Aside>

## Verwendung von ForegroundService, um Standortanfragen zu stellen, wenn Ihre Anwendung im Hintergrund ist

<Aside type="caution" title="Veraltet">

Aufgrund von Updates in Android 12 kann der ForegroundService nicht korrekt ausgeführt werden, daher ist er veraltet und wird in Zukunft aus dem Pushwoosh SDK entfernt.

Hier sind einige Workarounds, um den Standort von Benutzern im Hintergrund zu verfolgen:

1.  Verwenden Sie targetSdkVersion 30 anstelle von 31. Bitte beachten Sie, dass in diesem Fall die in Android 12 vorhandenen Funktionen nicht verfügbar sein werden.
2.  Bitten Sie Ihre Benutzer, die Akku-Optimierung für Ihre App zu deaktivieren, damit der ForegroundService im Hintergrund starten kann.
</Aside>

Um den **ForegroundService** zu starten, wenn die `startLocationTracking`-Methode aufgerufen wird, was es ermöglicht, die Geolokalisierung des Benutzers abzurufen, wenn Ihre Anwendung im Hintergrund ist, folgen Sie den im [vorherigen Abschnitt](#foreground-location-access) beschriebenen Schritten und fügen Sie dann die folgenden Metadaten zu Ihrer **AndroidManifest.xml** hinzu:

```txt
...
<application>
....
    <meta-data
        android:name="com.pushwoosh.start_foreground_service"
        android:value="true" />
...
</application>
...
```

Wenn der **ForegroundService** gestartet wird, wird eine Benachrichtigung erstellt. Sie können die Benachrichtigung anpassen, indem Sie zusätzliche Metadaten in der **AndroidManifest.xml** Ihres Projekts angeben:

```txt
...
<application>
....
    <meta-data
        android:name="com.pushwoosh.foreground_service_notification_text"
        android:value="My notification text" />
    <meta-data
        android:name="com.pushwoosh.foreground_service_notification_channel_name"
        android:value="My notification channel name" />
...
</application>
...
```

## Hintergrund-Standortzugriff

Für die Aktualisierung der Geolokalisierung im Hintergrund ohne Start eines ForegroundService benötigen Sie Folgendes:

*   Holen Sie die Genehmigung von Google Play für den Zugriff Ihrer App auf den Standort im Hintergrund ein (Details finden Sie unter [https://support.google.com/googleplay/android-developer/answer/9799150?hl=de](https://support.google.com/googleplay/android-developer/answer/9799150?hl=de))
*   Fügen Sie die Berechtigung zu Ihrer AndroidManifest.xml hinzu:

```txt
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
```

*   Fordern Sie die Erlaubnis des Benutzers zur Aktualisierung des Standorts im Hintergrund an, nachdem die Berechtigung für den Vordergrund-Standort erteilt wurde (Richtlinien finden Sie in der Android-Entwicklerdokumentation: [https://developer.android.com/training/location/permissions#background-dialog-target-android-11](https://developer.android.com/training/location/permissions#background-dialog-target-android-11) )

In der Version 6.3.2 des `pushwoosh-location`-Moduls haben wir eine zusätzliche Methode hinzugefügt, die den Bildschirm für die Standortberechtigungseinstellungen öffnet, wenn die folgenden Bedingungen erfüllt sind:

*   Die App hat die Berechtigung für den Vordergrund-Standort erhalten;
*   Die Benutzerberechtigung `ACCESS_BACKGROUND_LOCATION` ist in der AndroidManifest.xml der App vorhanden.

<Aside type="caution">
Bitte stellen Sie sicher, dass Sie den Benutzern klar erklären, aus welchen Gründen und zu welchen Zwecken Ihre App Zugriff auf ihren Standort im Hintergrund benötigt. Details finden Sie in den [Anleitungen für Android-Entwickler](https://developer.android.com/training/location/permissions#background-dialog-target-android-11).
</Aside>

Rufen Sie die Methode wie folgt auf:

<Tabs>
<TabItem label="Java">
```java
PushwooshLocation.requestBackgroundLocationPermission();
```
</TabItem>

<TabItem label="Kotlin">
```
PushwooshLocation.requestBackgroundLocationPermission()
```
</TabItem>
</Tabs>

## Android 12+ Berechtigungstypen

[Ab Android 12](https://developer.android.com/about/versions/12/approximate-location) kann ein Benutzer bei der Abfrage der Berechtigung für den Vordergrund-Standortzugriff wählen, wie oft und mit welcher Genauigkeit die App den Standort des Benutzers abrufen soll.

Es gibt zwei Arten dieser Berechtigungen:

1.  Ungefährer Standort, was ACCESS_COARSE_LOCATION entspricht
2.  Genauer Standort, was ACCESS_FINE_LOCATION und ACCESS_COARSE_LOCATION entspricht

<Aside type="caution">
Bitte berücksichtigen Sie, dass Standortanfragen von Anwendungen mit Manifest.permission.ACCESS_COARSE_LOCATION und nicht Manifest.permission.ACCESS_FINE_LOCATION automatisch auf ein langsameres Intervall gedrosselt werden und das Standortobjekt verschleiert wird, um nur eine grobe Genauigkeit anzuzeigen. Details finden Sie unter [https://developers.google.com/android/reference/com/google/android/gms/location/LocationRequest](https://developers.google.com/android/reference/com/google/android/gms/location/LocationRequest).
</Aside>

<Aside type="note">
Beachten Sie, dass die Genauigkeit von der angeforderten Berechtigung abhängt:

*   ACCESS_COARSE_LOCATION – Bietet eine Schätzung des Gerätestandorts auf etwa 1 Meile (1,6 km) genau.
*   ACCESS_FINE_LOCATION – Bietet eine Schätzung des Gerätestandorts, die so genau wie möglich ist, normalerweise innerhalb von etwa 160 Fuß (50 Metern) und manchmal sogar innerhalb von 10 Fuß (einige Meter) oder besser.

Quelle: [https://developer.android.com/training/location/permissions](https://developer.android.com/training/location/permissions)
</Aside>

## Teilen Sie Ihr Feedback mit uns

Ihr Feedback hilft uns, eine bessere Erfahrung zu schaffen. Wir würden uns daher 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.