程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> Windows 8 Store Apps學習(67) 後台任務: 推送通知

Windows 8 Store Apps學習(67) 後台任務: 推送通知

編輯:關於.NET

介紹

重新想象 Windows 8 Store Apps 之 後台任務

推送通知

示例

1、客戶端

BackgroundTask/PushNotification.xaml

<Page
    x:Class="XamlDemo.BackgroundTask.PushNotification"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:XamlDemo.BackgroundTask"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">
    
    <Grid Background="Transparent">
        <StackPanel Margin="120 0 0 0">
                
            <TextBlock Name="lblMsg" FontSize="14.667" TextWrapping="Wrap"  />
                
            <Button Name="btnCreateChannel" Content="create the channel" Margin="0 10 0 0" Click="btnCreateChannel_Click"  />
                
            <TextBox Name="txtUri" Margin="0 10 10 0"  />
                
            <Image Source="wns.png" Margin="0 10 0 0" HorizontalAlignment="Left" Width="800"  />
                
        </StackPanel>
    </Grid>
</Page>

BackgroundTask/PushNotification.xaml.cs

/*
 * 演示如何接收推送通知
 * 
 * 注:
 * 需要在 Package.appxmanifest 中增加後台任務聲明,並勾選“推送通知”
 * 在 win8 商店創建了應用後,需要將此 app 的商店中的 identity 復制到 Package.appxmanifest 的 identity 節點
 * 不能在模擬器中運行
 * 每次新建的 channel 有效期為 30 天
 * 
 * 另:
 * WNS - Windows Push Notification Service
 * 推送通知的服務端參見:WebServer/PushNotification 內的文件
 */
    
using System;
using Windows.ApplicationModel.Background;
using Windows.Networking.PushNotifications;
using Windows.UI.Notifications;
using Windows.UI.Popups;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
    
namespace XamlDemo.BackgroundTask
{
    public sealed partial class PushNotification : Page
    {
        public PushNotification()
        {
            this.InitializeComponent();
        }
    
        private async void btnCreateChannel_Click(object sender, RoutedEventArgs e)
        {
            // 當收到推送的 raw 通知時,如果 app 在鎖屏,則可以觸發後台任務以執行相關的邏輯(PushNotificationTrigger)
            BackgroundAccessStatus status = BackgroundExecutionManager.GetAccessStatus();
            if (status == BackgroundAccessStatus.Unspecified)
            {
                status = await BackgroundExecutionManager.RequestAccessAsync();
            }
            if (status == BackgroundAccessStatus.Denied)
            {
                await new MessageDialog("請先將此 app 添加到鎖屏").ShowAsync();
                return;
            }
    
            // 創建一個推送通知信道,每個新建的 channel 有效期為 30 天,所以建議每次進入 app 後都重新建一個 channel(但是需要注意間隔較短的話,則會復用之前的 channel)
            PushNotificationChannel channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
            // 接收到通知後所觸發的事件
            channel.PushNotificationReceived += channel_PushNotificationReceived;
    
            // channel.Close(); // 關閉 channel
		// 查看本欄目
		

/*
 * 用於反序列化從 https://login.live.com/accesstoken.srf 獲取到的結果
 */
    
using System.Runtime.Serialization;
    
namespace WebServer.PushNotification
{
    [DataContract]
    public class OAuthToken
    {
        [DataMember(Name = "access_token")]
        public string AccessToken { get; set; }
        [DataMember(Name = "token_type")]
        public string TokenType { get; set; }
    }
}

WebServer/PushNotification/OAuthHelper.cs

/*
 * https://login.live.com/accesstoken.srf 的 OAuth 驗證的幫助類
 */
    
using System;
using System.IO;
using System.Net;
using System.Runtime.Serialization.Json;
using System.Text;
    
namespace WebServer.PushNotification
{
    public class OAuthHelper
    {
        /// <summary>
        /// 獲取 https://login.live.com/accesstoken.srf 的 OAuth 驗證的 access-token
        /// </summary>
        /// <param name="secret">在 win8 商店創建 app 後獲取到的 “客戶端密鑰”</param>
	// 查看本欄目
		
							
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved