public bool SendFcmMessage(object data, params DeviceId[] deviceIds) { var tokens = new LinkedList <string>(); foreach (var deviceId in deviceIds) { if (_persistenceProvider.TryGetDeviceInfos(deviceId, out var deviceInfo)) { tokens.AddLast(deviceInfo.FcmToken); } else { Logger.Info($"DeviceToken for Id: {deviceId?.FullId} not found!"); } } var tokenArr = tokens.Where(x => x != null).ToArray(); if (tokens.Count > 0) { try { var msg = new FcmMessageBuilder() .AddReceiver(tokenArr) .SetDebug(false) .SetPriority(FcmMessagePriority.High) .SetData(data) .Build(); var response = _fcmService.Send(msg); if (response.Error == ResponseError.NoError) { Logger.Debug( $"FCM Response: [Success={response.ResponseMessage?.Success}, Failure={response.ResponseMessage?.Failure}]"); return(true); } Logger.Error($"FCM Response Error - Code: {response.ErrorCode}, \"{response.ErrorMessage}\""); return(false); } catch (FcmMessageBuilderException e) { Logger.Error("FCM Builder encountered an Error:", e); return(false); } } Logger.Debug("FcmNotification: Found no devices for notification"); return(true); }