2015-02-24 15 views
6

Devo inviare notifiche push iOS all'utente ogni volta che un determinato figlio viene aggiunto a un percorso Firebase.Notifiche push di Firebase - node worker

Stavo pensando che il modo migliore per farlo sarebbe quello di creare un lavoratore Node.js su Heroku, che avrebbe ascoltato le modifiche e inviato una notifica utilizzando Urban Airship.

Non sono sicuro di quale sia il modo migliore per ascoltare le modifiche su Firebase da un worker Node.js su Heroku. Non sono così familiare con i lavoratori di heroku e Node.js.

Qualcuno può darmi qualche suggerimento? Esempi?

+1

Come su un sistema di coda: spingere la notifica si oppone a una posizione che è guardato dal server, e utilizzare le transazioni per elaborare poi rimuoverli. Vedi https://github.com/firebase/firebase-work-queue per un'implementazione di esempio. –

+0

Interessante. Lo esaminerò. –

+0

Ecco una domanda pertinente che ho pensato fosse interessante http://stackoverflow.com/questions/28617476/how-to-mitigate-against-long-startup-times-in-firebase-workers-when-dataset-gets –

risposta

4

L'invio di notifiche push con Firebase e linfonodo APN è facile:

var apn = require("apn"); 
var Firebase = require("firebase"); 

// true for production pipeline 
var service = new apn.connection({ production: false }); 

// Create a reference to the push notification queue 
var pushRef = new Firebase("<your-firebase>.firebaseio.com/notificationQueue"); 
// listen for items added to the queue 
pushRef.on("child_added", function(snapshot) { 

    // This location expects a JSON object of: 
    // { 
    //  "token": String - A user's device token 
    //  "message": String - The message to send to the user 
    // } 
    var notificationData = snapshot.val(); 
    sendNotification(notificationData); 
    snapshot.ref().remove(); 

}); 

function sendNotification(notificationData) { 
    var notification = new apn.notification(); 
    // The default ping sound 
    notification.sound = "ping.aiff"; 
    // Your custom message 
    notification.alert = notificationData.message; 
    // Send the notification to the specific device token 
    service.pushNotification(notification, [notificationData.token]); 
    // Clean up the connection 
    service.shutdown(); 
} 

per ospitare questo script, non sarà in grado di utilizzare un PaaS come Heroku. Tendono ad uccidere le prese del minimo. Invece dovrai usare una macchina virtuale.

Google Cloud Platform has a Node.js launcher that works well.

+0

dal line: '" .firebaseio.com/notificationQueue "', qual è il "' notifiationQueue' ", o è solo il riferimento per ascoltare le modifiche in Firebase? Anche sulla seconda nota, referncing: "Google Cloud Platform ha un launcher Node.js che funziona bene.", Perché non utilizzare l'hosting Firebase? – Sauron

+0

1. Sì, è così che si ascolta quando è necessario inviare notifiche push al dispositivo specifico. 2. L'hosting Firebase è solo per le risorse statiche, quindi nessun processo del server. –

+0

ok, allora questo risolverà il mio problema. Stavo seguendo il tutorial: https://cloud.google.com/solutions/mobile/firebase-app-engine-android-studio e utilizzando i servlet nel motore dell'app, ma non stava ascoltando il nodo Firebase in tempo reale come il socket del motore dell'app continuava a chiudersi ...., e poteva essere programmato solo con il file 'cron.xml'. Molto deludente ... – Sauron