ChromeまたはFirefoxでユーザーに通知するために、 HTML5通知API を使用しています。デスクトップブラウザでは、動作します。ただし、AndroidのChrome 42では、許可が要求されますが、通知自体は表示されません。
要求コードは、すべてのデバイスで機能します。
if ('Notification' in window) {
Notification.requestPermission();
}
送信コードは、デスクトップブラウザーでは機能しますが、モバイルでは機能しません。
if ('Notification' in window) {
new Notification('Notify you');
}
以下を試してください:
navigator.serviceWorker.register('sw.js');
Notification.requestPermission(function(result) {
if (result === 'granted') {
navigator.serviceWorker.ready.then(function(registration) {
registration.showNotification('Notification with ServiceWorker');
});
}
});
これはAndroid ChromeとFirefox(およびiOSのSafariも)の両方で動作します。
(sw.js
ファイルは、ゼロバイトのファイルにすることができます。
1つの注意点は、安全なOrigin(https
URLではなく、http
URL)から実行する必要があることです。
https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration/showNotification を参照してください。
このコードの実行:
if ('Notification' in window) {
Notification.requestPermission();
}
Chrome DevToolsのコンソールにこのエラーが表示されます。
不明なTypeError:「通知」の構築に失敗しました:不正なコンストラクター。代わりにServiceWorkerRegistration.showNotification()を使用してください
より良いアプローチは次のとおりです。
function isNewNotificationSupported() {
if (!window.Notification || !Notification.requestPermission)
return false;
if (Notification.permission == 'granted')
throw new Error('You must only call this \*before\* calling
Notification.requestPermission(), otherwise this feature detect would bug the
user with an actual notification!');
try {
new Notification('');
} catch (e) {
if (e.name == 'TypeError')
return false;
}
return true;
}
関数ソース: HTML5Rocks
Service Workerがすでに登録されている場合は、これを使用します:
navigator.serviceWorker.getRegistrations().then(function(registrations) {
registrations[0].showNotification(title, options);
});
私は、Windowsデスクトップの通知APIに問題はありませんでした。モバイルFFでも問題なく機能しました。 Chrome for Androidもサポートされていましたが、うまくいきませんでした。APIが機能することを証明したかったのです。私の現在の(2019)バージョンのChrome(70)for Android。多くの調査を行った結果、多くの人が結果を混在させた理由を簡単に確認できます。上記の答えはうまくいきませんでした。 Chromeデバッガーによると、通知APIはユーザージェスチャへの応答でのみ許可されます。つまり、できることを意味します。 tは、ドキュメントが読み込まれたときに通知を呼び出すだけで、クリックなどのユーザーの対話性に応じてコードを呼び出す必要があります。
したがって、ここでは、現在の(2019)Chrome for Android(注:単純にjQueryを使用しました。簡潔にするため):
<html>
<head>
<script type="text/javascript" src="libs/jquery/jquery-1.12.4.min.js"></script>
<script>
$( function()
{
navigator.serviceWorker.register('sw.js');
$( "#mynotify" ).click( function()
{
Notification.requestPermission().then( function( permission )
{
if ( permission != "granted" )
{
alert( "Notification failed!" );
return;
}
navigator.serviceWorker.ready.then( function( registration )
{
registration.showNotification( "Hello world", { body:"Here is the body!" } );
} );
} );
} );
} );
</script>
</head>
<body>
<input id="mynotify" type="button" value="Trigger Notification" />
</body>
</html>
要約すると、現在の(2019)Chrome Androidの場合の通知に関する重要な注意事項: