2015-02-24 16 views
6

Muszę wysyłać użytkownikowi powiadomienia w systemie iOS, gdy jakieś dziecko zostanie dodane do ścieżki Firebase.Powiadomienia push w usłudze Firebase - pracownik węzła:

Pomyślałem, że najlepszym sposobem na zrobienie tego będzie stworzenie pracownika Node.js na Heroku, który będzie nasłuchiwał zmian i wyśle ​​powiadomienie za pomocą Urban Airship.

Nie jestem pewien, jaki jest najlepszy sposób, aby nasłuchiwać zmian w Firebase od pracownika Node.js na Heroku. Nie jestem zaznajomiony z pracownikami Heroku i Node.js.

Czy ktoś może mi podać jakieś wskazówki? Przykłady?

+1

Jak o systemie kolejki: Push powiadomienie obiektów do lokalizacji, która jest obserwowana przez serwer, a transakcje przeznaczonym do przetwarzania, a następnie usuń je. Zobacz https://github.com/firebase/firebase-work-queue dla przykładowej realizacji. –

+0

Interesujące. Przyjrzę się temu. –

+0

Oto ważne pytanie, które uważałem za fajne http://stackoverflow.com/questions/28617476/how-to-mitigate-against-long-startup-times-in-firebase-workers-when-dataset-gets –

Odpowiedz

4

wysyłanie powiadomień push z Firebase i węzła-APN jest proste:

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(); 
} 

Dla gospodarzem tego skryptu, nie będzie mógł korzystać z PaaS jak Heroku. Mają tendencję do zabijania bezczynnych gniazd. Zamiast tego będziesz musiał użyć maszyny wirtualnej.

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

+0

od line: '" .firebaseio.com/notificationQueue "', co to jest "' notificationQueue' ", czy jest to tylko odnośnik do odsłuchiwania zmian w Firebase? Również w drugiej notatce, referncing: "Google Cloud Platform ma program uruchamiający Node.js, który działa dobrze.", Dlaczego nie skorzystać z hostingu Firebase? – Sauron

+0

1. Tak, w ten sposób słuchasz, kiedy powiadomienia push muszą być wysyłane do określonego urządzenia. 2. Hosting Firebase jest tylko dla zasobów statycznych, więc nie ma procesów serwera. –

+0

ok, to rozwiąże mój problem. Śledziłem samouczek: https://cloud.google.com/solutions/mobile/firebase-app-engine-android-studio i używanie serwletów w silniku aplikacji, ale nie słuchałem węzła Firebase w czasie rzeczywistym, ponieważ gniazdo silnika aplikacji pozostało zamknięte .... i mogło być zaplanowane tylko z uwzględnieniem pliku 'cron.xml'. Bardzo rozczarowujące ... – Sauron

Powiązane problemy