推送通知在windows phone 8中不起作用

本文关键字:不起作用 phone windows 通知 | 更新日期: 2023-09-27 18:02:22

通道uri没有在windows phone 8模拟器中创建,下面是代码:

   `private void OnChannelUriChanged(Uri value)
    {
        Dispatcher.BeginInvoke(() =>
        {
            txtURI.Text = value.ToString();
        });
        Debug.WriteLine("URI: " + value.ToString());
    }
    private static void BindToShell(HttpNotificationChannel httpChannel)
    {
        try
        {
            httpChannel.BindToShellToast();
        }
        catch (Exception)
        {
        }
    }
    void httpChannel_ShellToastNotificationReceived(object sender, NotificationEventArgs e)
    {
        Dispatcher.BeginInvoke(() =>
        {
            txtURI.Text = "Toast Notification Message Received: ";
            if (e.Collection != null)
            {
                Dictionary<string, string> collection = (Dictionary<string, string>)e.Collection;
                System.Text.StringBuilder messageBuilder = new System.Text.StringBuilder();
                foreach (string elementName in collection.Keys)
                {
                    txtURI.Text += string.Format("Key: {0}, Value:{1}'r'n", elementName, collection[elementName]);
                }
            }
        });
    }
    void httpChannel_ChannelUriUpdated(object sender, NotificationChannelUriEventArgs e)
    {
        //You get the new Uri (or maybe it's updated)
        OnChannelUriChanged(e.ChannelUri);
    }
    private void SetupChannel()
    {
        HttpNotificationChannel httpChannel = null;
        string channelName = "DemoChannel";
        //if channel exists, retrieve existing channel
        httpChannel = HttpNotificationChannel.Find(channelName);
        if (httpChannel != null)
        {
            //If we cannot get Channel URI, then close the channel and reopen it
            if (httpChannel.ChannelUri == null)
            {
                httpChannel.UnbindToShellToast();
                httpChannel.Close();
                SetupChannel();
                return;
            }
            else
            {
                OnChannelUriChanged(httpChannel.ChannelUri);
            }
            BindToShell(httpChannel);
        }
        else
        {
            httpChannel = new HttpNotificationChannel(channelName);
            httpChannel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(httpChannel_ChannelUriUpdated);
            httpChannel.ShellToastNotificationReceived += new EventHandler<NotificationEventArgs>(httpChannel_ShellToastNotificationReceived);
            httpChannel.Open();
            BindToShell(httpChannel);
        }
    }
    private void btnCreateChannel_Click(object sender, RoutedEventArgs e)
    {
        SetupChannel();
    }`

谁能提出解决这个问题的办法由于

推送通知在windows phone 8中不起作用

试试这个:

 public MainPage()
    {
        InitializeComponent();
        /// Holds the push channel that is created or found.
        HttpNotificationChannel pushChannel;
        // The name of our push channel.
        string channelName = "ToastSampleChannel";
        // Try to find the push channel.
        pushChannel = HttpNotificationChannel.Find(channelName);
        // If the channel was not found, then create a new connection to the push service.
        if (pushChannel == null)
        {
            pushChannel = new HttpNotificationChannel(channelName);
            // Register for all the events before attempting to open the channel.
            pushChannel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(PushChannel_ChannelUriUpdated);
            pushChannel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(PushChannel_ErrorOccurred);
            // Register for this notification only if you need to receive the notifications while your application is running.
            pushChannel.ShellToastNotificationReceived += new EventHandler<NotificationEventArgs>(PushChannel_ShellToastNotificationReceived);
            pushChannel.Open();
            // Bind this new channel for toast events.
            pushChannel.BindToShellToast();
        }
        else
        {
            // The channel was already open, so just register for all the events.
            pushChannel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(PushChannel_ChannelUriUpdated);
            pushChannel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(PushChannel_ErrorOccurred);
            // Register for this notification only if you need to receive the notifications while your application is running.
            pushChannel.ShellToastNotificationReceived += new EventHandler<NotificationEventArgs>(PushChannel_ShellToastNotificationReceived);
            // Display the URI for testing purposes. Normally, the URI would be passed back to your web service at this point.
            System.Diagnostics.Debug.WriteLine(pushChannel.ChannelUri.ToString());
            MessageBox.Show(String.Format("Channel Uri is {0}",
                pushChannel.ChannelUri.ToString()));
        }
    }
    void PushChannel_ChannelUriUpdated(object sender, NotificationChannelUriEventArgs e)
    {
        Dispatcher.BeginInvoke(() =>
        {
            // Display the new URI for testing purposes.   Normally, the URI would be passed back to your web service at this point.
            System.Diagnostics.Debug.WriteLine(e.ChannelUri.ToString());
            MessageBox.Show(String.Format("Channel Uri is {0}",
                e.ChannelUri.ToString()));
        });
    }
    void PushChannel_ErrorOccurred(object sender, NotificationChannelErrorEventArgs e)
    {
        // Error handling logic for your particular application would be here.
        Dispatcher.BeginInvoke(() =>
            MessageBox.Show(String.Format("A push notification {0} error occurred.  {1} ({2}) {3}",
                e.ErrorType, e.Message, e.ErrorCode, e.ErrorAdditionalData))
                );
    }
    void PushChannel_ShellToastNotificationReceived(object sender, NotificationEventArgs e)
    {
        StringBuilder message = new StringBuilder();
        string relativeUri = string.Empty;
        message.AppendFormat("Received Toast {0}:'n", DateTime.Now.ToShortTimeString());
        // Parse out the information that was part of the message.
        foreach (string key in e.Collection.Keys)
        {
            message.AppendFormat("{0}: {1}'n", key, e.Collection[key]);
            if (string.Compare(
                key,
                "wp:Param",
                System.Globalization.CultureInfo.InvariantCulture,
                System.Globalization.CompareOptions.IgnoreCase) == 0)
            {
                relativeUri = e.Collection[key];
            }
        }
        // Display a dialog of all the fields in the toast.
        Dispatcher.BeginInvoke(() => MessageBox.Show(message.ToString()));
    }
     }