如何获得 Microsoft Push Notification Service(MPNS)的最佳体验

有很多同学抱怨MPNS的各种问题,其中包括服务超时、返回各种错误代码不知如何处理等等。。今天我用一点时间来为大家介绍下如何处理和操作咱们的MPNS。 首先为大家明确一个问题,Microsoft Push Notification Service (MPNS) 是执行的异步推送。今天将介绍如何使用高效的服务将我们的推送信息发送至云端最终发送到 Windows Phone 手机。 第一 如何设置发送超时 对于超时时间我建议大家设置为 15秒。例如:你使用的 ASP.NET 进行数据推送时,建立 WebRequest 对象设置超时时间 HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState; request.Timeout = 15000;     第二 处理推送通道的更新 当你的客户端程序发现推送通道更新后,应用一定要将最新的推送通道 URL 更新到你的服务器端。要保证您的服务器端的推送通道是最新的。建议你可以使用 device ID 与推送通道进行匹配,如果发现推送通道的URL更新就立刻进行推送通道更新,服务器通过device ID进行判断是,新用户注册还是已有用户的推送通道更新。 Windows Phone 的官方资料中提供了如何建立一个接受推送消息的应用代码示例,其中包括了如何处理,推送通道更新事件。您可以参考 如何发送和接收 Windows Phone 的磁贴通知 了解如何使用PushChannel_ChannelUriUpdated方法。(另:推送通道长度也许会超过 1024 characters) 第三 使用已验证的 Web 服务以发送 Windows Phone 的推送通知 使用MPNS认证端,如果你的推送服务针对一台WindowsPhone设备24小时内推送消息数量超过500条,或者您想更安全的推送消息。另使用没有MPNS验证的终端进行推送,每日的推送限额是500条/每个device。 如何设置…

0

关于给WP推送通知启用HTTPS验证的细节

关于整个推送机制, 如何建立推送通道,在服务端和客户端的代码实现,互联网以及MSDN已经有无数中英文资料和示例了。然而,如果希望启用HTTPS推送,相关的资料就很少了。在这篇文章中我们主要希望谈论一下关于Windows Phone中为推送通知Push Notification启用HTTPS验证的一些所需要注意到的细节。 在默认情况下,Windows 8 store app的所有推送都是启用了HTTPS验证的,但是对于WP来说,默认情况下所有推送通道都是基于安全性较低的非加密通道HTTP,所以出于信息安全的考虑,我们推荐开启为推送通知开启HTTPS。除此之外,启用推送HTTPS验证的好处在于,能够解除每个推送通道每天500条推送的上限。而且最主要的是,除了开发商需要花钱购买一个受信任的证书以及一个WP开发者账户,一切都是免费的。 关于HTTP通讯的500条上限的解释,MSDN中的原文是这样的: There is no daily limit on the number of push notifications an authenticated web service can send. Unauthenticated web services, on the other hand, are throttled at a rate of 500 push notifications per subscription, per day. 很多开发者对于这里关于“per subscription, per day”的描述有一些理解偏差。实际情况是,基于对一个APP来说,在一个WP设备上,只能申请到一个Push Notification Channel (“subscription”),而每台不同设备的APP所能申请到的Channel Uri都是独特的,那么这里的限制就是对于这一个Channel Uri,只能够推送500个。所以说,对于每一个APP,HTTP推送在每个单独设备上的每日上限是500个,APP互相之间额度也不共享不冲突。…

0

如何在Windows Phone和Windows 8 Store中获取到设备ID

背景 很多情况下,我们需要去辨识当前App运行的设备,以便应用一些适合此设备的内容。Windows Phone 7时代,我们有一些原生的去获取设备号的方法。但是来到Windows Phone 8时代,却有些改变。至少在Windows 8 RTM中,获取Unique ID的方法消失了。但是这个问题在这一年里被广泛的提及。 解决方法 Windows Phone 7.X 典型用法: (注意:不要忘记把ID_CAP_IDENTITY_DEVICE加入到App Manifest里面) 1: byte[] myDeviceID = (byte[])Microsoft.Phone.Info.DeviceExtendedProperties.GetValue(“DeviceUniqueId”); 2: 3: string DeviceIDAsString = Convert.ToBase64String(myDeviceID); 在Microsoft.Phone.Info.DeviceExtendedProperties中有一句话需要注意: 在 Windows Phone OS 7.0 中,此类被用来查询特定于设备的属性。在 Windows Phone OS 7.1 中,DeviceExtendedProperties 的大多数属性已弃用,而应改用新的 DeviceStatus 类。但是,在适当时,您仍然可以使用以下任何未弃用的属性。 不管怎样,我们依然需要使用DevieExtendedProperties去获取“DeviceUniqueID”。因为在新的Microsoft.Phone.Info.DeviceStatus中没有被提及。 Windows Phone 8 当然,上文提及的API在Windows Phone 8中还是可以使用的。但是新的API在Windows Phone 中也有所提及。使用HostInformation.PublisherHostId可以直接获取到一段包含设备号的string。并且,这个API可以在.NET和C++中使用。不过,这里也有一些改变,对于在Windows Phone 8或后续版本中运行的不同的Windows Phone 8的app来说,DeviceUniqueID的值也是不一样的。换一种说法也就是,两个App分别被不同的Windows…

0