Android Firefox не показывает сообщения web pu sh в фоновом режиме - PullRequest
0 голосов
/ 23 марта 2020

Согласно документации ,

API Pu sh дает веб-приложениям возможность получать сообщения, отправленные им с сервера, независимо от того, является ли веб-приложение или нет. находится на переднем плане или даже загружен в данный момент на пользовательском агенте.

При правильной реализации это, по-видимому, предполагает, что Android Firefox сможет обрабатывать уведомления pu sh, даже если приложение находится в фоновом режиме.

Действительно, у меня это работает совершенно нормально на Android Chrome, но на Android Firefox, как только браузер находится в фоновом режиме в течение короткого промежутка времени (кажется, достаточно нескольких часов на устройствах Android 10, на которых я это тестировал), уведомления pu sh перестают поступать, и они даже не отображаются после повторной загрузки браузера , даже если я указываю TTL 60 * 60 * 24.

Более конкретно, у меня есть примеры пользователей, которые подписываются на сообщения web pu sh и при отправке сообщений в Mozilla pu sh сервер, я буду Всегда получаю 201 ответ. Сообщения отображаются нормально, когда браузер находится на переднем плане, но, опять же, через некоторое время в фоновом режиме они перестают отображаться. Я указал "normal" для заголовка "Urgency" и вывод Python int(time.time()) + (12 * 60 * 60) для срока действия VAPID.

Сначала я подозревал, что виновником является TTL, но в соответствии с на это сообщение в блоге , я бы не получил 201 с, если бы это было проблемой.

Мой работник службы выглядит следующим образом:

self.addEventListener("push", function(event) {
    if (event.data) {
        data = event.data.json()
        showLocalNotification(data.title, data.message, self.registration);
    }
});

const showLocalNotification = (title, body, swRegistration) => {
    const options = {
        body: body,
        badge: "/badge.png",
        icon: "/plug-512.png",
    };
    swRegistration.showNotification(title, options);
};

Я пытался добавление тривиального обработчика событий для fetch, но это также не имеет значения.

Я использую pywebpush для выполнения запросов к серверам pu sh и py_vapid для обработки подписи; конкретная реализация берет строку с именем data и предоставленную пользователем subscription_info и создает запрос следующим образом:

import time
from urllib.parse import urlparse

from pywebpush import WebPusher
from py_vapid import Vapid

def send_push(data, subscription_info):
    subscription_info = row
    pusher = WebPusher(subscription_info)
    url = urlparse(subscription_info['endpoint'])
    aud = "{}://{}".format(url.scheme, url.netloc)
    vapid_claims = {'sub': 'mailto:mail@example.com'}
    vapid_claims['aud'] = aud
    vapid_claims['exp'] = int(time.time()) + (12 * 60 * 60)
    vv = Vapid.from_string('my-key')
    vapid_headers = vv.sign(vapid_claims)
    vapid_headers['Urgency'] = 'normal'
    resp = pusher.send(data, vapid_headers, ttl=60*60*24)
    assert resp.status_code == 201

Приложение в настоящее время live here .

...