Géorepérages
Découvrez comment configurer des géorepérages pour le SDK de Braze. Un géorepérage est une zone géographique virtuelle qui forme un cercle autour d’une position globale spécifique et qui est conseillée en combinant la latitude, la longitude et un rayon.
Conditions préalables
Avant de pouvoir utiliser cette fonctionnalité, vous devrez intégrer le SDK Android Braze. En outre, vous devrez configurer des notifications push silencieuses.
Mise en place de géorepérages
Étape 1 : Activer en Braze
Vous pouvez activer les géorepérages pour votre app à l’un des endroits suivants :
Pour activer les géorepérages à partir de la page Emplacements:
- Dans Braze, allez dans Audience > Emplacements.
- Le nombre d’apps de votre espace de travail qui ont activé les géorepérages est indiqué sous la carte. Par exemple, si les géorepérages ne sont activés que pour certaines de vos apps, on peut lire : 2 sur 5 Apps avec géorepérages activés. Pour activer d’autres applications, sélectionnez le compte actuel sous le mappage.
- Choisissez une app pour laquelle activer les géorepérages, puis sélectionnez Terminé.

Pour activer les géorepérages à partir de la page Paramètres de l’appli :
- Dans Braze, allez dans Paramètres > Paramètres de l’application.
- Sélectionnez l’app pour laquelle vous souhaitez activer les géorepérages.
- Cochez la case Géorepérages activés, puis sélectionnez Enregistrer.

