小娜追踪快递

Cle****-he UID.1073626
2016-06-23 发表

本帖最后由 Clever-he 于 2016-6-23 10:13 编辑

小娜作为我们的全能秘书,能够帮我们设置提醒、推荐新闻、查询天气、聊天讲段子,现在还能帮助我们追踪快递,大家可以移步微软小娜懒癌支持中心阅读相关软文,不想移步的朋友也可以通过下面的动图来了解一下效果,看一下Win10上的网购剁手之旅是如何的更加舒适省心。

***图片停止解析***
(以此动图来向热心博主疯狂的懒羊羊表示感谢,该博主向我们推荐了ScreenToGif,使我们的博客更生动)



如何在我们的应用/网站中集成“小娜追踪快递”功能呢?

这和把大象装在冰箱一样简单,只需要三步:1)打开IDE,加载工程;2)加入包含ms-cortana://InterestTracking Deep-link的HyperLink或者Button控件;3)编译部署,把IDE关上。

没学会?!好吧,我们还是更详细的讲一下。第一步和第三步就不说了,主要说一下第二步。

首先我们来看一下小娜Deep-link的格式,如下图:
***附件停止解析***

参数部分是URL编码过的Json串,该Json对象是一个数组,数组中的元素包含以下属性:
***附件停止解析***

可以使用如下代码得到Deep-link字符串: <code>public class MailPackage
{
public string type { get; set; }
public string TrackingNumber { get; set; }
public string CarrierName { get; set; }
}

public string GenerateCortanaDeepLink(string carrierName, string trackingNumber)
{
if (string.IsNullOrWhiteSpace(carrierName)
|| string.IsNullOrWhiteSpace(trackingNumber))
{
return null;
}

// JSON对象
IList<MailPackage> mailPackages = new List<MailPackage>();
MailPackage mailPackage = new MailPackage
{
type = "package",
TrackingNumber = trackingNumber,
CarrierName = carrierName
};
mailPackages.Add(mailPackage);

// 序列化
var serializer = new DataContractJsonSerializer(typeof(List<MailPackage>));
var stream = new MemoryStream();
serializer.WriteObject(stream, mailPackages);
byte[] dataBytes = new byte[stream.Length];
stream.Position = 0;
stream.Read(dataBytes, 0, (int)stream.Length);
string dataString = Encoding.UTF8.GetString(dataBytes);

// Url encode
string encodeData = System.Net.WebUtility.UrlEncode(dataString);

// DeepLink
string url = string.Format("ms-cortana://InterestTracking?parameter={0}", encodeData);

return url;
}</code>

有了Deep-link后,我们有多种方式来使用

在网页中,将Deep-link作为一个超链接来使用就可以
<code>
<a href="ms-cortana://InterestTracking?parameter={URL encoded package info JSON string}">Tell Cortana</a>
</code>

在UWP应用中,如果你使用的是HyperlinkButton,在XAML中你可以这样用 <code>
<HyperlinkButton NavigateUri="ms-cortana://InterestTracking?parameter={URL encoded package info JSON string}" />
</code>

如果你使用其它控件,你可以在其点击事件处理中加入如下代码 <code>Windows.System.Launcher.LaunchUriAsync("ms-cortana://InterestTracking?parameter={URL encoded package info JSON string}");</code>

另外需要提到一点,使用Deep-link的方式来让小娜追踪快递,是在14332之后的预览版才有的功能。淘宝、旺信在发布时考虑到有的用户没有升级预览版,但也有的用户可以提前尝鲜新功能并给我们反馈改进意见,所以在代码中加入了对系统版本的判断,只有系统达到一定版本才能看到追踪快递这个按钮。下面提供两个关于版本号处理的函数,供大家参考。

一个是将当前系统版本号取出并转为字符串: <code>public static string GetOperatingSystemVersion()
{
string sv = AnalyticsInfo.VersionInfo.DeviceFamilyVersion;
ulong v = ulong.Parse(sv);
ulong v1 = (v & 0xFFFF000000000000L) >> 48;
ulong v2 = (v & 0x0000FFFF00000000L) >> 32;
ulong v3 = (v & 0x00000000FFFF0000L) >> 16;
ulong v4 = v & 0x000000000000FFFFL;
string version = $"{v1}.{v2}.{v3}.{v4}";

return version;
}</code>

另一个是输入一个版本号,得到对应的ulong值,方便与系统版本号AnalyticsInfo.VersionInfo.DeviceFamilyVersion比较大小: <code>public static ulong GenerateUlongFromVersion(ushort Major, ushort Minor, ushort Build, ushort Revision)
{
return ((ulong)Major << 48)
+ ((ulong)Minor << 32)
+ ((ulong)Build << 16)
+ ((ulong)Revision);
}</code>

是不是很简单啊,有没有很想体验一下啊,快来加入Windows预览体验吧,然后自己动手试一试!示例代码可***链接停止解析***。

当然,小娜的这个功能还没有正式Release,可能会存在一些Bug。比如我们在内部试用时就发现不同数据源过来的快递公司名称不一致,有的是圆通快递,有的却是圆通速递。针对此,小娜团队积极应对,对能收集到的快递公司名作了对应的映射关系,使得常见的快递公司的不同叫法都可以匹配到正确的记录。


文章来自:MS-UAP 开发者交流群:53078485,期待你的加入!

敬告:
为防止不可控的内容风险,本站已关闭新用户注册,新贴的发表及评论;
你现在看到的内容只是互联网用户曾经发表的言论快照,仅用于老用户留存纪念,且仅与科技行业相关,全部内容不代表本站观点及立场;
本站重新开放前已针对包括用户隐私、版权保护、信息安全、国家政策在内的各种互联网法律法规要求,执行了隐患内容的自查、屏蔽和删除;
本站目前所属个人主体,未有任何盈利安排与计划,且与原WFUN.COM所属公司不存在任何关联关系;
如果本帖内容或者相关资源侵犯到您的合法权益,或者您认为存在问题,那么请您务必点此举报或投诉!
全部回复:
彪彪小泽 UID.1343797
2016-06-23 使用 Lumia 950 回复

好像是个好帖

wucd UID.573665
2016-06-23 回复

好复杂,小娜不是能直接跟踪快递吗?

yanchao891012 UID.726627
2016-06-23 使用 Lumia 930 回复

看着很棒

本站使用Golang构建,点击此处申请开源鄂ICP备18029942号-4联系站长投诉/举报