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
是否实际返回了数据?