Uso de su propio monitor using-your-monitor
También puede utilizar los servicios de monitorización e integrarse con el servicio de Places mediante las API de extensión de Places.
Registro de geoperímetros
Si decide utilizar los servicios de monitorización, registre las geovallas de los puntos de interés alrededor de su ubicación actual completando los siguientes pasos:
iOS
En iOS, complete los siguientes pasos:
-
Pase las actualizaciones de ubicación obtenidas de los servicios de ubicación principales de iOS a la extensión Places.
-
Utilice la API de extensión
getNearbyPointsOfInterest
Places para obtener la matriz deACPPlacesPoi
objetos alrededor de la ubicación actual.code language-objective-c - (void) locationManager: (CLLocationManager*) manager didUpdateLocations: (NSArray<CLLocation*>*) locations { [ACPPlaces getNearbyPointsOfInterest:currentLocation limit:10 callback: ^ (NSArray<ACPPlacesPoi*>* _Nullable nearbyPoi) { [self startMonitoringGeoFences:nearbyPoi]; }]; }
-
Extraiga la información de los objetos
ACPPlacesPOI
obtenidos y comience a monitorizar esos puntos de interés.code language-objective-c - (void) startMonitoringGeoFences: (NSArray*) newGeoFences { // verify if the device supports monitoring geofences // check for location permission for (ACPPlacesPoi * currentRegion in newGeoFences) { // make the circular region CLLocationCoordinate2D center = CLLocationCoordinate2DMake(currentRegion.latitude, currentRegion.longitude); CLCircularRegion* currentCLRegion = [[CLCircularRegion alloc] initWithCenter:center radius:currentRegion.radius identifier:currentRegion.identifier]; currentCLRegion.notifyOnExit = YES; currentCLRegion.notifyOnEntry = YES; // start monitoring the new region [_locationManager startMonitoringForRegion:currentCLRegion]; } }
Android
-
Pase las actualizaciones de ubicación obtenidas de los servicios de Google Play o de los servicios de ubicación de Android a la extensión Places.
-
Utilice la API de extensión de
getNearbyPointsOfInterest
Places para obtener la lista dePlacesPoi
objetos alrededor de la ubicación actual.code language-java LocationCallback callback = new LocationCallback() { @Override public void onLocationResult(LocationResult locationResult) { super.onLocationResult(locationResult); Places.getNearbyPointsOfInterest(currentLocation, 10, new AdobeCallback<List<PlacesPOI>>() { @Override public void call(List<PlacesPOI> pois) { starMonitoringGeofence(pois); } }); } };
-
Extraiga los datos de los objetos
PlacesPOI
obtenidos y comience a monitorizar esos puntos de interés.code language-java private void startMonitoringFences(final List<PlacesPOI> nearByPOIs) { // check for location permission for (PlacesPOI poi : nearByPOIs) { final Geofence fence = new Geofence.Builder() .setRequestId(poi.getIdentifier()) .setCircularRegion(poi.getLatitude(), poi.getLongitude(), poi.getRadius()) .setExpirationDuration(Geofence.NEVER_EXPIRE) .setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER | Geofence.GEOFENCE_TRANSITION_EXIT) .build(); geofences.add(fence); } GeofencingRequest.Builder builder = new GeofencingRequest.Builder(); builder.setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_ENTER); builder.addGeofences(geofences); builder.build(); geofencingClient.addGeofences(builder.build(), geoFencePendingIntent) }
Llamar a la API getNearbyPointsOfInterest
da como resultado una llamada de red que obtiene la ubicación alrededor de la ubicación actual.
Contabilización de eventos de geoperímetro
iOS
En iOS, llame a la API processGeofenceEvent
Places en el delegado CLLocationManager
. Esta API le notifica si el usuario ha entrado o salido de una región específica.
- (void) locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
[ACPPlaces processRegionEvent:region forRegionEventType:ACPRegionEventTypeEntry];
}
- (void) locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region {
[ACPPlaces processRegionEvent:region forRegionEventType:ACPRegionEventTypeExit];
}
Android
En Android, llame al método processGeofence
junto con el evento de transición correspondiente en el receptor de difusión de Geoperímetro. Es posible que desee depurar la lista de geovallas recibidas para evitar entradas/salidas duplicadas.
void onGeofenceReceived(final Intent intent) {
// do appropriate validation steps for the intent
...
// get GeofencingEvent from intent
GeofencingEvent geoEvent = GeofencingEvent.fromIntent(intent);
// get the transition type (entry or exit)
int transitionType = geoEvent.getGeofenceTransition();
// validate your geoEvent and get the necessary Geofences from the list
List<Geofence> myGeofences = geoEvent.getTriggeringGeofences();
// process region events for your geofences
for (Geofence geofence : myGeofences) {
Places.processGeofence(geofence, transitionType);
}
}