6

Sto tentando di registrare un addetto all'assistenza in Ruby On Rails per implementare un GCM di notifica push. Ma non succede nulla. Per favore, vedi il mio codice qui sotto:Come posso registrare un operatore in 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.'); 

Questa parte funziona bene. Ma quando chiamo navigator.serviceWorker.ready.then(function(serviceWorkerRegistration), non succede nulla.

Stavo cercando sul motore di ricerca e ci sono alcune cose che mi possono aiutare.

Qualcuno può aiutarmi?

+0

Sei sicuro 'ServiceWorker. ready' fa parte dell'API ServiceWorker? Non riesco a trovare alcun riferimento ad esso nei [documenti] (https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API). – nicohvi

+0

@nicohvi sto seguendo il tutorial di google. Vedi in questo link [Notifiche push sull'Open Web] (https://developers.google.com/web/updates/2015/03/push-notificatons-on-the-open-web) – Tercio

risposta

2

Lo script di servizio del servizio, service-worker.js nel tuo caso, deve essere fornito dal percorso dell'URL della stessa directory della pagina che lo registra o da un percorso secondario.

Si sta utilizzando il percorso /assets/service-worker.js, quindi, a meno che la pagina di registrazione non sia servita anche da /assets/, fallirà. Se si mette un .catch(function(error) { console.warn(error); }) alla fine del vostro register() (che restituisce un Promise, vedreste l'errore segnalato lì.

La cosa più facile da fare è assicurarsi che service-worker.js è servito dalla stessa directory della pagina web , e quindi chiamare register('service-worker.js'), che utilizza un percorso relativo stessa directory.

+0

Jeff, non succede nulla al i cambiamenti. I miei file JS si trovano nella stessa cartella. Mi suggerisci come strutturerebbe il mio progetto di rotaie? – Tercio

+0

Qual è l'URL che usi per accedere alla pagina che sta attualmente chiamando 'register ('/ assets/service-worker.js')'? –

+0

Jeff, 'localhost: 3000/users/edit'. Questa vista è un codice JS che registra il lavoratore del servizio. – Tercio

2

Scopri i serviceworker-rails gemma.

Come detto Jeff, il percorso sul quale il lavoratore servizio deve essere "portata". Questo gioiello permette indirizzare le richieste di lavoro del servizio alla radice (o qualsiasi altro percorso) a una risorsa nella pipe di Rails linea.

Ad esempio, se il punto di ingresso di script ServiceWorker è in app/assets/javascripts/nested/directory/serviceworker.js nel progetto Rails, è possibile configurare l'applicazione per rendere lo script da /serviceworker.js con qualche semplice procedura di configurazione:

# config/application.rb 
config.serviceworker.routes.draw do 
    match "/serviceworker.js" => "nested/directory/serviceworker.js" 
end