注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

创新改变世界

you changed the world

 
 
 

日志

 
 

Windows8:Share Contract — 分享AP的功能、内容  

2011-10-26 13:19:58|  分类: win8 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

现在的人们在用PC做什么?人们比以前任何时候都乐意相互分享:有趣的信息、图片、视频,等等。Share Contract为实现这些需求提供了一个轻量的、应景的(in Context,相互联系的)、便捷的操作体验。

你的PC上有许许多多的Ap,有人甚至会自己写一支社交软件,那么它如何与其它Ap做分享?Share Contract提供了强大的功能,让Ap之间的交互体验更棒。
两个例子:
1. 分享Page到Tweet@rama
2. 分享Game到Socialite,显示最高分,炫耀之。

Windows8:Share Contract — 分享你AP的功能 - 乂乂 - 一个人,一支烟  ·~~Windows8:Share Contract — 分享你AP的功能 - 乂乂 - 一个人,一支烟  ·~~ 
 

Share不是简单的Copy。当你在玩游戏的时候,Screen上并没有你可以Copy的东西。想象一下这个时候通常会分享什么?或许是他们的最高分、或许是他们最新通过的关卡。你仅仅划出Menu,点击Share就可以做到。
以前的分享方式弱爆了,你需要打开许多窗口,从一个地方copy到另一个地方,截图、码字,可能到最后都会不到最开始的地方。

像Game这一类Ap,想象User会去分享什么。再一个例子,在浏览器上选中一段文字,Share。
注意到share上部有“Frequent”,微软的UE们发现User会分享各种各样的东西到相同的地方、相同的Ap,User有他自己的喜好和习惯操作,他们通常会多次地执行一样的操作。所以,期望说最常用的操作可以很快捷。

Windows8:Share Contract — 分享你AP的功能 - 乂乂 - 一个人,一支烟  ·~~ 

Share不会显示所有已安装的Ap,而是显示那些可以处理当前需求的Ap,所以这里会做过滤。


Share的文档可能很大、可能网络传输的速度不快,这时候你可以回到Ap页面,Share服务仍然在后台执行。当再一次点开Share,可以看到下面标识有Share进程正在运行。再点击可以看到进行中的Share进程。

Windows8:Share Contract — 分享你AP的功能 - 乂乂 - 一个人,一支烟  ·~~
 
Windows8:Share Contract — 分享你AP的功能 - 乂乂 - 一个人,一支烟  ·~~Windows8:Share Contract — 分享你AP的功能 - 乂乂 - 一个人,一支烟  ·~~ 
Share不想让Share本身的运行影响到User的其它操作,而如果User想知道Share的进度,微软提供了这样的入口可以让User去获取、控制Share。

Windows已经做了大量的工作,Ap开发者们不需要去了解相互之间的构造或者协议才能去实现这么棒的操作体验(指Share)。开发者不需要想其它Ap会如果掉调用自己的Ap内容,你只要申明:“嘿,我这里有东西可以分享,谁要?”就这么简单。每当一个新的Ap加入到Share中,都扩展了所有Ap的分享能力。

Windows为Share构建的结构,“源程序”(Source App)和“目标程序”(Target App)之间的纽带是“数据包”(DataPackage),DataPackage存在于SourceApp中。

Windows8:Share Contract — 分享你AP的功能 - 乂乂 - 一个人,一支烟  ·~~ 
1. 在“数据传输管理器”(DataTransfer Manager)注册,声明需要传输DataPackage;
2. “分享经纪”(Share Broker)做得更多,ShareBroker监视Ap,发起activate,处理请求;
3. SourceApp接收到事件并填充DataPackage;
4. SourceApp完成异步调用并返回;
5. ShareBroker筛选TargetApp列表和快速链接(Quicklink),决定应该显示那些Ap;
6. User在列表中选择TargetApp或者Quicklink;
7. ShareBroker呼叫并激活TargetApp;
8,TargetApp被激活,做Sharing。TargetApp不需要全荧幕显示,只需要合适的大小显示被Share的内容就可以;
9. TargetApp处理获取到的DataPackage内容;
10. 当TargetApp完成处理,通知ShareBroker已完成,可以移走TargetApp的页面。

 

The Data Package
什么是DataPackage,DataPackage是分享的数据流通标准。
分享数据的格式;
标准格式:“文字”(text)、“地址”(URI)、“网页”(HTML)、“图片”(images)......
更多可扩展的格式。

SourceApp应该提供尽可能多的数据样式,使得User对TargetApp的选择范围最大化。多考虑你的Ap提供的信息可能有哪些用途。

Code Demo:

