Ionic 4 - Firebase - сделать снимок в автономном режиме с помощью камеры - PullRequest
0 голосов
/ 31 октября 2019

В этом моя проблема.

Я использую 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);
    }
}

Не знаю, понятно ли это,

С наилучшими пожеланиями.

...