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

來源:互聯網
上載者:User

標籤:style   blog   http   color   使用   os   io   檔案   

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

在開始測試之前,我們要做一個接收通知的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通知,可以與背景工作結合起來,即通過背景工作在後台來接收。關於這個,我們下一篇文章再扯。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.