Verwenden eines eigenen Monitors using-your-monitor

Sie können Ihre Überwachungsdienste auch verwenden und mit Places Service integrieren, indem Sie die APIs der Places-Erweiterung verwenden.

Registrieren von Geofences

Wenn Sie sich für die Verwendung Ihrer Überwachungsdienste entscheiden, registrieren Sie die Geofences der POIs um Ihren aktuellen Standort, indem Sie die folgenden Schritte ausführen:

iOS

Führen Sie in iOS die folgenden Schritte aus:

  1. Übergeben Sie die Standortaktualisierungen, die von den Core-Standortdiensten der iOS erhalten wurden, an die Places-Erweiterung.

  2. Verwenden Sie die getNearbyPointsOfInterest Places-Erweiterungs-API zum Abrufen des Arrays von ACPPlacesPoi Objekte um die aktuelle Position.

    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];
        }];
    }
    
  3. Extrahieren Sie die Informationen aus dem erhaltenen ACPPlacesPOI Objekte erstellen und mit der Überwachung dieser Zielpunkte beginnen.

    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

  1. Übergeben Sie die Standortaktualisierungen, die von den Google Play-Diensten oder den Android-Standortdiensten erhalten wurden, an die Places-Erweiterung.

  2. Verwenden Sie die getNearbyPointsOfInterest Places-Erweiterungs-API zum Abrufen der Liste von PlacesPoi Objekte um die aktuelle Position.

    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);
                }
            });
        }
    };
    
  3. Extrahieren Sie die Daten aus dem PlacesPOI Objekte erstellen und mit der Überwachung dieser Zielpunkte beginnen.

    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)
    }
    

Aufrufen der getNearbyPointsOfInterest Die API führt zu einem Netzwerkaufruf, der den Speicherort um den aktuellen Speicherort abruft.

IMPORTANT
Sie sollten die API sparsam oder nur dann aufrufen, wenn eine wesentliche Standortänderung des Benutzers erfolgt.

Posten von Geofence-Ereignissen

iOS

Rufen Sie in iOS die processGeofenceEvent Places-API in der CLLocationManager delegieren. Diese API informiert Sie darüber, ob der Benutzer eine bestimmte Region aufgerufen oder beendet hat.

- (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

Rufen Sie in Android die processGeofence -Methode zusammen mit dem entsprechenden Übergangsereignis in Ihrem Geofence Broadcast-Empfänger. Sie können die Liste der empfangenen Geofences kuratieren, um doppelte Einstiege/Ausstiege zu verhindern.

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);
    }
}
recommendation-more-help
475fad96-f29f-4dca-a109-68bf0557e825