Я пытаюсь внедрить пользовательские уведомления в PWA для воспроизводимого в данный момент аудиоконтента.
Как указано в заголовке; Я использую Android v8.1.0 с приложением Google Chrome v68.0.x. Согласно этой статье: The Media Session API is supported in Chrome 57
. Я полагаю, что используемая версия должна быть более современной, чтобы работать с этими уведомлениями.
Во-первых, отрывок кода для воспроизводимого аудио контента:
let context = getContext();
await context.resume().catch(console.error);
let source = context.createBufferSource();
source.connect(context.destination);
source.start(0);
Воспроизведение аудио контента работает просто отлично, здесь нет проблем.
Я попытался обновить метаданные Media Session API после вызова source.start(..)
, например:
let updateMediaSession = (payload) => {
if (!('mediaSession' in navigator)) {
return;
}
navigator.mediaSession.metadata = new MediaMetadata({
title: payload.title,
artist: payload.artist,
album: payload.album,
artwork: [
{
src: '/static/logos/android-chrome-36x36.png',
sizes: '36x36',
type: 'image/png',
},
{
src: '/static/logos/android-chrome-48x48.png',
sizes: '48x48',
type: 'image/png',
},
{
src: '/static/logos/android-chrome-72x72.png',
sizes: '72x72',
type: 'image/png',
},
{
src: '/static/logos/android-chrome-96x96.png',
sizes: '96x96',
type: 'image/png',
},
{
src: '/static/logos/android-chrome-144x144.png',
sizes: '144x144',
type: 'image/png',
},
{
src: '/static/logos/android-chrome-192x192.png',
sizes: '192x192',
type: 'image/png',
},
{
src: '/static/logos/android-chrome-256x256.png',
sizes: '256x256',
type: 'image/png',
},
{
src: '/static/logos/android-chrome-384x384.png',
sizes: '384x384',
type: 'image/png',
},
{
src: '/static/logos/android-chrome-512x512.png',
sizes: '512x512',
type: 'image/png',
},],
});
navigator.mediaSession.setActionHandler('play', () => ...);
navigator.mediaSession.setActionHandler('pause', () => ...);
navigator.mediaSession.setActionHandler('seekbackward', () => ...);
navigator.mediaSession.setActionHandler('seekforward', () => ...);
navigator.mediaSession.setActionHandler('previoustrack',() => ...);
navigator.mediaSession.setActionHandler('nexttrack', () => ...);
};
Событие I обновляет состояние воспроизведения примерно так:
if ('mediaSession' in navigator) {
navigator.mediaSession.playbackState = 'paused';
}
и
if ('mediaSession' in navigator) {
navigator.mediaSession.playbackState = 'playing';
}
Проблема
Уведомление не отображается на моем смартфоне.
Я развернул свой исходный код на соответствующем сервере с доменом. Перешел на сайт на моем смартфоне, очистил все данные, удалил все потенциальные PWA и обновил страницу перед проведением моих тестов.
Кажется, что все выполняется так, как можно было бы ожидать, но ничего не отображается. Я ожидал что-то подобное.
Кто-нибудь знает, почему это не работает?