dataTransferManager.addEventListener("datarequested", function (e) {
    …
    // Common properties

    var request = e.request;
    request.data.properties.title = "Title for data";
    request.data.properties.description = "Description of the data";
    request.data.properties.thumbnail = thumbnail; // of type StreamReference

    // Common methods
    request.data.setText("Text to share");
    request.data.setHtml("<HTML …>");
    request.data.setUri(uri /* of type Uri */);
    request.data.setBitmap(stream /* RandomAccessStream */);

    // Custom data
    request.data.setText("FormatID", "Text to share");
    request.data.setData("FormatID", datastream /* RandomAccessStream */);

 

The Source app
预期会被作为SourceApp的几类程序:
新闻(News);
杂志(Magazine);
多媒体(Media):有趣的图片、音乐、视频;
游戏(Games);
社交网络(Social networking):
笔记记录(Note taking);
云端存储(Cloud storage);
等等。

将Ap做成“分享源”(Share Source),你只需要做到:
    1. Ap监听、处理“分享事件”(Share event);
    2. 内容可以通过两种方式分享:
        1) 隐式的:User直接划出Share做分享,Ap需要判断User可能需要分享的东西并提供相应的内容;
        2) 显式的:User选择了需要分享的内容并Share;
    3. 构建你的DataPackage,提供最恰当的搜索结果。

Code Demo:

// set up data transfer manager
var dataTransferManager =
    Windows.ApplicationModel.DataTransfer.DataTransferManager.getForCurrentView();

// create event listener to be called on to fill out data package
dataTransferManager.addEventListener("datarequested", function (e) {
    // fill in data package with what to share
    var request = e.request;
    request.data.properties.title = "Title for data";
    request.data.properties.description = "Description of the data";
    request.data.setText("Text to share");
    ...
    });

 

The Target app
预期会被作为TargetApp的几类程序:
社交网络(Social networking);
通讯工具(Communication);
娱乐(Entertainment);
打印机(Print service);
互联的设备(Device connected);
笔记记录(Note taking);
云端存储(Cloud storage);
等等。

将Ap做成“分享目标”(Share target),你需要实现:
    1. Ap注册为Share target,并明确指定接收的格式;
    2. 用心设计Ap界面,以提供User优秀的分享体验:
        1) 不必要是Ap的完整功能,选择Ap中User会用到的最常见的功能,显示在唤起的TargetApp界面上;(比如说是Email,User通常期望简洁地显示可以输入的内容框和接收人选择栏位。)
        2) 快速、轻量级的操作体验;
    3. 使用DataPackage包装最适合分享的数据;
    4. 当Share结束(例如大文件的分享会需要比较长的时间),提醒完成;而User也可以在Share过程中看到进度、选择取消;
    5. 返回“快速链接”(Quicklink),例如分享到的地方。

实现ShareTarget可以增加User使用你的Ap或者service的机会,并以此及时更新service端User相关的信息。

Code Demo:

<!– extension needs to be added to package.appxmanifest -->
<Extensions>
    <Extension Category="windows.shareTarget" StartPage="shareTarget.html">
        <ShareTarget>
            <SupportedFileTypes>
                <FileType>.jpg</FileType>
            </SupportedFileTypes>
            <DataFormat>text</DataFormat>
        </ShareTarget>
    </Extension>
</Extensions>

...

// activation function in shareTarget.js
function activated(e) {
    if (e.kind === Windows.ApplicationModel.Activation.ActivationKind.shareTarget) {
        share = e.shareOperation;
        document.querySelector('.metadata h1').textContent = share.data.properties.title;
        document.querySelector('.metadata p').textContent = share.data.properties.description;


可以使用Css文件或者HTML5文件定义界面,上面显示的是manifest的配置。

Visual Studio中增加Share Contract:

Windows8:Share Contract — 分享你AP的功能 - 乂乂 - 一个人,一支烟  ·~~ 
 

Source Code Demo(开发者视频中的43:09,本文后面有链接)

Windows8:Share Contract — 分享你AP的功能 - 乂乂 - 一个人,一支烟  ·~~

 

所以,让你的Ap实现ShareContract:
    1. 你的Ap可以建立起User和他们关心的人、关心的Ap之间的联系;
    2. User可以通过PC装的其它软件分享到你Ap中的内容;
    3. Share是在进化的:越多的Ap,越多的分享机会。

以上大部分内容总结自微软开发者大会上Billie Sue ChafinsSteve Seixeiro的主题演讲:
Share: Your app powers the Windows 8 share experience
可以在下面链接里找到相关视频:http://channel9.msdn.com/Events/BUILD/BUILD2011/APP-405T

最后,有两个相关的讲座也可以在Channel9上找到:
[APP-395T] Designing Metro style: principles and personality
[APP-398T] How to declare your app’s capabilities

  评论这张
 
阅读(108)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017