Étape 2 : Mise à jour build.gradle
Ajoutez android-sdk-location à votre build.gradle au niveau de l’application. Ajoutez également les services de localisation de Google Play en utilisant le guide de configuration des services Google Play :
1
2
3
4
dependencies {
implementation "com.braze:android-sdk-location:+"
implementation "com.google.android.gms:play-services-location:${PLAY_SERVICES_VERSION}"
}
Étape 3 : Mettre à jour le manifeste
Ajoutez des autorisations de démarrage, de recherche de position et de position en arrière-plan à votre AndroidManifest.xml :
1
2
3
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
L’autorisation d’accès à la localisation en arrière-plan a été ajoutée dans Android 10 et est requise pour que les géorepérages fonctionnent, tandis que l’application est mise en arrière-plan pour tous les appareils Android 10 et suivants.
Ajoutez le récepteur de démarrage Braze à l’élément application de votre AndroidManifest.xml:
1
2
3
4
5
<receiver android:name="com.braze.BrazeBootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
Étape 4 : Activer le recueil des données de localisation Braze
Si vous n’avez pas encore activé la collecte d’emplacements/localisations de Braze, mettez à jour votre fichier braze.xml pour y inclure com_braze_enable_location_collection et confirmez que sa valeur est fixée à true:
1
<bool name="com_braze_enable_location_collection">true</bool>
À partir de la version 3.6.0 du SDK Braze pour Android, le recueil des données de localisation Braze est désactivé par défaut.
Les géorepérages de Braze sont activés si la fonction de géolocalisation de Braze est activée. Si vous souhaitez désactiver notre fonction de géolocalisation par défaut mais que vous souhaitez toujours utiliser des géorepérages, elle peut être activée de manière sélective en définissant la valeur de la clé com_braze_geofences_enabled sur true dans braze.xml, indépendamment de la valeur de com_braze_enable_location_collection :
1
<bool name="com_braze_geofences_enabled">true</bool>
Étape 5 : Obtenir les autorisations de localisation de l’utilisateur final
Pour Android M et les versions plus élevées, vous devez demander des autorisations de position auprès de l’utilisateur final avant de collecter des informations de position ou d’enregistrer des géorepérages.
Ajoutez l’appel suivant pour notifier Braze lorsqu’un utilisateur accorde l’autorisation de position à votre application :
1
Braze.getInstance(context).requestLocationInitialization();
1
Braze.getInstance(context).requestLocationInitialization()
Le SDK va alors demander des géorepérages aux serveurs de Braze et initialiser le suivi du géorepérage.
Voir RuntimePermissionUtils.java dans notre exemple d’application pour un exemple de mise en œuvre.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class RuntimePermissionUtils {
private static final String TAG = BrazeLogger.getBrazeLogTag(RuntimePermissionUtils.class);
public static final int DROIDBOY_PERMISSION_LOCATION = 40;
public static void handleOnRequestPermissionsResult(Context context, int requestCode, int[] grantResults) {
switch (requestCode) {
case DROIDBOY_PERMISSION_LOCATION:
// In Android Q, we require both FINE and BACKGROUND location permissions. Both
// are requested simultaneously.
if (areAllPermissionsGranted(grantResults)) {
Log.i(TAG, "Required location permissions granted.");
Toast.makeText(context, "Required location permissions granted.", Toast.LENGTH_SHORT).show();
Braze.getInstance(context).requestLocationInitialization();
} else {
Log.i(TAG, "Required location permissions NOT granted.");
Toast.makeText(context, "Required location permissions NOT granted.", Toast.LENGTH_SHORT).show();
}
break;
default:
break;
}
}
private static boolean areAllPermissionsGranted(int[] grantResults) {
for (int grantResult : grantResults) {
if (grantResult != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
object RuntimePermissionUtils {
private val TAG = BrazeLogger.getBrazeLogTag(RuntimePermissionUtils::class.java!!)
val DROIDBOY_PERMISSION_LOCATION = 40
fun handleOnRequestPermissionsResult(context: Context, requestCode: Int, grantResults: IntArray) {
when (requestCode) {
DROIDBOY_PERMISSION_LOCATION ->
// In Android Q, we require both FINE and BACKGROUND location permissions. Both
// are requested simultaneously.
if (areAllPermissionsGranted(grantResults)) {
Log.i(TAG, "Required location permissions granted.")
Toast.makeText(context, "Required location permissions granted.", Toast.LENGTH_SHORT).show()
Braze.getInstance(context).requestLocationInitialization()
} else {
Log.i(TAG, "Required location permissions NOT granted.")
Toast.makeText(context, "Required location permissions NOT granted.", Toast.LENGTH_SHORT).show()
}
else -> {
}
}
}
private fun areAllPermissionsGranted(grantResults: IntArray): Boolean {
for (grantResult in grantResults) {
if (grantResult != PackageManager.PERMISSION_GRANTED) {
return false
}
}
return true
}
}
L’utilisation de l’exemple de code précédent est effectuée via :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
boolean hasAllPermissions = PermissionUtils.hasPermission(getApplicationContext(), Manifest.permission.ACCESS_BACKGROUND_LOCATION)
&& PermissionUtils.hasPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION);
if (!hasAllPermissions) {
// Request both BACKGROUND and FINE location permissions
requestPermissions(new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_BACKGROUND_LOCATION},
RuntimePermissionUtils.DROIDBOY_PERMISSION_LOCATION);
}
} else {
if (!PermissionUtils.hasPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION)) {
// Request only FINE location permission
requestPermissions(new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION},
RuntimePermissionUtils.DROIDBOY_PERMISSION_LOCATION);
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
val hasAllPermissions = PermissionUtils.hasPermission(applicationContext, Manifest.permission.ACCESS_BACKGROUND_LOCATION)
&& PermissionUtils.hasPermission(applicationContext, Manifest.permission.ACCESS_FINE_LOCATION)
if (!hasAllPermissions) {
// Request both BACKGROUND and FINE location permissions
requestPermissions(arrayOf(android.Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_BACKGROUND_LOCATION),
RuntimePermissionUtils.DROIDBOY_PERMISSION_LOCATION)
}
} else {
if (!PermissionUtils.hasPermission(applicationContext, Manifest.permission.ACCESS_FINE_LOCATION)) {
// Request only FINE location permission
requestPermissions(arrayOf(android.Manifest.permission.ACCESS_FINE_LOCATION),
RuntimePermissionUtils.DROIDBOY_PERMISSION_LOCATION)
}
}
}
Étape 6 : Demander manuellement des mises à jour de géorepérage (facultatif)
Par défaut, Braze récupère automatiquement la localisation de l’appareil et demande des géorepérages en fonction de la localisation collectée. Cependant, vous pouvez fournir manuellement une coordonnée GPS qui sera utilisée pour récupérer à la place les géorepérages de proximité de Braze. Pour demander manuellement des géorepérages Braze, vous devez désactiver les demandes de géorepérage automatiques de Braze et fournir une coordonnée GPS pour les demandes.
Étape 6.1 : Désactiver les requêtes de géorepérage automatique
Les demandes de géorepérage automatique de Braze peuvent être désactivées dans votre fichier braze.xml en définissant com_braze_automatic_geofence_requests_enabled sur false :
1
<bool name="com_braze_automatic_geofence_requests_enabled">false</bool>
Cela peut également être effectué au moment de l’exécution via :
1
2
3
BrazeConfig.Builder brazeConfigBuilder = new BrazeConfig.Builder()
.setAutomaticGeofenceRequestsEnabled(false);
Braze.configure(getApplicationContext(), brazeConfigBuilder.build());
1
2
3
val brazeConfigBuilder = BrazeConfig.Builder()
.setAutomaticGeofenceRequestsEnabled(false)
Braze.configure(applicationContext, brazeConfigBuilder.build())
Étape 6.2 : Demander manuellement un géorepérage Braze avec des coordonnées GPS
Les géorepérages de Braze sont demandés manuellement via la méthode requestGeofences() :
1
Braze.getInstance(getApplicationContext()).requestGeofences(latitude, longitude);
1
Braze.getInstance(applicationContext).requestGeofences(33.078947, -116.601356)
Les géorepérages ne peuvent être demandés qu’une seule fois par session, soit automatiquement par le SDK, soit manuellement avec cette méthode.
Activation de la synchronisation push-to-sync
Notez que Braze synchronise les géorepérages vers les dispositifs à l’aide de notifications push en arrière-plan. Dans la plupart des cas, cela n’implique aucun changement de code, car cette fonctionnalité ne nécessite aucune intégration supplémentaire de la part de l’application.
Cependant, notez que si votre application est arrêtée, la réception d’une notification push en arrière-plan la lancera en arrière-plan et la méthode Application.onCreate() sera appelé. Si vous avez une implémentation personnalisée Application.onCreate(), vous devez reporter les appels de serveur automatique et toute autre action que vous ne souhaitez pas déclencher par la notification push en arrière-plan.
Depuis iOS 14, les géorepérages ne fonctionnent pas de manière fiable pour les utilisateurs qui choisissent de ne donner que l’autorisation de leur emplacement/localisation approximatif.
Conditions préalables
Avant de pouvoir utiliser cette fonctionnalité, vous devrez intégrer le SDK Swift Braze.
Mise en place de géorepérages
Étape 1 : Activer en Braze
Vous pouvez activer les géorepérages pour votre app à l’un des endroits suivants :
Pour activer les géorepérages à partir de la page Emplacements:
- Dans Braze, allez dans Audience > Emplacements.
- Le nombre d’apps de votre espace de travail qui ont activé les géorepérages est indiqué sous la carte. Par exemple, si les géorepérages ne sont activés que pour certaines de vos apps, on peut lire : 2 sur 5 Apps avec géorepérages activés. Pour activer d’autres applications, sélectionnez le compte actuel sous le mappage.
- Choisissez une app pour laquelle activer les géorepérages, puis sélectionnez Terminé.

