Example #1
0
        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);
        }