xamarin 具有FCM推送通知的NotificationHubClient所有属性未发送

jhdbpxl9  于 2023-08-01  发布在  其他
关注(0)|答案(1)|浏览(125)

我正在处理一个继承的项目,所以我不确定我是否缺少配置设置或什么。我正在发送

{
             NotificationHubClient hub = CreateClient();
             return await hub.SendTemplateNotificationAsync(GetNotificationBody(message, phone, sessionId), userId);
         }
         
         public static Dictionary<string, string> GetNotificationBody(string message, string phone = "", string sessionId = "")
         {
             return new Dictionary<string, string>() { { "message", message }, { "phone", phone }, { "sessionId", sessionId } };
         }

字符串
当我收到通知时,FCM的数据中只出现phonemessage

public override void OnMessageReceived(RemoteMessage message)
        {
            string messageText = "";
            if (message.Data.ContainsKey("message"))
                messageText = message.Data["message"];
            string phone = "";
            if (message.Data.ContainsKey("phone"))
                phone = message.Data["phone"];
            string sessionId = "";
            if (message.Data.ContainsKey("sessionId"))
                sessionId = message.Data["sessionId"];
            
// sessionId is empty
   
        }


我测试了删除属性,消息和电话仍然显示在消息包中-值是空的,但键在那里。
我找不到任何设置了body值的东西-我以为它是自由形式的。我错过了什么吗?

vnjpjtjt

vnjpjtjt1#

您遇到的行为可能是由于FCM处理数据有效负载的方式。默认情况下,FCM仅在对应的值为非空时才在数据有效负载中包含键值对。如果值为空或null,FCM将从数据负载中忽略该键值对。但是,即使像你提到的那样正确地给出了键值对,上面的问题也很奇怪,不需要自定义配置设置。

  • FCM支持两种类型的消息,一种是通知消息和数据消息。通知消息由FCM SDK自动处理,FCM SDK可能会在将有效载荷传递给客户端应用之前对其进行修改。另一方面,数据消息按原样传递到应用程序。为了确保所有自定义数据都能可靠地传递,您应该使用数据有效负载。
  • 在这里,我创建了一个示例应用程序来测试数据是否通知。首先,我在Google Firebase中创建了一个新项目,并在Azure通知中心中检索服务器密钥和注册。


的数据

  • 已在Azure通知中心注册。


  • 我在一个示例控制台应用程序中进行了测试。下面是我使用的代码。
class Program
{
    static async Task Main(string[] args)
    {
        await SendDataMessageAsync();
    }

    static async Task SendDataMessageAsync()
    {
        // Connection string of your Notification Hub
        string connectionString = "Endpoint=sb://wedwfett.servicebus.windows.net/;SharedAccessKeyName=DefaultFullSharedAccessSignature;SharedAccessKey=your-SharedAccessKey=";

        // Notification Hub name
        string hubName = "mynotifyhub";

        // Create Notification Hub client
        var hubClient = new NotificationHubClient(connectionString, hubName);

        // Create FcmNotification with data payload
        var notificationPayload = new Dictionary<string, string>()
        {
            { "message", "Hello" },
            { "phone", "1234567890" },
            { "sessionId", "ABC123" }
        };

        var payloadJson = JsonConvert.SerializeObject(notificationPayload);
        var notification = new FcmNotification(payloadJson);

        // Send the data message
        await hubClient.SendNotificationAsync(notification);
    }
}

字符串

*Azure通知中心指标:

  • 我能够看到数据而不丢失其属性。

相关问题