【WP 8.1開發】手機客戶端應用接收推送通知


上一篇文章中,已經完成了用於發送通知的服務器端,接下來我們就用這個服務端來測試一下。

在開始測試之前,我們要做一個接收通知的WP應用。

1、啟動VS Express for Windows,新建項目,在項目模板中選擇“空白應用程序(Windows Phone)”。

2、既然要接收通知,肯定少不了Toast、磁貼這幾樣常用的通知的,故我們得先准備一些圖片。

在“解決方案資源管理器”中,雙擊打開清單文件,切換到“可見資產”選項卡,這個“資產”指的不你的銀行卡存款有多少,而是你的應用中的一些如圖片、音樂等資源,可以不太好翻譯,就按單詞直譯了,反正你知道它是啥就行了。

我們看到,種圖標所需的尺寸都已經注明,注意每一類圖標都有三種比例,分別為100%,140%和240%。所以,對於每一種圖標,理論上我們需要分別准備三張圖片,假設圖片名字為abc,用於100%比例的圖片可以命名為abc.scale-100.png;對於140%比例的圖片,可以命名為abc.scale-140.png……中間多了個scale-XXX,XXX就是比例值。

如果你覺得麻煩,可以只為一種比例准備圖片即可,比如我只准備100%的所有圖片,不過,我們都知道,圖片放大后會變模糊,但縮小后不會變模糊。所以,我們應用選用比例最大的(240%)的標准來准備圖片文件。

舉個例子,初始屏幕,從窗口中的提示我們看到,240%比例所需的尺寸為1152×1920,我們就設計一張這樣大小的圖片,命名為xxx.scale-240.png,最好用PNG圖片,因為它允許背景透明,通常我們應當考慮使用透明背景,初屏幕的背景顏色可以另外設置。如下圖所示,為了支持環保事業,我把初始屏幕的背景色改為綠色。

這個例子用來測試,也不用設計得太認真,打開PS,隨便塗鴉幾張圖片就行了。為啥要用PS?有人說,用系統自帶的畫圖不就行了嗎?但是,你要知道,系統自帶的 畫圖 程序在繪制PNG圖像時,背景是非透明的,但PS在創建新內容時,可以選擇透明背景,如下圖所示。

有人又會問,PS是什么?PS就是PhotoShop的簡稱。

3、咱們干脆把鎖屏也用上,切換到“應用程序”選項卡,然后找到“通知”節,開啟Toast通知,並把鎖屏通知改為徽章和圖塊文本。

4、開啟鎖屏提醒后,必須設置后台任務,這個我們以后再扯,本示我們不需要后台任務,但也不能空在那里,切換到“聲明”選項卡,增加一個后台任務,在支持的類型處勾上“推送通知”;由於我們沒有開發后台任務,因此在入口點處填上當前應用中App類的名字,包括命名空間名稱。

保存並關閉清單文件。

5、打開MainPage頁面的代碼視圖,在OnNavigatedTo方法中加入以下代碼。

        protected async override void OnNavigatedTo(NavigationEventArgs e)
        {
            PushNotificationChannel channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
            // 如果本地設置中沒有相關鍵,表明是第一次使用
            // 需要存儲URL,並發送給服務器
            //if (Windows.Storage.ApplicationData.Current.LocalSettings.Values.ContainsKey("url")==false)
            //{
            //    Windows.Storage.ApplicationData.Current.LocalSettings.Values["url"] = channel.Uri;
            //    SendURL(channel.Uri);
            //}
            //else
            //{
            //    string savedUrl = Windows.Storage.ApplicationData.Current.LocalSettings.Values["url"] as string;
            //    // 當URL改變了,就重新發給服務器
            //    if (savedUrl != channel.Uri)
            //    {
            //        // 再次保存本地設置
            //        Windows.Storage.ApplicationData.Current.LocalSettings.Values["url"] = channel.Uri;
            //        SendURL(channel.Uri);
            //    }
            //}

            System.Diagnostics.Debug.WriteLine(channel.Uri);
            SendURL(channel.Uri);
        }

調用CreatePushNotificationChannelForApplicationAsync方法創建推送通道,然后把通道的URL發送給我們自己寫的服務器,服務器就是根據這個來向手機發送推送的。

注意被注釋掉的那段代碼,作用是把獲取到的通道URL保存到本地設置中,如果獲取到的新URL和本地設置中的URL相同,說明URL沒有改變,就不必把URL發給服務器了。

SendURL方法的作用是把通道URL發送給服務器,代碼如下:

        private async void SendURL(string url)
        {
            using (HttpClient client =new HttpClient())
            {
                byte[] data = System.Text.Encoding.UTF8.GetBytes(url);
                ByteArrayContent content = new ByteArrayContent(data);
                try
                {
                    await client.PostAsync("http://192.168.1.100:85/svr/", content);
                }
                catch { }
            }
        }

 

好了,我們就剩下最重要的一步,就是設置應用程序的清單文件。還記得上一文章中,我們創建應用時得到的SID,App ID等幾個ID嗎?

 

在服務器端,使用這些信息來申請access token,在WP應用中我們也同樣需要把這些信息寫到清單文件中,這樣推送服務器才能進行推送,如果標識不匹配,就不會進行推送,防止有些別有用心的人自作多情,到處推送垃圾情書,造成信息污染。

那我們是不是打開清單文件,然后一個個改嗎?你要是原意的話,也無所謂。但是,我們是21世紀的高大上,不需要機械勞動,下面我給大家演示一下,如何智能地把商店中的應用信息同步到清單文件(如果你的應用已上傳到應用商店,就不需要這樣做了,但是在測試或學習階段,不要上傳)。

 

在“解決方案資源管理器”中右擊項目名,從快捷菜單中選擇“應用商店”->“將應用程序與應用商店關聯”,如下圖

或者,在VS的菜單欄中依次執行“應用商店”>“將應用程序與應用商店關聯”菜單。

 

這時候會出現一個向導,點 下一步。

這時需要輸入開發者帳號進行驗證。

驗證成功后,正在連接應用商店。

然后,在應用列表中選擇你需要同步的應用,這里我還是選上次創建的“示例應用”。

 

然后一路 下一步 ,直到完成為止。應用程序清單文件會自動修改。

 

================================================================

下面我們就可以測試了,首先記得要以管理員身份運行我們前面寫的服務器。輸入SID和客戶端密鑰,獲取access token。

運行WP手機客戶端應用,會獲取到通道URL並發送給服務器。

 

測試Toast通知

對WP來說,Toast只有ToastText02這個模板可用,就算你使用其他模板,它依然強制使用ToastText02模板。

修改XML模板,id為1的text無素設置toast標題,標題將以粗體顯示;id為2的text元素為內容,顯示為正常字體。

點擊發送后,在手機上你會看到奇跡的發生。

 如果使用X-WNS-SuppressPopup標頭並設為true,Toast通知不會彈出,而是直接扔進操作中心隊列中了。

 

測試磁貼

要看到磁貼通知,先要把應用固定到“開始”屏幕。

然后選擇一個模板,並修改好XML內容,然后發送。

這時候,會看到手機“開始”屏幕上的磁貼已經更新。

也可以試試寬磁貼。

      

 

測試鎖屏通知

先到系統設置中,把應用程序加入到鎖屏序列中。

然后把手機鎖屏,就可以測試了。

 

請看屏幕下方。

 

源碼下載:http://files.cnblogs.com/tcjiaan/NotificationWPClApp.rar

對於RAW通知,可以與后台任務結合起來,即通過后台任務在后台來接收。關於這個,我們下一篇文章再扯。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM