C# 关于更改Xamarin/C中数据的通知#
嗨,我已经基于这个答案实现了一个方法: 但我很难让它工作 这是我的密码:C# 关于更改Xamarin/C中数据的通知#,c#,database,firebase,xamarin,notifications,C#,Database,Firebase,Xamarin,Notifications,嗨,我已经基于这个答案实现了一个方法: 但我很难让它工作 这是我的密码: void DoFirebaseObserve() { var firebase = new FirebaseClient(Constants.FirebaseProjectUrl); firebase.Child("RegisterUserTable").AsObservable<RegisterUser>().Subs
void DoFirebaseObserve()
{
var firebase = new FirebaseClient(Constants.FirebaseProjectUrl);
firebase.Child("RegisterUserTable").AsObservable<RegisterUser>().Subscribe(obs =>
{
switch (obs.EventType)
{
case Firebase.Database.Streaming.FirebaseEventType.InsertOrUpdate:
Console.WriteLine("InsertOrUpdate");
break;
case Firebase.Database.Streaming.FirebaseEventType.Delete:
Console.WriteLine("Delete");
break;
default:
break;
}
});
}
void DoFirebaseObserve()
{
var firebase=新的FirebaseClient(Constants.FirebaseProjectUrl);
firebase.Child(“RegisterUserTable”).AsObservable().Subscribe(obs=>
{
交换机(obs.EventType)
{
案例Firebase.Database.Streaming.FirebaseEventType.InsertOrUpdate:
Console.WriteLine(“插入更新”);
打破
案例Firebase.Database.Streaming.FirebaseEventType.Delete:
控制台。写入线(“删除”);
打破
违约:
打破
}
});
}
我在应用程序主页的OnAppearing方法中调用此代码。我试过使用和不使用while(true){}条件
当我在firebase中添加、更新或删除记录时,我的应用程序中不会发生任何事情。writelines从不被调用
任何帮助都将不胜感激。谢谢。所以我通过在Firebase控制台中使用谷歌云功能找到了解决方法 第1步。在.Net代码中设置FCM 按照本教程操作: 一旦您从该设备获得FCM令牌,您可以将其添加到实时数据库中(我自己在firebase控制台中手动完成了这项测试) 第2步。设置云功能 按照本教程操作: 第3步。创建发送消息的功能 您可以在云函数中使用此node.js代码发送多达500台设备:
// Create a list containing up to 500 registration tokens.
// These registration tokens come from the client FCM SDKs.
const registrationTokens = [
'YOUR_REGISTRATION_TOKEN_1',
// …
'YOUR_REGISTRATION_TOKEN_N',
];
const message = {
data: {score: '850', time: '2:45'},
tokens: registrationTokens,
};
admin.messaging().sendMulticast(message)
.then((response) => {
console.log(response.successCount + ' messages were sent successfully');
});
资料来源:
代码示例
我的一些代码可以帮助您了解如何进行类似的操作。不能保证这是最佳方法,但它是有效的
const reference = "JourneyTbl/{journeyId}";
// newJourneyAdded | listener method | Send push notif when new journey created:
exports.newJourneyAdded = functions.database.ref(reference)
.onCreate((event, context) => {
// where fcm tokens are stored:
const refNotifications = "NotificationTbl";
// get ref to RegNotTable:
const refFcm = admin.database().ref(refNotifications);
// array to hold all fcms from table:
const allFcms = [];
// get value of "NotificationTbl":
refFcm.on("value", (snapshot) => {
// check if there's any children:
if (snapshot.hasChildren()) {
// loop through children:
snapshot.forEach((element) => {
// stringify the data:
const asString = JSON.stringify(element);
// parse that as a JSON object:
const asJson = JSON.parse(asString);
// add fcm token to array:
allFcms.push(asJson.fcm);
});
}
// if array contains something:
if (allFcms.length > 0) {
// construct message to send:
const msg = {
notification: {
title: "Notification Title goes here",
body: "Notification Body goes here ",
},
tokens: allFcms, // pass the tokens
};
// send that message:
admin.messaging().sendMulticast(msg)
.then((response) => {
console.log(response.successCount + " mgs were sent sfly");
});
} else {
console.log("No devices in FCM tokens list");
}
});
return "ok";
});
为什么要将此代码放入while循环中?你只需要在我最初没有while循环的情况下尝试它时设置侦听器,但它不起作用,所以我尝试了一下。你需要摆脱它,这最终会使你的应用程序崩溃。您是否考虑过它可能会被调用,但使用的事件类型与您正在检查的不同?我已经从代码中删除了循环,谢谢。Firebase.Database.Streaming.FirebaseEventType只有两个常量,InsertOrUpdate和Delete,即我不认为它可以是其他任何东西。如果将
WriteLine()
放在开关外部可能有用,以防万一。您是否检查了AsObservable
是否实际返回了数据?