我正在使用FCM探索雲功能,以便對我的iOS應用設備執行推送通知。我有以下結構,我正在收聽註冊參加活動的人。我想提取eventHost,以便我可以去我的用戶節點查找userUID並最終找到他的deviceID,並向他發送推送通知。Firebase CloudFunctions:查詢節點
{
"events" : {
"XXX" : {
"eventHost" : "YYY", //<-- How do I get this node?
"eventID" : "XXX",
"registered" : { //<-- Listening for this node
"ASKDJHAIUCHA" : {
"name" : "Emma Watson",
"userUID" : "ASKDJHAIUCHA"
}
},
},
},
"users" : {
"YYY" : {
"deviceID" : "1234456",
"name" : "Andrew Garfield",
"userUID" : "YYY"
},
}
}
我對雲計算功能本身至今代碼:
exports.sendNotification = functions.database.ref('/events/{eventId}/registered')
.onWrite(event => {
const register = event.data.val();
const eventHost = functions.database.ref('/events/' + event.params.eventId + '/eventHost')
console.log('sendNotifications', eventHost);
const payload = {
notification: {
title: "Event Registration",
body: "Someone registered to your event!"
}
};
const options = {
priority: "high"
};
return admin.messaging().sendToDevice("theDeviceID", payload, options)
});
我的雨燕部分時增加值到數據庫是這樣的:
@IBAction func registerButtonDidTap(_ sender: Any) {
let personDict = [FIRConstants.UserInfo.Name: user.userName,
FIRConstants.UserInfo.UserUID: user.userUID]
let registerPerson = [user.userUID!: personDict as AnyObject] as [String: AnyObject]
let values = ["registered": registerPerson]
FIRHelperClient.sharedInstance.checkIfEventHasRegistrants(ref, event.eventID!) { (has, error) in
if let error = error {
print(error.localizedDescription)
} else {
if let has = has {
if has {
self.ref.child("events").child(self.event.eventID!).child("registered").updateChildValues(registerPerson)
} else {
self.ref.child("events").child(self.event.eventID!).updateChildValues(values)
}
}
}
}
}
我的雲功能是肯定不完整,因爲目前我硬編碼設備ID。由於我對Node.js非常不熟悉,並且試圖在Swift和服務器端代碼中寫入iOS代碼,所以如果這個問題是基本的,請原諒我。這裏的一些建議將是有益的,謝謝。
您好,非常感謝您的建議,我花了一些時間閱讀codelab並設法部署一些使用雲功能的非常基本的推送通知代碼。我也注意到你對數據嵌套的建議。 – Koh
很高興聽到Koh。請注意,您發佈的代碼和JSON與我的答案中的代碼和JSON類似。這是一個普遍的禮貌*不(作爲你自己的答案張貼相同的基本解決方案。 –
嗨,坦率地說,我很抱歉,我已經拿下了我的答案,並認出了你的答案。 – Koh