# Utilisation du module de localisation Pushwoosh dans les applications Android

<Aside type="caution">
Veuillez noter que la messagerie géolocalisée n'est pas disponible pour les appareils HMS (Huawei Mobile Services) car elle repose sur les services de localisation de Google.
</Aside>

Il existe deux catégories d'accès à la localisation dans Android :

*   **Accès** à la localisation **en premier plan**
*   **Accès** à la localisation **en arrière-plan**

Pour mettre à jour la position de l'utilisateur en **premier plan**, l'une des conditions suivantes doit être remplie :

*   L'une des activités de l'application est active
*   Un service de premier plan de type `foregroundServiceType = “location”` est lancé pour l'application

L'accès en **arrière-plan** permet à l'application d'obtenir la géolocalisation de l'utilisateur lorsque l'application est inactive, et qu'aucun service de premier plan de type « location » n'est lancé pour cette application.

## Accès à la localisation en premier plan

Si vous prévoyez d'utiliser le module de localisation Pushwoosh pour mettre à jour la position de l'utilisateur uniquement lorsque votre application est active, ajoutez le module `pushwoosh-location` à votre fichier **app/build.gradle** :

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

<Aside>
Obtenez la dernière version du module dans le dépôt Github de Pushwoosh : [https://github.com/Pushwoosh/pushwoosh-android-sdk/releases](https://github.com/Pushwoosh/pushwoosh-android-sdk/releases)
</Aside>

Pour lancer le module, utilisez la méthode `startLocationTracking` :

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

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

<Aside type="note">
Le module `pushwoosh-location` demandera toutes les autorisations nécessaires à un utilisateur (ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION).
</Aside>

## Utilisation de ForegroundService pour effectuer des requêtes de localisation lorsque votre application est en arrière-plan

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

En raison des mises à jour d'Android 12, ForegroundService ne peut pas fonctionner correctement, il est donc obsolète et sera supprimé du SDK Pushwoosh à l'avenir.

Voici quelques solutions de contournement pour suivre la position des utilisateurs en arrière-plan :

1.  Utilisez `targetSdkVersion 30` au lieu de `31`. Veuillez garder à l'esprit que les fonctionnalités présentes dans Android 12 ne seront pas disponibles dans ce cas.
2.  Demandez à vos utilisateurs de désactiver l'optimisation de la batterie pour votre application afin de permettre au ForegroundService de démarrer en arrière-plan.
</Aside>

Pour lancer le **ForegroundService** lorsque la méthode `startLocationTracking` est appelée, ce qui permet d'obtenir la géolocalisation de l'utilisateur lorsque votre application est en arrière-plan, suivez les étapes décrites dans le [paragraphe précédent](#foreground-location-access), puis ajoutez les métadonnées suivantes à votre fichier **AndroidManifest.xml** :

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

Lorsque le **ForegroundService** est lancé, une notification est créée. Vous pouvez personnaliser la notification en spécifiant les métadonnées supplémentaires dans le fichier **AndroidManifest.xml** de votre projet :

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

## Accès à la localisation en arrière-plan

Pour mettre à jour la géolocalisation en arrière-plan sans lancer de ForegroundService, vous aurez besoin des éléments suivants :

*   Obtenir l'approbation de Google Play pour l'accès de votre application à la localisation en arrière-plan (consultez [https://support.google.com/googleplay/android-developer/answer/9799150?hl=en](https://support.google.com/googleplay/android-developer/answer/9799150?hl=en) pour plus de détails)
*   Ajouter l'autorisation à votre AndroidManifest.xml :

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

*   Demander l'autorisation de l'utilisateur pour la mise à jour de la localisation en arrière-plan après avoir reçu l'autorisation de localisation en premier plan (trouvez les directives dans la documentation pour développeurs Android : [https://developer.android.com/training/location/permissions#background-dialog-target-android-11](https://developer.android.com/training/location/permissions#background-dialog-target-android-11) )

Dans la version 6.3.2 du module `pushwoosh-location`, nous avons inclus une méthode supplémentaire qui ouvre l'écran des paramètres d'autorisation de localisation si les conditions suivantes sont remplies :

*   L'autorisation de localisation en premier plan est accordée pour l'application ;
*   L'autorisation utilisateur `ACCESS_BACKGROUND_LOCATION` est présente dans le fichier AndroidManifest.xml de l'application.

<Aside type="caution">
Veuillez vous assurer d'expliquer clairement aux utilisateurs pour quelles raisons et à quelles fins votre application a besoin d'accéder à leur localisation en arrière-plan. Consultez les [guides pour développeurs Android](https://developer.android.com/training/location/permissions#background-dialog-target-android-11) pour plus de détails.
</Aside>

Appelez la méthode comme suit :

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

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

## Types d'autorisation Android 12+

[À partir d'Android 12](https://developer.android.com/about/versions/12/approximate-location), lorsqu'on lui demande l'autorisation d'accès à la localisation en premier plan, un utilisateur peut choisir la fréquence et la précision avec lesquelles l'application obtiendra sa position.

Il existe deux types de ces autorisations :

1.  Localisation approximative, qui équivaut à `ACCESS_COARSE_LOCATION`
2.  Localisation précise, qui équivaut à `ACCESS_FINE_LOCATION` et `ACCESS_COARSE_LOCATION`

<Aside type="caution">
Veuillez prendre en compte que les demandes de localisation provenant d'applications avec `Manifest.permission.ACCESS_COARSE_LOCATION` et non `Manifest.permission.ACCESS_FINE_LOCATION` seront automatiquement limitées à un intervalle plus lent, et l'objet de localisation sera obscurci pour ne montrer qu'un niveau de précision approximatif. Consultez[ https://developers.google.com/android/reference/com/google/android/gms/location/LocationRequest](https://developers.google.com/android/reference/com/google/android/gms/location/LocationRequest) pour plus de détails.
</Aside>

<Aside type="note">
Gardez à l'esprit que le niveau de précision dépend de l'autorisation que vous demandez :

*   `ACCESS_COARSE_LOCATION` – Fournit une estimation de la position de l'appareil, à environ 1,6 km (1 mile) près.
*   `ACCESS_FINE_LOCATION` – Fournit une estimation de la position de l'appareil aussi précise que possible, généralement à moins de 50 mètres (160 pieds) et parfois même à moins de quelques mètres (10 pieds) ou mieux.

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

## Partagez vos commentaires avec nous

Vos commentaires nous aident à créer une meilleure expérience, nous serions donc ravis de vous entendre si vous rencontrez des problèmes lors du processus d'intégration du SDK. Si vous rencontrez des difficultés, n'hésitez pas à nous faire part de vos réflexions [via ce formulaire](https://docs.google.com/forms/d/e/1FAIpQLSd_0b8jwn-V_JmoPLIxIFYbHACCQhrzidOZV3ELywoQPXRSxw/viewform).