示例#1
0
 public static string ExtractInstallationId(this IDeviceRegistration deviceRegistration)
 {
     return(deviceRegistration.UserId + "___" + deviceRegistration.DeviceIdentifier);
 }
示例#2
0
        public static bool IsNotValid(this IDeviceRegistration deviceRegistration, object sender, IAnalyticsService analyticsService, out Error error)
        {
            if (deviceRegistration == null)
            {
                error = PushErrors.InvalidDeviceRegistration;
                analyticsService.TraceError(sender, error);
                return(true);
            }

            //if (deviceRegistration.Templates.Count == 0)
            //{
            //    error = analyticsService.TraceError(sender, PushErrors.NoTemplateProvidedOnRegistration, deviceRegistration.ToObjectDictionary());
            //    return true;
            //}

            if (string.IsNullOrEmpty(deviceRegistration.PushNotificationServiceHandle))
            {
                error = PushErrors.InvalidPnsHandle;
                analyticsService.TraceError(sender, error, deviceRegistration.ToObjectDictionary());
                return(true);
            }

            if (deviceRegistration.Platform == null || string.IsNullOrEmpty(deviceRegistration.Platform.Value) ||
                deviceRegistration.Platform.Value != RuntimePlatform.iOS.Value &&
                deviceRegistration.Platform.Value != RuntimePlatform.Android.Value &&
                deviceRegistration.Platform.Value != RuntimePlatform.UWP.Value)
            {
                error = PushErrors.InvalidPlatform;
                analyticsService.TraceError(sender, error, deviceRegistration.ToObjectDictionary());
                return(true);
            }

            if (string.IsNullOrEmpty(deviceRegistration.DeviceIdentifier))
            {
                error = PushErrors.MissingDeviceIdentifier;
                analyticsService.TraceError(sender, error, deviceRegistration.ToObjectDictionary());
                return(true);
            }

            if (string.IsNullOrEmpty(deviceRegistration.UserId))
            {
                error = PushErrors.MissingUserId;
                analyticsService.TraceError(sender, error, deviceRegistration.ToObjectDictionary());
                return(true);
            }

            foreach (var template in deviceRegistration.Templates)
            {
                foreach (var templateDataProperty in template.DataProperties)
                {
                    var reservedStrings = ReservedStrings.GetForPlatform(deviceRegistration.Platform);
                    if (reservedStrings.Contains(templateDataProperty))
                    {
                        error = PushErrors.ReservedString(templateDataProperty);
                        analyticsService.TraceError(sender, error, deviceRegistration.ToObjectDictionary());
                        return(true);
                    }
                }
            }

            error = Error.None;
            return(false);
        }
示例#3
0
 public PushNotificationsServerServiceMockBuilder Where_UpdateDeviceRegistrationAsync_returns(IDeviceRegistration result)
 {
     Mock.Setup(x => x.UpdateDeviceRegistrationAsync(Any <IDeviceRegistration>(), Any <IPushNotificationsHub>()))
     .ReturnsAsync(Response.Success(result));
     return(this);
 }
示例#4
0
 public PushNotificationsServerServiceMockBuilder Where_LoadRegistrationForUserDeviceAsync_returns(IDeviceRegistration result)
 {
     Mock.Setup(x => x.LoadRegistrationForUserDeviceAsync(AnyString, AnyString, Any <IPushNotificationsHub>()))
     .ReturnsAsync(Response.Success(result));
     return(this);
 }
示例#5
0
        public async Task <Response <IDeviceRegistration> > UpdateDeviceRegistrationAsync(IDeviceRegistration deviceRegistration, IPushNotificationsHub hub)
        {
            if (deviceRegistration.IsNotValid(this, _analyticsService, out var validationError))
            {
                return(Response.Failure <IDeviceRegistration>(validationError));
            }

            _analyticsService.TraceVerbose(this, "Register device for push notifications", deviceRegistration.ToObjectDictionary());

            _hubClientProxy.Initialize(hub);

            var installation = new Installation
            {
                PushChannel    = deviceRegistration.PushNotificationServiceHandle,
                InstallationId = deviceRegistration.UserId + "___" + deviceRegistration.DeviceIdentifier,
                Tags           = deviceRegistration.Tags,
                Platform       = deviceRegistration.Platform.ToNotificationPlatform(),
                Templates      = new Dictionary <string, InstallationTemplate>()
            };

            installation.Tags.Add($"UserId_{deviceRegistration.UserId}");
            installation.Tags.Add($"DeviceIdentifier_{deviceRegistration.DeviceIdentifier}");

            if (!string.IsNullOrEmpty(deviceRegistration.AccountId))
            {
                installation.Tags.Add($"AccountId_{deviceRegistration.AccountId}");
            }

            foreach (var template in deviceRegistration.Templates)
            {
                installation.Templates.Add(template.ToPlatform(deviceRegistration.Platform));
            }

            await _hubClientProxy.CreateOrUpdateInstallationAsync(installation);

            _analyticsService.TraceVerbose(this, "Push notification registration updated", new Dictionary <string, object>
            {
                { "InstallationId", installation.InstallationId },
                { "Platform", installation.Platform },
                { "PushChannel", installation.PushChannel },
                { "Tags", installation.Tags },
            });

            return(Response.Success(deviceRegistration));
        }