protected async override Task <string> Register(Installation installation, IUPSHttpClient client)
        {
            this.installation = installation;
            this.client       = client;
            HttpNotificationChannel channel;
            string channelName = "ToastChannel";

            channel = HttpNotificationChannel.Find(channelName);

            if (channel == null)
            {
                channel = new HttpNotificationChannel(channelName);
            }

            var tcs = new TaskCompletionSource <string>();

            channel.ChannelUriUpdated += async(s, e) =>
            {
                ChannelStore channelStore = new ChannelStore();
                if (!e.ChannelUri.ToString().Equals(channelStore.Read()))
                {
                    installation.deviceToken = e.ChannelUri.ToString();
                    await client.register(installation);

                    channelStore.Save(installation.deviceToken);
                    tcs.TrySetResult(installation.deviceToken);
                }
            };
            channel.ErrorOccurred += (s, e) =>
            {
                tcs.TrySetException(new Exception(e.Message));
            };

            channel.ShellToastNotificationReceived += new EventHandler <NotificationEventArgs>(PushChannel_ShellToastNotificationReceived);

            channel.Open();
            channel.BindToShellToast();
            return(await tcs.Task);
        }