예제 #1
0
        private static async Task CreateRegistrationAsync(NotificationHubClient nhClient)
        {
            var registrationId = await nhClient.CreateRegistrationIdAsync();

            //var registrationDescr = await nhClient.CreateFcmNativeRegistrationAsync(registrationId);
            var registrationDescr = await nhClient.CreateAppleNativeRegistrationAsync(registrationId);

            //Console.WriteLine($"Created APNS registration {registrationDescr.FcmRegistrationId}");
            //registrationDescr.RegistrationId = "96d6bb5d412881d30046f5bf5616beaddf6aa4abe57987bccc4b5c23209dbb0c";
            registrationDescr.RegistrationId = "djPUqVGjd9I:APA91bE7UyqaMr0IAICU7Wz5eV5qUEaZ2nEA7YkFcz6UqCHv-nIkUNDBAE4cZdjjG5bw8WnT2Psu7-eV4GMURVXtMGzI_yju2VRAzaTShW-9xwW2qy9D_SPIRsD8xVLalVklQgy_xara";
            Console.WriteLine($"Create APNS registration {registrationDescr.RegistrationId}");

            var allRegistrations = await nhClient.GetAllRegistrationsAsync(1000);

            foreach (var regFromServer in allRegistrations)
            {
                if (regFromServer.RegistrationId == registrationDescr.RegistrationId)
                {
                    //Console.WriteLine($"Found FCM registration {registrationDescr.FcmRegistrationId}");
                    Console.WriteLine($"Found APNS registration {registrationDescr.RegistrationId}");
                    break;
                }
            }

            //commented out by code creator (next 2 lines)
            //registrationDescr = await nhClient.GetRegistrationAsync<FcmRegistrationDescription>(registrationId);
            //Console.WriteLine($"Retrieved FCM registration {registrationDescr.FcmRegistrationId}");
        }
예제 #2
0
        private static async Task CreateAndDeleteRegistrationAsync(NotificationHubClient nhClient)
        {
            var registrationId = await nhClient.CreateRegistrationIdAsync();

            //var registrationDescr = await nhClient.CreateFcmNativeRegistrationAsync(registrationId);
            var registrationDescr = await nhClient.CreateAppleNativeRegistrationAsync(registrationId);

            //Console.WriteLine($"Created APNS registration {registrationDescr.FcmRegistrationId}");
            Console.WriteLine($"Create APNS registration {registrationDescr.RegistrationId}");

            var allRegistrations = await nhClient.GetAllRegistrationsAsync(1000);

            foreach (var regFromServer in allRegistrations)
            {
                if (regFromServer.RegistrationId == registrationDescr.RegistrationId)
                {
                    //Console.WriteLine($"Found FCM registration {registrationDescr.FcmRegistrationId}");
                    Console.WriteLine($"Found APNS registration {registrationDescr.RegistrationId}");
                    break;
                }
            }

            //commented out by code creator (next 2 lines)
            //registrationDescr = await nhClient.GetRegistrationAsync<FcmRegistrationDescription>(registrationId);
            //Console.WriteLine($"Retrieved FCM registration {registrationDescr.FcmRegistrationId}");

            await nhClient.DeleteRegistrationAsync(registrationDescr);

            //Console.WriteLine($"Deleted FCM registration {registrationDescr.FcmRegistrationId}");
            Console.WriteLine($"Deleted APNS registration {registrationDescr.RegistrationId}");
        }
예제 #3
0
        public async Task <AppleRegistrationDescription> ProcessRegistration(string deviceToken)
        {
            Trace.TraceInformation("Creating Registration");
            AppleRegistrationDescription registration = await hub.CreateAppleNativeRegistrationAsync(deviceToken);

            Trace.TraceInformation("Created Registration with id '{0}'", registration.RegistrationId);
            return(registration);
        }
예제 #4
0
        public async Task <RegistrationDescription> Register(string platform, string registerId, string key)
        {
            if (!string.IsNullOrEmpty(key))
            {
                await _notificationHubClient.DeleteRegistrationAsync(key);
            }

            switch (platform)
            {
            case "android":
                return(await _notificationHubClient.CreateGcmNativeRegistrationAsync(registerId));

            case "ios":
                return(await _notificationHubClient.CreateAppleNativeRegistrationAsync(registerId));

            default:
                throw new Exception("Not supported platform.");
            }
        }
예제 #5
0
        public async Task <RegistrationDescription> Register(Guid userId, string installationId, string deviceToken)
        {
            if (Guid.Empty == userId)
            {
                throw new ArgumentException("userId");
            }

            // Get registrations for the current installation ID.
            var regsForInstId = await hubClient.GetRegistrationsByTagAsync(installationId, 100);


            var updated           = false;
            var firstRegistration = true;
            RegistrationDescription registration = null;

            // Check for existing registrations.
            foreach (var registrationDescription in regsForInstId)
            {
                if (firstRegistration)
                {
                    // Update the tags.
                    registrationDescription.Tags = new HashSet <string>()
                    {
                        installationId, userId.ToString()
                    };

                    var iosReg = registrationDescription as AppleRegistrationDescription;
                    iosReg.DeviceToken = deviceToken;
                    registration       = await hubClient.UpdateRegistrationAsync(iosReg);

                    updated           = true;
                    firstRegistration = false;
                }
                else
                {
                    await hubClient.DeleteRegistrationAsync(registrationDescription);
                }
            }

            if (!updated)
            {
                registration = await hubClient.CreateAppleNativeRegistrationAsync(deviceToken,
                                                                                  new string[] { installationId, userId.ToString() });
            }

            // Send out a welcome notification.
            await this.Send(userId, "Thanks for registering");

            return(registration);
        }
