6

Tôi đang cố gắng đăng ký nhân viên dịch vụ trong Ruby On Rails để triển khai thông báo đẩy GCM. Nhưng không có gì xảy ra. Vui lòng xem mã của tôi bên dưới:Làm cách nào để đăng ký nhân viên dịch vụ trong Ruby on Rails?

if ('serviceWorker' in navigator) { 
    navigator.serviceWorker.register('/assets/service-worker.js') 
    .then(initialiseState); 
    } else { 
    window.Demo.debug.log('Service workers aren\'t supported in this browser.'); 

Phần này hoạt động tốt. Nhưng, khi tôi gọi navigator.serviceWorker.ready.then(function(serviceWorkerRegistration), không có gì xảy ra.

Tôi đã tìm kiếm trên công cụ tìm kiếm và có một vài điều giúp tôi.

Ai đó có thể giúp tôi không?

+0

Bạn có chắc chắn 'ServiceWorker. ready' là một phần của API ServiceWorker? Tôi không thể tìm thấy bất kỳ tham chiếu nào về nó trong [tài liệu] (https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API). – nicohvi

+0

@nicohvi Tôi đang theo hướng dẫn của google. Xem trong liên kết này [Đẩy Thông báo trên Web Mở] (https://developers.google.com/web/updates/2015/03/push-notificatons-on-the-open-web) – Tercio

Trả lời

2

Kịch bản công nhân dịch vụ, service-worker.js trong trường hợp của bạn, cần được phân phối từ đường dẫn URL cùng một thư mục như trang đăng ký hoặc đường dẫn con.

Bạn đang sử dụng đường dẫn /assets/service-worker.js, vì vậy, trừ khi trang đăng ký cũng được phục vụ từ /assets/, nó sẽ thất bại. Nếu bạn đặt một .catch(function(error) { console.warn(error); }) vào cuối register() của bạn (mà trả về một Promise, bạn sẽ thấy các lỗi thông báo đó.

Điều dễ nhất để làm là đảm bảo rằng service-worker.js được phục vụ ra khỏi thư mục tương tự như các trang web , và sau đó gọi register('service-worker.js'), trong đó sử dụng một đường dẫn tương đối cùng thư mục.

+0

Jeff, không có gì xảy ra với thay đổi. Các tệp JS của tôi nằm trong cùng một thư mục. Bạn đề nghị tôi làm thế nào nó sẽ cấu trúc dự án đường ray của tôi? – Tercio

+0

URL bạn sử dụng để truy cập trang hiện đang gọi là 'register ('/assets/service-worker.js ') 'là gì? –

+0

Jeff, 'localhost: 3000/users/edit'. Quan điểm này có một mã JS đăng ký nhân viên dịch vụ. – Tercio

2

Kiểm tra các serviceworker-rails đá quý.

Theo Jeff nói, con đường mà trên đó các nhân viên phục vụ phải được "trong phạm vi". đá quý này cho phép bạn yêu cầu nhân viên dịch vụ proxy tại gốc (hoặc bất kỳ đường dẫn nào khác) tới tài nguyên trong đường ống nội dung Rails hàng.

Ví dụ, nếu điểm vào ServiceWorker kịch bản của bạn là trong app/assets/javascripts/nested/directory/serviceworker.js trong dự án Rails, bạn có thể cấu hình ứng dụng của bạn để làm cho kịch bản từ /serviceworker.js với một số thiết lập cấu hình đơn giản:

# config/application.rb 
config.serviceworker.routes.draw do 
    match "/serviceworker.js" => "nested/directory/serviceworker.js" 
end 
Các vấn đề liên quan