Я работаю с базой данных Firebase Realtime.
Для этого я использую angularfire2.
Я также использую плагин фоновой геолокации, который позволяет получать GPS, когда приложение находится в фоновом режиме или полностью закрыто. Он использует службу определения местоположения.
В приведенном ниже примере я сосредоточусь на событии activityChange.
Данные получены, как и должно быть.
Но у меня проблема с сохранением данных.
Я сохраняю это в базе данных огня (как я упоминал выше).
На переднем и заднем плане - все работает нормально (я не буду говорить, когда приложение полностью закрыто в данный момент).
Но когда телефон заблокирован (iPhone - iOS) - постоянство перестает работать.
Если я разблокирую телефон - персистентность все еще не работает.
Если я восстанавливаю приложение - тогда постоянство начинает работать, и все запросы, которые были инициированы, в то время как персистентность не работала, запускаются одновременно.
Как будто они ждали в очереди.
Я полагаю, что приложение похоже на паузу, и интернет не доступен приложению после блокировки телефона. И возвращается, когда приложение восстанавливается, например, в режиме энергосбережения.
В XCODE, который я имею в Совместимости, я включил Режимы фона:
- Обновления местоположения
- Фоновая выборка
- Удаленные уведомления
, но, похоже, это не так.
Исходный код ниже:
import { Injectable } from '@angular/core';
import { AngularFireDatabase } from 'angularfire2/database';
@Injectable()
export class GeolocationService {
private bgGeo: any;
changesCount = 0;
constructor(
private db: AngularFireDatabase,
) {
console.log('GeolocationService:constructor');
this.configureBackgroundGeolocation();
}
configureBackgroundGeolocation() {
console.log('GeolocationService:configureBackgroundGeolocation');
// 1. Get a reference to the plugin
this.bgGeo = (<any>window).BackgroundGeolocation;
console.log('bgGeo:');
console.log(this.bgGeo);
if (this.bgGeo) {
// 2. Listen to events
this.bgGeo.on('activitychange', this.onActivityChange.bind(this));
}
}
onActivityChange(data) {
console.log('GeolocationService:onActivityChange');
console.log('data:', data);
this.db
.object('/changes_count')
.update({
chanesFromStart: ++this.changesCount
})
.then(success => {
console.log('onActivityChange - Save succeeded');
console.log(success);
})
.catch(error => {
console.log('onActivityChange - Unable to save the position');
console.log(error);
});
}
}