javascript фоновая синхронизация кнопка питания Android

синхронизация сервис-воркеров не сработает в случае в android chrome ЧТО IM MISSING ??? То же самое и здесь: Синхронизация фона JavaScript Прекращает работу, если страница загружается / обновляется в офлайн-режиме

  1. отключите USB-кабель для разработки (для инструмента Chrome Dev)
  2. нажмите кнопку Android Home
  3. нажмите кнопку питания для сна (черный экран)
  4. тогда я жду 5 минут (по крайней мере)
  5. затем я нажимаю кнопку питания, чтобы проснуться
  6. затем я нажимаю myapp, чтобы разбудить приложение (приложение не закрывается, но установлено в спящий режим)
  7. Затем я вставляю usb-кабель для отладки
  8. затем я нажимаю какую-нибудь кнопку, чтобы запустить синхронизацию, после этого я вижу ---

в консоли REGISTER, но событие SYNC не запускается, если я снова нажимаю кнопку питания (черный экран), а затем снова нажимаю кнопку питания - тогда он просыпается или я выключаю Wi-Fi, а затем включаю Wi-Fi - тогда он проснется

И затем в консоли отображается РЕГИСТРАЦИЯ и СИНХРОНИЗАЦИЯ.

ЕСЛИ я поливаю 30 минут, то зарегистрированная синхронизация удаляется

КЛИЕНТСКАЯ СТОРОНА JS

var id = 'background-sync-' + (new Date()).getTime() + $.uniqid(6);    
let postData = {
                        'type': 'background-sync',
                        'uuid': id,
                    };
                    registration.active.postMessage(postData);

СТОРОНА СЛУЖБЫ РАБОТНИКА

self.addEventListener('message', function (event) {

    //console.log('message=' + event.data.type);
    if (event.data.type === 'background-sync') {

        registerSync(event.data.uuid, event.data);
    }
});

self.addEventListener('sync', function (event) {

    console.log('SYNC');
    //event.waitUntil(syncIt(event.tag));
});


function registerSync(uuid, data) {

    if (data != undefined && data != null) {

        let id = data.id;

        //append data to storage
        syncStore[id] = data;
        //this is important
        syncStore[id]['sending'] = false;
    }

    console.log('REGISTER');
    //console.log(data);
    //console.log(self.registration.sync.getTags());

    self.registration.sync.register(uuid)
        .then(function () {
        })
        .catch(function (err) {
            return err;
        });
}

person user2573099    schedule 28.01.2021    source источник


Ответы (1)


Нет никакого решения. Даже фоновая-периодическая-синхронизация не работает. Поэтому я решил обойти эту проблему - если возможно, отправьте обычную почту и используйте background.sync для автономной синхронизации данных. Проблема в том, что если я нажимаю кнопку питания один раз, тогда запрос синхронизации будет ждать, И если второй раз, то запрос синхронизации будет отправлен на сервер.

код решения:

if( this.online ){

    let self = this;
    $.post(self.requestUrl, self.params, function (returnData) {

        if( callback )
        callback(returnData);
    }).fail(function () {

        window.backgroundSync(self.requestUrl, self.params, callback, self.storeData);
    });
}
else {

    window.backgroundSync(this.requestUrl, this.params, callback, this.storeData);
}
person user2573099    schedule 29.01.2021