From 3c1105b35d77c48316f1026c5bc451a03efe4289 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lison=20Fernandes?= Date: Mon, 22 Apr 2024 20:12:21 +0100 Subject: [PATCH] [PM-7631] Handle new FCMv1 format (#3176) * handle new FCMv1 format * optimizations * restore formatting * revert formatting * revert formatting --------- Co-authored-by: Kyle Spearrin --- .../Android/Push/FirebaseMessagingService.cs | 31 ++++++++++++++++--- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/src/App/Platforms/Android/Push/FirebaseMessagingService.cs b/src/App/Platforms/Android/Push/FirebaseMessagingService.cs index b26a3022e8..740a3c629c 100644 --- a/src/App/Platforms/Android/Push/FirebaseMessagingService.cs +++ b/src/App/Platforms/Android/Push/FirebaseMessagingService.cs @@ -1,8 +1,9 @@ -#if !FDROID +#if !FDROID using System; using Android.App; using Bit.App.Abstractions; using Bit.Core.Abstractions; +using Bit.Core.Enums; using Bit.Core.Services; using Bit.Core.Utilities; using Firebase.Messaging; @@ -20,7 +21,7 @@ namespace Bit.Droid.Push try { var stateService = ServiceContainer.Resolve("stateService"); var pushNotificationService = ServiceContainer.Resolve("pushNotificationService"); - + await stateService.SetPushRegisteredTokenAsync(token); await pushNotificationService.RegisterAsync(); } @@ -38,13 +39,33 @@ namespace Bit.Droid.Push { return; } - var data = message.Data.ContainsKey("data") ? message.Data["data"] : null; - if (data == null) + + JObject obj = null; + if (message.Data.TryGetValue("data", out var data)) + { + // Legacy GCM format + obj = JObject.Parse(data); + } + else if (message.Data.TryGetValue("type", out var typeData) && + Enum.TryParse(typeData, out NotificationType type)) + { + // New FCMv1 format + obj = new JObject + { + { "type", (int)type } + }; + + if (message.Data.TryGetValue("payload", out var payloadData)) + { + obj.Add("payload", payloadData); + } + } + + if (obj == null) { return; } - var obj = JObject.Parse(data); var listener = ServiceContainer.Resolve( "pushNotificationListenerService"); await listener.OnMessageAsync(obj, Device.Android);