zoukankan      html  css  js  c++  java
  • 【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通知,可以与后台任务结合起来,即通过后台任务在后台来接收。关于这个,我们下一篇文章再扯。

  • 相关阅读:
    VS2008编写MFC程序--使用opencv2.4()
    November 02nd, 2017 Week 44th Thursday
    November 01st, 2017 Week 44th Wednesday
    October 31st, 2017 Week 44th Tuesday
    October 30th, 2017 Week 44th Monday
    October 29th, 2017 Week 44th Sunday
    October 28th, 2017 Week 43rd Saturday
    October 27th, 2017 Week 43rd Friday
    October 26th, 2017 Week 43rd Thursday
    October 25th, 2017 Week 43rd Wednesday
  • 原文地址:https://www.cnblogs.com/tcjiaan/p/3905090.html
Copyright © 2011-2022 走看看