예제 #6
0
        public Task RegisterApple(Guid account_id, string deviceToken)
        {
            return(Task.Run(async delegate()
            {
                try
                {
                    NotificationHubClient hubClient = this.HubClient;

                    Account account = this.API.Direct.Accounts.GetById(account_id);
                    string previousRegistrationID = account.push_ios;

                    if (!string.IsNullOrEmpty(previousRegistrationID))
                    {
                        if (await hubClient.RegistrationExistsAsync(previousRegistrationID))
                        {
                            await hubClient.DeleteRegistrationAsync(previousRegistrationID);
                        }
                    }

                    string accountTag = string.Format(PushAssumptions.TARGET_ACCOUNT_FORMAT, account_id.ToString().ToLower());

                    var registrations = await hubClient.GetRegistrationsByTagAsync(accountTag, 100);

                    foreach (RegistrationDescription registration in registrations)
                    {
                        if (registration.Tags.Contains("ios"))
                        {
                            await hubClient.DeleteRegistrationAsync(registration);
                        }
                    }

                    List <string> tags = new List <string>();
                    tags.Add(accountTag);
                    tags.Add("ios");


                    AppleRegistrationDescription newRegistration = await hubClient.CreateAppleNativeRegistrationAsync(deviceToken.Replace(" ", "").Replace("<", "").Replace(">", ""), tags);

                    if (newRegistration != null)
                    {
                        this.API.Direct.Accounts.UpdatePushTokenApple(account.account_id, newRegistration.RegistrationId);
                    }
                }
                catch (Exception ex)
                {
                    base.IFoundation.LogError(ex);
                }
            }));
        }
예제 #7
0
        public async Task <RegistrationDescription> Post([FromBody] JObject registrationCall)
        {
            // Get the registration info that we need from the request.
            var platform       = registrationCall["platform"].ToString();
            var installationId = registrationCall["instId"].ToString();
            var channelUri     = registrationCall["channelUri"] != null ? registrationCall["channelUri"].ToString() : null;
            var deviceToken    = registrationCall["deviceToken"] != null ? registrationCall["deviceToken"].ToString() : null;
            var registrationId = registrationCall["registrationId"] != null ? registrationCall["registrationId"].ToString() : null;

            var userName = HttpContext.Current.User.Identity.Name;

            // Get registrations for the current installation ID.
            var regsForInstId = await _hubClient.GetRegistrationsByTagAsync(installationId, 100);

            bool updated           = false;
            bool firstRegistration = true;
            RegistrationDescription registration = null;

            // Check for existing registrations.
            foreach (var registrationDescription in regsForInstId)
            {
                if (firstRegistration)
                {
                    // Update the tags.
                    registrationDescription.Tags = new HashSet <string> {
                        installationId, userName
                    };

                    // We need to handle each platform separately.
                    switch (platform)
                    {
                    case "windows":
                        var winReg = registrationDescription as WindowsRegistrationDescription;
                        if (winReg != null)
                        {
                            if (channelUri != null)
                            {
                                winReg.ChannelUri = new Uri(channelUri);
                            }
                            registration = await _hubClient.UpdateRegistrationAsync(winReg);
                        }
                        break;

                    case "android":
                        var gcmReg = registrationDescription as GcmRegistrationDescription;
                        if (gcmReg != null)
                        {
                            gcmReg.GcmRegistrationId = registrationId;
                            registration             = await _hubClient.UpdateRegistrationAsync(gcmReg);
                        }
                        break;

                    case "ios":
                        var iosReg = registrationDescription as AppleRegistrationDescription;
                        if (iosReg != null)
                        {
                            iosReg.DeviceToken = deviceToken;
                            registration       = await _hubClient.UpdateRegistrationAsync(iosReg);
                        }
                        break;
                    }
                    updated           = true;
                    firstRegistration = false;
                }
                else
                {
                    // We shouldn't have any extra registrations; delete if we do.
                    await _hubClient.DeleteRegistrationAsync(registrationDescription);
                }
            }

            // Create a new registration.
            if (!updated)
            {
                switch (platform)
                {
                case "windows":
                    registration = await _hubClient.CreateWindowsNativeRegistrationAsync(channelUri, new[] { installationId, userName });

                    break;

                case "android":
                    registration = await _hubClient.CreateGcmNativeRegistrationAsync(registrationId, new[] { installationId, userName });

                    break;

                case "ios":
                    registration = await _hubClient.CreateAppleNativeRegistrationAsync(deviceToken, new[] { installationId, userName });

                    break;
                }
            }

            // Send out a test notification.
            SendNotification(string.Format("Test notification for {0}", userName), userName);

            return(registration);
        }
 /// <summary>
 /// Create a registration for an app instance
 /// </summary>
 /// <param name="hubClient">Notification hub client for this app</param>
 /// <param name="clientRegistrationId">Client registration id from iOS for this app instance</param>
 /// <param name="tags">Registration tags that describe the user and the app</param>
 /// <returns>Hub registration id</returns>
 protected override async Task <RegistrationDescription> CreateRegistrationAsync(NotificationHubClient hubClient, string clientRegistrationId, IEnumerable <string> tags)
 {
     return(await hubClient.CreateAppleNativeRegistrationAsync(clientRegistrationId, tags));
 }