В этом моя проблема.
Я использую ionic 4 и firebase для разработки приложения, которое может делать снимки и показывать их в автономном режиме, а затем, когда он-лайн снова синхронизирует их и отправляет в firebase.
В настоящее время я использую постоянство firebase
firebase.firestore().enablePersistence({experimentalTabSynchronization:true})
, чтобы показывать мои фотографии в автономном режиме, когда они были загружены, когда мое приложение подключилось к сети.
Я получаю свой URL, складывая его в коллекцию,
это пример моего объекта изображения:
namePicture : myNamePicture
url : myUrlPicture
, поэтому мне просто нужно использовать это, чтобы перечислитьвсе мои изображения:
ionViewWillEnter() {
this.route.queryParams.subscribe(params => {
this.data = JSON.parse(params['data']);
var userUid = this.auth.getUidUser();
var db = firebase.firestore();
var pictures = [];
db.collection('users').doc(userUid).collection('directory').doc(this.data['id']).collection('photos').onSnapshot({ includeMetadataChanges: true }, res => {
res.docChanges().forEach(res => {
pictures.push(res.doc.data().url)
})
this.data['items'] = pictures;
})
});
}
Мой список работает онлайн / офлайн.
Но теперь моя проблема заключается в том, что когда я делаю фотографию в автономном режиме, как я могу сделать что-то вроде моделирования загрузки и показать мойКартинка, делать что-то на нем и синхронизировать, когда я получу загрузку?
На данный момент это моя функция загрузки:
takePicture() {
try {
const options: CameraOptions = {
quality: 100,
destinationType: this.camera.DestinationType.DATA_URL,
encodingType: this.camera.EncodingType.JPEG,
sourceType: this.camera.PictureSourceType.CAMERA,
mediaType: this.camera.MediaType.PICTURE
}
this.camera.getPicture(options).then((result) => {
const image = `data:image/jpeg;base64,${result}`;
const pictures = storage().ref(this.generateUUID());
var waitForPictureToBeUpload = pictures.putString(image, 'data_url');
this.loader = true;
waitForPictureToBeUpload.then(res => {
var namePicture = res.metadata.name;
var userUid = firebase.auth().currentUser.uid;
var db = firebase.firestore();
this.loader = false;
storage().ref().child(namePicture).getDownloadURL().then(res => {
db.collection('users').doc(userUid).collection('directory').doc(this.data['id']).collection('photos').add({
namePicture: namePicture,
url: res
})
storage().ref(namePicture).updateMetadata({ 'cacheControl': 'public, max-age=15552000' }).then(e => {});
});
})
})
}
catch (e) {
console.error(e);
}
}
Не знаю, понятно ли это,
С наилучшими пожеланиями.