私はこのエラーを取得する私のサーバーを起動しようとするたびに...ウェブプッシュserviceworker未定義メソッドエラー?
undefined method `post' for main:Object (NoMethodError)
application.rb
post "/push" do
Webpush.payload_send(
endpoint: "https://fcm.googleapis.com/gcm/send/eah7hak....",
message: "A message",
p256dh: "BO/aG9nYXNkZmFkc2ZmZHNmYWRzZmFl...",
auth: "aW1hcmthcmFpa3V6ZQ==",
vapid: {
subject: "mailto:[email protected]",
public_key: ENV['VAPID_PUBLIC_KEY'],
private_key: ENV['VAPID_PRIVATE_KEY']
}
)
end
私は間違った場所にコードの塊を入れているだろうか? https://github.com/zaru/webpush:私はapp.rb
が
スクリーンショットは、Gitのチュートリアルからであるapplication.rb
私はVAPIDと宝石でブラウザ通知を実装しようとしていますwebpush
& serviceworker-rails
コントローラにそれを追加する
application.js
// Register the serviceWorker script at /serviceworker.js from our server if supported
if (navigator.serviceWorker) {
navigator.serviceWorker.register('/serviceworker.js')
.then(function(reg) {
console.log('Service worker change, registered the service worker');
});
}
// Otherwise, no push notifications :(
else {
console.error('Service worker is not supported in this browser');
}
// When serviceWorker is supported, installed, and activated,
// subscribe the pushManager property with the vapidPublicKey
navigator.serviceWorker.ready.then((serviceWorkerRegistration) => {
serviceWorkerRegistration.pushManager
.subscribe({
userVisibleOnly: true,
applicationServerKey: window.vapidPublicKey
});
});
$('.webpush-button').on('click', (e) => {
navigator.serviceWorker.ready
.then((serviceWorkerRegistration) => {
serviceWorkerRegistration.pushManager.getSubscription()
.then((subscription) => {
$.post('/push', {
subscription: subscription.toJSON(),
message: 'You clicked a button!'
});
});
});
});
// Let's check if the browser supports notifications
if (!("Notification" in window)) {
console.error("This browser does not support desktop notification");
}
// Let's check whether notification permissions have already been granted
else if (Notification.permission === "granted") {
console.log("Permission to receive notifications has been granted");
}
// Otherwise, we need to ask the user for permission
else if (Notification.permission !== 'denied') {
Notification.requestPermission(function (permission) {
// If the user accepts, let's create a notification
if (permission === "granted") {
console.log("Permission to receive notifications has been granted");
}
});
}
はい、あなたは間違った場所にコードを置いています、 'app.rb'はレールアプリ用ではありません。そのコードをレールコントローラで使用してみてください。 – Gerry
あなたのルートページになりたいならば、それはあなたのレールデザインに依存し、ルートルートを作成してください。同じことがメソッド名(別名アクション)と同じです。 – Gerry