Pour activer les géorepérages à partir de la page Paramètres de l’appli :
- Dans Braze, allez dans Paramètres > Paramètres de l’application.
- Sélectionnez l’app pour laquelle vous souhaitez activer les géorepérages.
- Cochez la case Géorepérages activés, puis sélectionnez Enregistrer.

Étape 2 : Activez les services d’emplacement/localisation de votre application.
Par défaut, les services d’emplacement/localisation de Braze ne sont pas activés. Pour les activer dans votre application, suivez les étapes suivantes. Pour un tutoriel étape par étape, voir Tutorial : Emplacements de Braze et géorepérages.
Étape 2.1 : Ajoutez le module BrazeLocation
Dans Xcode, ouvrez l’onglet Général. Sous Frameworks, Libraries, and Embedded Content, ajoutez le module BrazeLocation.

Étape 2.2 : Mettez à jour votre Info.plist
Dans votre site info.plist, attribuez une valeur String à l’une des clés suivantes qui décrit la raison pour laquelle votre application a besoin de suivre l’emplacement/localisation. Cette chaîne de caractères s’affichera lorsque vos utilisateurs seront invités à utiliser les services d’emplacement/localisation. Veillez donc à expliquer clairement la valeur de l’activation de cette fonctionnalité pour votre application.
NSLocationAlwaysAndWhenInUseUsageDescriptionNSLocationWhenInUseUsageDescription

