1

Ich verwende Google Cloud-Funktionen, um Push-Benachrichtigungen über Firebase zu registrieren. In meiner App habe ich eine Benachrichtigungsreferenz, die sich für einen aktuellen Benutzer ändert, wenn sie einen neuen Follower oder Ähnliches bekommen. Jetzt kann ich die Benachrichtigung an das Telefon senden, wenn sich das gesamte Referenz-Kind ändertAbrufen der ID des aktuellen Benutzers aus den Cloud-Funktionen und Firebase

Zum Beispiel, wenn ein einzelner Beitrag gemocht wird, wird es eine Benachrichtigung senden. Was ich tun muss, ist zu beobachten, dass der aktuelle Benutzer nur die Benachrichtigung dieser einzelnen Person sendet.

Hier ist mein JavaScript

const functions = require('firebase-functions'); 
const admin = require('firebase-admin'); 
admin.initializeApp(functions.config().firebase); 
exports.sendPushNotification = functions.database.ref('/notification/{id}').onWrite(event => { 
const payload = { 
notification: { 
    title: 'New message arrived', 
    body: 'come check it', 
    badge: '1', 
    sound: 'default', 
} 
    }; 

    return admin.database().ref('fcmToken').once('value').then(allToken => { 
    if (allToken.val()) { 
     const token = Object.keys(allToken.val()); 
     return admin.messaging().sendToDevice(token, payload).then(response => { 

     }); 
    } 
    }); 

}); 

Datei würde Ich mag diese Zeile ersetzen:

functions.database.ref('/notification/{id}').onWrite(event => { 

mit diesem:

functions.database.ref('/notification/{id}').(The current user ID).onWrite(event => { 

Wie kann ich den aktuellen Benutzer-ID erhalten?

Antwort

2

Sie scheinen sehr neu in JavaScript (nannte es JSON ist sorten eines Give-away für das). Cloud-Funktionen für Firebase ist nicht der beste Weg, JavaScript zu lernen. Ich empfehle zuerst die Firebase documentation for Web developers und/oder die Firebase codelab for Web developer zu lesen. Sie decken viele grundlegende JavaScript-, Web- und Firebase-Interaktionen ab. Danach sind Sie viel besser ausgerüstet, um Code für Cloud-Funktionen zu schreiben.

Nun zurück zu Ihrer Frage: Es gibt kein Konzept eines "aktuellen Benutzers" in Cloud-Funktionen. Ihr JavaScript-Code wird auf einem Server ausgeführt, und alle Benutzer können den Code auslösen, indem sie in die Datenbank schreiben.

Sie können herausfinden, welcher Benutzer die Funktion ausgelöst hat, aber das ist auch nicht das, was Sie hier wollen. Der Benutzer, der die Benachrichtigung ausgelöst hat, muss nicht die Nachricht empfangen. Was Sie stattdessen möchten, ist der Benutzer zu lesen, der das Ziel der Benachrichtigung ist.

Eine Möglichkeit, dies zu tun, ist das Lesen aus dem Datenbankpfad, der die Funktion ausgelöst hat. Wenn Sie die Meldungen pro Benutzer in der Datenbank wie folgt zu halten:

user_notifications 
    $uid 
    notification1: ... 
    notification2: ... 

Sie können die Cloud-Funktion wie folgt auslösen:

exports.sendPushNotification = functions.database.ref('/user_notification/{uid}/{id}').onWrite(event => { 

Und dann in den Code dieser Funktion erhalten die Benutzer-ID des Benutzer mit:

var uid = event.params.uid; 
+1

Sie sind ein Biest! Ich schätze Sie! – user8426652

+0

Gern geschehen. Wenn meine Antwort nützlich war, klicken Sie auf den Upvote-Button links davon. Wenn es Ihre Frage beantwortet hat, klicken Sie auf das Häkchen, um es zu akzeptieren. Auf diese Weise wissen andere, dass Ihnen (ausreichend) geholfen wurde. –

+1

@FrankvanPuffelen, in Ihrer ursprünglichen Antwort erwähnten Sie "Sie können herausfinden, welcher Benutzer die Funktion ausgelöst hat", können Sie einen Hinweis geben, wie das geht? – Tomas

1

Für Swift 3,0-4,0

Sie dies tun können:

import Firebase 
import FirebaseAuth 


class YourClass { 

let user = Auth.auth().currentUser 
let userID = user.uid 

// user userID anywhere 

} 
+0

Ist diese schnelle Sprache oder JSON Sprache. Ich kodiere in js – user8426652

+0

Das ist Swift! Ich entschuldige mich, du hattest ein Swift, Firebase-Tag, also dachte ich, du wolltest Swift benutzen. –

Verwandte Themen