(プッシュパッドを使用して)自分のWebサイトにプッシュ通知を実装しようとしています。したがって、次の内容で"manifest.json"を作成しました。
{
"gcm_sender_id": "my_gcm_sender_id",
"gcm_user_visible_only": true
}
もちろん、有効なGCMアカウントを作成し、送信者IDを持っています
manifest.jsonをルートディレクトリに配置し、この行もindex.phpに追加しました。
<link rel="manifest" href="/manifest.json">
Firefoxを使用すると、すべてが正常に機能し、プッシュ通知を送受信できます(したがって、マニフェストインクルードは正常に機能すると思います)が、Chromeは機能しません...
コンソールに次のエラーが表示されます。
Uncaught (in promise) DOMException: Registration failed - manifest empty or missing
私は長い間Googleを検索し、見つけたすべてを試しましたが、何も機能しません。
私が試したこと:
誰かが私を助けてくれることを本当に願っています。
WWWのどこにも答えが見つからなかったのですが、しばらくしてそれを機能させることができたので、おそらく同じ問題を抱えている他のユーザーに解決策/答えを提供したいと思います。
プッシュパッドファイルを含めたファイルでは、<head>
-タグの前にいくつかのPHPコードを記述して、いくつかのファイルを含めました。データベース接続用。 PHPコードを<head>
-Tagの下に移動した後、すべてが正常に機能しました。
私にとってはリダイレクトでした。 manifest.json
は、リダイレクトなしで200ステータスコードを返す必要があります(サーバーから直接利用できる必要があります)。あなたは経由で応答を確認することができます
wget --max-redirect=0 https://example.com/manifest.json
または
curl https://example.com/manifest.json
同じ問題に直面し、headタグの直後にマニフェストファイルを追加しました。それは私のために働いた。乾杯!
これは、ServiceWorkerスコープの問題である可能性があります。ファイル/ディレクトリを再配置したときに、同様の問題が発生しました。 sw.jsがmanifest.jsonと同じレベルにあることを確認してください。そうでない場合、サービスワーカーはマニフェストを見つけることができません。両方をディレクトリのルートに配置してみてください。オプションで、サービスワーカーのscope
をserviceWorker.register()
に追加して指定できます。
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/sw-test/sw.js', {scope: '/sw-test/'})
.then(function(reg) {
// registration worked
console.log('Registration succeeded. Scope is ' + reg.scope);
}).catch(function(error) {
// registration failed
console.log('Registration failed with ' + error);
});
}
詳細はこちら: https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers
あなたの「manifest.json」が一般公開されているかどうか疑問に思っていましたか?
そうでない場合は、パブリックアクセス可能に設定して、それが役立つかどうかを確認できます。
そして、「manifest.json」を取得するときの現在のクロムはCookieを提供しないようです。
このバグを修正するには、次の3つの方法があるようです。a)「manifest.json」ファイルへのリダイレクトはありません。 b)このファイルへのリンクをタグの先頭に配置します。 c)このファイルの前に他のマニフェストファイルがないことを確認してください。これは、Webプッシュスクリプトが最初のマニフェストファイルをインポートしようとし、間違ったデータが原因でエラーを返すように見えるためです。私は3つすべてを試し、最終的にChromeを動作させました。