Apple a supprimé NSLocationAlwaysUsageDescription. Pour plus d’informations, consultez la documentation d’Apple destinée aux développeurs.
Étape 3 : Activez les géorepérages dans votre code
Dans le code de votre application, activez les géorepérages en définissant location.geofencesEnabled sur true dans l’objet configuration qui initialise l’ Braze instance. Pour connaître les autres options de configuration de location, consultez la référence du SDK Braze Swift.
1
2
3
4
5
6
7
8
9
10
11
12
13
let configuration = Braze.Configuration(
apiKey: "<BRAZE_API_KEY>",
endpoint: "<BRAZE_ENDPOINT>"
)
configuration.location.brazeLocationProvider = BrazeLocationProvider()
configuration.location.automaticLocationCollection = true
configuration.location.geofencesEnabled = true
configuration.location.automaticGeofenceRequests = true
// Additional configuration customization...
let braze = Braze(configuration: configuration)
AppDelegate.braze = braze
1
2
3
4
5
6
7
8
9
10
11
12
13
BRZConfiguration *configuration =
[[BRZConfiguration alloc] initWithApiKey:brazeApiKey
endpoint:brazeEndpoint];
configuration.logger.level = BRZLoggerLevelInfo;
configuration.location.brazeLocationProvider = [[BrazeLocationProvider alloc] init];
configuration.location.automaticLocationCollection = YES;
configuration.location.geofencesEnabled = YES;
configuration.location.automaticGeofenceRequests = YES;
// Additional configuration customization...
Braze *braze = [[Braze alloc] initWithConfiguration:configuration];
AppDelegate.braze = braze;
Étape 3.1 : Activer les rapports d’arrière-plan (facultatif)
Par défaut, les événements de géorepérage ne sont surveillés que si votre application est au premier plan ou si elle dispose de l’autorisation Always, qui surveille tous les états de l’application.
Toutefois, vous pouvez choisir de surveiller également les événements de géorepérage si votre app est en arrière-plan ou dispose d’une autorisationWhen In Use .
Pour surveiller ces événements de géorepérage supplémentaires, ouvrez votre projet Xcode, puis allez sur Signing & Capabilities. Sous Modes d’arrière-plan, cochez Mise à jour de l’emplacement/localisation.

Ensuite, activez allowBackgroundGeofenceUpdates dans le code de votre application. Cela permet à Braze de prolonger le statut “ En cours d’utilisation “ de votre application en surveillant en permanence les mises à jour d’emplacement/localisation. Ce paramètre ne fonctionne que lorsque votre application est en arrière-plan. À la réouverture de l’application, tous les processus d’arrière-plan existants sont mis en pause et les processus d’avant-plan sont prioritaires.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
let configuration = Braze.Configuration(
apiKey: "<BRAZE_API_KEY>",
endpoint: "<BRAZE_ENDPOINT>"
)
// Additional configuration customization...
// Enable background geofence reporting with `When In Use` authorization.
configuration.location.allowBackgroundGeofenceUpdates = true
// Determines the number of meters required to trigger a new location update.
configuration.location.distanceFilter = 8000
let braze = Braze(configuration: configuration)
AppDelegate.braze = braze
1
2
3
4
5
6
7
8
9
10
11
12
13
14
BRZConfiguration *configuration =
[[BRZConfiguration alloc] initWithApiKey:brazeApiKey
endpoint:brazeEndpoint];
// Additional configuration customization...
// Enable background geofence reporting with `When In Use` authorization.
configuration.location.allowBackgroundGeofenceUpdates = YES;
// Determines the number of meters required to trigger a new location update.
configuration.location.distanceFilter = 8000;
Braze *braze = [[Braze alloc] initWithConfiguration:configuration];
AppDelegate.braze = braze;
Pour éviter le déchargement de la batterie et la limite de débit, configurez distanceFilter à une valeur qui répond aux besoins spécifiques de votre app. En définissant une valeur plus élevée pour distanceFilter, vous évitez que votre application ne demande trop souvent l’emplacement/localisation de votre utilisateur.
Étape 4 : Demande d’autorisation
Lorsque vous demandez l’autorisation à un utilisateur, demandez l’autorisation When In Use ou Always.
Pour demander l’autorisation When In Use, utilisez la méthode requestWhenInUseAuthorization() :
1
2
var locationManager = CLLocationManager()
locationManager.requestWhenInUseAuthorization()
1
2
CLLocationManager *locationManager = [[CLLocationManager alloc] init];
[locationManager requestWhenInUseAuthorization];
Par défaut, requestAlwaysAuthorization() n’accorde à votre appli que l’autorisation When In Use et demandera à nouveau à votre utilisateur l’autorisation Always après un certain temps.
Toutefois, vous pouvez choisir d’inviter immédiatement votre utilisateur en appelant d’abord requestWhenInUseAuthorization(), puis requestAlwaysAuthorization() après avoir reçu votre autorisation initiale When In Use.
Vous ne pouvez demander immédiatement l’autorisation de Always qu’une seule fois.
1
2
var locationManager = CLLocationManager()
locationManager.requestAlwaysAuthorization()
1
2
CLLocationManager *locationManager = [[CLLocationManager alloc] init];
[locationManager requestAlwaysAuthorization];
Étape 5 : Vérifier la poussée de fond
Braze synchronise les géorepérage vers les appareils à l’aide de notifications push en arrière-plan. Suivez ces instructions pour configurer les notifications push silencieuses afin que les mises à jour de géorepérage du serveur soient correctement traitées.
Pour vous assurer que votre application n’entreprend aucune action indésirable lors de la réception de notifications de synchronisation de géorepérage de Braze, suivez l’article ignorer les push silencieux.
Demander manuellement des géorepérages
Lorsque le SDK de Braze demande des géorepérages au backend, il signale l’emplacement actuel de l’utilisateur et reçoit des géorepérages dont la pertinence est déterminée de manière optimale en fonction de l’emplacement signalé.
Pour contrôler l’emplacement/localisation que le SDK signale afin de recevoir les géorepérages les plus pertinents, vous pouvez demander manuellement des géorepérages en fournissant les emplacements souhaités.
Étape 1 : Définir automaticGeofenceRequests à false
Vous pouvez désactiver les demandes automatiques de géorepérage dans votre objet configuration passé à init(configuration). Définissez automaticGeofenceRequests sur false.
1
2
3
4
5
6
7
let configuration = Braze.Configuration(
apiKey: "{BRAZE_API_KEY}",
endpoint: "{BRAZE_ENDPOINT}"
)
configuration.automaticGeofencesRequest = false
let braze = Braze(configuration: configuration)
AppDelegate.braze = braze
1
2
3
4
5
6
BRZConfiguration *configuration =
[[BRZConfiguration alloc] initWithApiKey:{BRAZE_API_KEY}
endpoint:{BRAZE_ENDPOINT}];
configuration.automaticGeofencesRequest = NO;
Braze *braze = [[Braze alloc] initWithConfiguration:configuration];
AppDelegate.braze = braze;
Étape 2 : Appeler requestGeofences manuellement
Dans votre code, demandez des géorepérages avec la latitude et la longitude appropriées.
1
AppDelegate.braze?.requestGeofences(latitude: latitude, longitude: longitude)
1
2
[AppDelegate.braze requestGeofencesWithLatitude:latitude
longitude:longitude];
Foire aux questions (FAQ)
Pourquoi ne reçois-je pas les géorepérages sur mon appareil ?
Pour confirmer si les géorepérages sont reçus ou non sur votre appareil, utilisez d’abord l’ outil SDK Debugger pour vérifier les journaux du SDK. Vous pourrez alors voir si les géorepérages sont reçus avec succès du serveur et s’il y a des erreurs notables.
Vous trouverez ci-dessous d’autres raisons possibles pour lesquelles les géorepérages ne sont pas reçus sur votre appareil :
Limites du système d’exploitation iOS
Le système d’exploitation iOS ne permet de stocker que 20 géorepérages au maximum pour une app donnée. Avec les géorepérages activés, Braze utilisera une partie de ces 20 emplacements disponibles.
Pour éviter toute perturbation accidentelle ou indésirable d’autres fonctionnalités liées à la géorepérage dans votre app, vous devez activer les géorepérages d’emplacement/localisation pour les apps individuelles sur le tableau de bord. Pour que nos services d’emplacement/localisation fonctionnent correctement, vérifiez que votre appli n’utilise pas tous les emplacements de géorepérage disponibles.
Limitation du taux
Braze a une limite de 1 actualisation de géorepérage par session pour éviter les demandes inutiles.
Comment cela fonctionne-t-il si j’utilise à la fois des fonctionnalités de géorepérage Braze et non Braze ?
Comme indiqué plus haut, iOS permet à une même app de stocker un maximum de 20 géorepérages. Ce stockage est partagé par les géorepérages Braze et non Braze et est géré par CLLocationManager.
Par instance, si votre application contient 20 géorepérages non Braze, il n’y aura pas de stockage pour suivre les géorepérages Braze (ou vice versa). Pour recevoir de nouveaux géorepérages, vous devrez utiliser les API d’emplacement/localisation d’Apple pour arrêter le suivi de certains géorepérages existants sur l’appareil.
La fonctionnalité de géorepérage peut-elle être utilisée lorsqu’un appareil est hors ligne ?
Un appareil ne doit être connecté à l’internet que lorsqu’il est actualisé. Une fois qu’il a réussi à recevoir des géofences du serveur, il est possible d’enregistrer une entrée ou une sortie de géorepérage, même si l’appareil est hors ligne. En effet, l’emplacement/localisation d’un appareil fonctionne séparément de sa connectivité internet.
Par exemple, supposons qu’un appareil ait reçu et enregistré avec succès des géorepérages au début de la session et qu’il se mette hors ligne. S’il pénètre ensuite dans l’un de ces géorepérages enregistrés, il peut déclencher une campagne Braze.
Pourquoi les géorepérages ne sont-ils pas surveillés lorsque mon application est en arrière-plan/terminée ?
Sans l’autorisation de Always, Apple empêche les services d’emplacement/localisation de fonctionner lorsqu’une application n’est pas utilisée. Cette règle est appliquée par le système d’exploitation et échappe au contrôle du SDK de Braze. Bien que Braze propose des configurations distinctes pour exécuter des services lorsque l’app est en arrière-plan, il n’y a aucun moyen de contourner ces restrictions pour les apps qui sont terminées sans avoir reçu l’autorisation explicite de l’utilisateur.
Modifier cette page sur GitHub