Windows phone 8 推送注意事项

来源:互联网 发布:sql uniom 编辑:程序博客网 时间:2024/05/16 11:28


最近项目中也在做推送的工作,也遇到了一些问题,在解决问题的过程中加深了对微软推送机制的了解。本文不会长篇累牍地介绍Window phone 8 推送的原理,只是摘取我觉得可能比较重要,容易混淆的地方。

        1. ChannelUri是怎么产生的?

            这里有个比较重要的概念叫推送客户端服务器(push client server), 通过字面意思不容易理解这个东西是干嘛用的,也不知道这是个什么东西。它其实是操作系统的一个服务,对于某一个应用来说,它是全局的。它的主要作用是:当App打开某个通道的时候,该服务会与微软推送服务器协商,产生ChannelUri

        2. Windows phone 8 设备上大到底能不能开启超过30个的推送?

            答案是,这是Windows phone 7 的旧约,在Windows phone 8 上已经没有这条限制了,MSDN没有相关资料,但是在Build大会的视频上,专门解释了这个数量是“无穷大”,而且我也在920T上测试过,超过30个应用程序开启推送,依然能接收到推送。

           但是最近还是遇到了一个问题:920开发者工程机上,在打开通道的时候,会报“Channel is not exits, but could not been opened", 在网上了一下,有的说是Packaging里面的Author和Builder没有填会出现这种情况,或者已经打开了30个推送通道。但是在关闭一些推送之后,依然会出现相同的问题,不知道为什么。

       3. 微软推送服务器的推送队列?

           微软服务器会为每个设备维护一个推送队列,该队列最多能放30条推送消息,如果超过30条,后面的推送消息将会被丢弃。如果用户处于Temp Disconnected状态(比如断网,关闭了数据连接,锁屏,关机),微软服务器会将推送的消息缓存,如果超过24小时,用户未转为Connected状态(重新联网), 则进入Disconnected状态,30条消息被丢弃,如果未超过24小时,用户转为Connected状态,则发送这些消息到设备。

       4. Push Client Server 与 MPNS 是否存在长链接?

           IOS是这样的,设备上的某个部件会与MPNS建立长链接,WP我猜测应该也是这样,在某段时间里,MPNS同WP设备上的Push client Server通信,并且获取设备的状态(Connected, Temp Disconnected,Disconnected),用于生成Error Code。

       5. 推送效率

           不能保证,如果MPNS返回服务器200, 并不能保证该条推送消息已经被设备接收了。如果是412,说明用户现在可能断网了,服务器可能还要隔一段时间再去推一条消息到MPNS。

       6. 如果在应用中打开一个通道失败的时候,检查一下你是否改动过channelName,因为一个应用不能有两个通道,最好的做法是:卸载应用,如果卸载应用没用,就卸载之后关机,再开机。

       7. 是否可以在代码中将磁贴Pin在桌面?

           二级磁贴可以,主磁贴不可以。

      8. 如何自定义IconicTile颜色?

          在WMAppManifest.xml中修改,如下所示

<TemplateIconic>          <SmallImageURI IsRelative="true" IsResource="false">Assets\Images\Tile\icon72x110.png</SmallImageURI>          <Count>0</Count>          <IconImageURI IsRelative="true" IsResource="false">Assets\Images\Tile\icon160x202.png</IconImageURI>          <Title>Camera360</Title>          <Message>          </Message>          <!--如果带透明度,颜色是主题颜色,并不是湖蓝色,如果要湖蓝色,去掉7f-->          <BackgroundColor>#7f00aba9</BackgroundColor>          <HasLarge>True</HasLarge>          <!--写在同一行-->          <LargeContent1>Test1</LargeContent1>          <LargeContent2>          </LargeContent2>          <LargeContent3>          </LargeContent3>          <DeviceLockImageURI IsRelative="true" IsResource="false">          </DeviceLockImageURI>        </TemplateIconic>

        9. 如何在服务器代码中用C#推送IconicTile?

           IconicTile似乎用的人比较少,代码不好找:

string tileMessage2 = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +                    "<wp:Notification xmlns:wp=\"WPNotification\" Version=\"2.0\">" +                    "<wp:Tile Id=\"\" Template=\"IconicTile\">" +                         "<wp:SmallIconImage></wp:SmallIconImage>" +                         "<wp:IconImage></wp:IconImage>" +                         "<wp:WideContent1>" + WideContent1.Text + "</wp:WideContent1>" +                         "<wp:WideContent2>" + WideContent2.Text + "</wp:WideContent2>" +                         "<wp:WideContent3>" + WideContent3.Text + "</wp:WideContent3>" +                         "<wp:Count>" + CountTextBox.Text + "</wp:Count>" +                         "<wp:Title>" + TextBoxTitle.Text + "</wp:Title>" +                    "<wp:BackgroundColor>" + TextBoxBackgroundColor.Text + "</wp:BackgroundColor>" +                    "</wp:Tile> " +                "</wp:Notification>";


        东西暂时就这么多,自己写了一个PushService的库,不知道怎么传上来。之后会总结一下怎么使用认证的推送服务,即是用Https进行推送。

好用就点个赞!

9:00 Studio -- Windows Phone 8 平台专家

      

         

0 0