分享

Windows Phone 7 – 学习使用Live SDK

 旭龙 2012-08-12
随着Windows Live不断地改版为SkyDrive 增加了很多新的功能,再加上WP7本身也提供很多地方与SkyDrive 的连结,例如: Office或如同 这篇的介绍, 让SkyDrive成为与WP7手机一个储存与互动的重要媒介。因此,在撰写App时如果需要提供用户备份使用设定的功能,过去可以透过DropBox,那我就想说即然是WP7为何不直接使用SkyDriv
  

  随着Windows Live不断地改版为SkyDrive 增加了很多新的功能,再加上WP7本身也提供很多地方与SkyDrive 的连结,例如:

  Office或如同这篇的介绍,

  让SkyDrive成为与WP7手机一个储存与互动的重要媒介。因此,在撰写App时如果需要提供用户备份使用设定的功能,过去可以透过DropBox,那我就想说即然是WP7为何不直接使用SkyDrive就好了呢?因此,往下介绍怎么在WP7中存取SkyDrive。

  〉Live SDK (Live Connect):

  在2011年底MS释出了Live SDK,该SDK帮助开发人员解决了需实作OAuth交易的复杂工作,并且採用标準的OAuth 2.0、JSON与Extensible Messaging and Presence Protocol (XMPP)为支援协定。透过REST的方式来唿叫API,而回传的结果採用JSON的方式进

  行沟通。因此,该API支援各种平台:Web、Desktop、Mobile app。那么Live Connect提供了那些Services呢?

  Skydrive:

  支援开发的应用程式指定Windows Live ID藉由Live Connect API存取Skydrvice中的文件与多媒体,包括:新/修/删/查档案与资料夹。

  Hotmail:

  支援存取Windows Live ID上的连络人与行事历,让开发的应用程式可建立/编写联络人、建立事件与提醒等。

  Messenger:

  支援与Messenger上的联络人进行聊天、取得联络人状态等。

  Windows Live ID:

  用于验证用户与连结他们的个人资讯。

  以上这些服务与API,让开发人员可透过网站或App的方式让用户随时与他们的Live功能进行连接。往下介绍相关Live SDK前,使用SDK与撰写应用时,要记得注意 ,不然送审的过程会被煺件的,要特别小心。

  〉WP7上使用Live Connect操作API (以Managed API为例):

  在操作Live Connect之前最重要的一件事情即是让程式能够与Windows Live连接。此时,Live SDK已经帮我们準备好了,在过去使用Facebook API、Plurk API裡有一个重要的就是OAuth,它的机制需先至要操作的服务提供者端申请一组Key与权限,接着在App裡建立让用户可以登入该服务网站,并且有介面允许授权存取能力给该App,这些动作虽然说没有很难做,但对于第一次使用的人难免有些混乱的概念,但Live SDK已经包装好了,让我们很简单的能力操作它。

  以C#为例,操作Live SDK有叁个重要的元素:

  (1). Microsoft.Live:

  集合包含了让开发者简易地连接Live Connect OAuth进行验证,以及取得User Session Data与Live Connect REST APIs。

  以下就撷录针对Microsoft.Live命名空间重要的类别做一些说明:

Class Description
LiveAuthClient 用于撷取Live Connect连线过程的Session Data。
二个重要的参数:client ID and redirect Uniform Resource Identifier (URI)。
LiveAuthException 用于识别当Auth Process过程发生Exception时的处理常式。
LiveConnectClient Live Connect的重要功能,用与Live Connect web service endpoints连接,并且管理Token保持连线的验证与交易凭证。
另外,它更包括重要操作Windows Live上必要的方法:
CopyAsync, DeleteAsync, DownloadAsync, UploadAsync, PostAsync,用于操作WP7的资源发佈或下载至二端之间。
LiveConnectException 用于识别当Connect Process过程发生Excpetion时的处理常式。
LiveConnectSession 用于取得目前Connect的Session。其内容包括:目前与Live Connect使用的Token有效期限、Token属性等。
LiveDownloadProgressChangeEventArgs 在Download Operation过程中每一时间点下载数据量的改变参数。
LiveOperationCompletedEventArgs 当Operation完成时所触发的事件处理参数。
LiveUploadProgressChangedEventArgs 在Upload Operaion过程中每一时间点下载数据量的改变参数。
LoginCompletedEventArgs 当登入完成时所触发的事件并且回传需要的事件参数。

  上表中提到数个重要类别,以LiveConnectClient最为重要,因此,以下範例将使用该类别实作相关Windows Live上的功能。

  (2). Microsoft.Live.Controls:

  该Controls提供用于操作Live Connect的特性,最常见的即是:「SignInButton class」。在WP7使用Live SDK第一步即是需要将它加入至应用程式,并指定ClientID与Scope属性告知它该使用怎样的OAuth验证来连上Windows Live,这样才能透过OAuth标準让用户授权应用程式可以存取他的Live ID资讯与相关功能。

  在使用SignInButton时,有一些参数可搭配使用:

  (2-1). BrandingType enumeration:该列举设定后,Button可呈现对应API的图标,例如:Hotmail、SkyDrive、Messenger、Windows。

  (2-2). ButtonTextType enumeration:该列举设定后,Button可呈现相关的文字说明,例如:Connect、Custom、Login、Sigin。

  (2-3). LiveConnectSessionChangedEventArgs class:

  使用SingInButton时搭配「SessionChanged」处理常式所代入的事件参数,用于监控Live Connect连线时Session的改变。

  (3) Socpes and Permissions (学习Live SDK该部分的观念一定要先建立):

  Microsoft.Live与Microsoft.Live.Controls提供App方便使用OAuth协定登入Live Connect,但在让开发的App可以连接Live Connect前,在Live Connect API有定义App存取权限观念,在Live Connect API称为Scopes,每一个Scopes代表不同的Permission Level与对应的参数。

  然而,针对Scopes Types主要分成叁种类型,这叁种类型有对应的参数是撰写App时可以用来取得实际资料的部分,往下将加以说明:

--------------------------------------------------------------------------------------------------------------------------------------

(3-1). Core scopes: 为重要连接Live Connect APIs与涉及使用者的核心资料与联络人资讯。主要範围主要有叁类: Scope Enables wl.basic 讀取已連結的用戶基本資訊,與聯絡人清單。存取REST中的User與Contact二大物
  

  (3-1). Core scopes:

  为重要连接Live Connect APIs与涉及使用者的核心资料与联络人资讯。主要範围主要有叁类:

ScopeEnables
wl.basic讀取已連結的用戶基本資訊,與聯絡人清單。存取REST中的User與Contact二大物件。
wl.offline_access允許App有能力在任何時間讀取與更新用戶的資料。如果沒有設定該值,App只能在每一次進行登入連接Live Connect才能操作
wl.signin單一登入行為(Single sign-in behavior)。設定該值,用戶透過App登入Live Connect也一併登入WebSite。更詳細的說明可參考<Signing users in>。

  从上述即可得知这叁个Scopes是让App可以存取/控制资料的基本设定值,在wl.basic的物件结构要特别注意,如下:

REST ObjectStructure (取值的,key)
Userlink
Userupdate_time
Contactid
Contactfirst_name
Contactlast_name
Contactname
Contactgender
Contactis_friend
Contactis_favorite
Contactuser_id
Contactemail_hashes
Contactbirth_day (存取該結構值,需要scope多增加:wl.contacts_birthday)。
Contactbirth_moth (存取該結構值,需要scope多增加:wl.contacts_birthday)。
Contactupdated_time

  更详细的存取物件结构,可以参考<REST API>

  (3-2). Extends:

  该scopes允许App操作使用者的延伸性个人资料与联络人资讯。其主要範围相当多:

ScopeEnables
wl.birthday讀取用戶的生日資訊,包括:年(birth_year)/月(birth_month)/日(birth_day)。
wl.calendars讀取用戶的行事曆與事件資訊。
wl.calendars_update存取(r/w)用戶的行事曆與事件。
wl.contacts_birthday讀取用戶所有聯絡人生日(年/月/日)。配合wl.basic中birth_day, birth_moth使用。
wl.contacts_calendars讀取用戶所屬與其他人分享給該用戶的行事曆與事件資訊。
wl.contacts_create建立新的聯絡人至用戶的通訊錄。
wl.contacts_photos讀取用戶的albums、photos、videos與audios,以及這些資源的相關comments與tags;也支援讀取其他用戶分享給該用戶的資源。 
操作元件:Album, Audio, Photo, and Video objects。
wl.contacts_skydrive讀取其他用戶分享給該用戶的skydrive資源,也能存取用戶所屬的skydrive資源。
wl.emails讀取用戶的personal、preferred與business email。 
可用結構:emails / preferred / account / personal / business。
wl.events_create建立事件在該用戶default的行事曆。操作元件:Event object。
wl.messenger允許登入Windows Live Messenger與Presence Protocol (XMPP) service。 
詳細內容可以參考<Getting started using Messenger with XMPP>的介紹。
wl.phone_numbers讀取用戶的personal、preferred與business phone number。 
可用結構:phones / personal / business / mobile。
wl.photos讀取用戶的albums、photos、videos與audios。
wl.postal_addresses讀取用戶的postal address。可用結構相當多,可以點擊連結。
wl.share允許更新用戶的狀態訊息。存取的物件:Activity Object
wl.skydrive讀取用戶所屬Skydrive中的檔案。
wl.skydrive_update存取(r/w)用戶所屬Skydrive中的檔案。
wl.work_profile讀取用戶的員工與工作地址資訊。 
可用結構:work / employee (work array) / name (employee object) / position (work array) / name (position object)

  更詳細的存取物件結構,可以參考<REST API>

  (3-3). Developers:該scopes允許App使用開發者的Client IDs進行操作。

ScopeEnables
wl.applications讀取開發者的Client ID,該Client ID驗證後,可配合Live Connect APIs產生功用。 
操作元件:Application object's structures,用於取得該Client ID在Live Connect上註冊的相關資訊。
wl.applications_create代表開發者建立了一個新的Client ID。操作元件:Applicationobject's structures。

  更详细的存取物件结构,可以参考<REST API>

  以上介绍了Live SDK重要的观念与使用的元件/参数之后,还有蛮多的Structure需要参考额外的资料进行说明,但往下先接着透过几个简单的範例介绍如何操作Live SDK。

  [事前工作]

  在体验使用Live SDK时,首先第一个任务需要至「https://manage.dev./Applications/Index」申请您实作App使用的Client ID,该Client ID用于识别App在Live Connect定义为何种应用程式,由于它需要绑定一组Windows Live ID,因此需要透过一个可接收核可性的ID来当作申请。申请方式非常容易,在这篇就不多加以说明。产生Client ID的结果如下:

  

image

 

  记得来 安装Live SDK。

  A. 登入Windws Live:

  撷录<>中的内容,参考Core Scope设定让App提供用户可以登入Windows Live,并且取得用户的资讯。其设定步骤如下:

  (a-1). 拉SigninButton至画面中,设定Scopes与Client ID;(至于怎么在Tools加上SigninButton,请参考<Referencing the APIs with C#>)

   1: <!--TitlePanel contains the name of the application and page title-->
   2: <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
   3:    <TextBlock x:Name="ApplicationTitle" Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}"/>
   4:    <my:SignInButton Name="btnLogin" 
   5:                     Scopes=
"wl.signin wl.basic wl.offline_access" 
   6:                     SessionChanged=
"btnLogin_SessionChanged" 
   7:                     HorizontalAlignment=
"Left"
   8:                     ClientId=
"00000000480715FF"                     
   9:                     /
>
  10: </StackPanel>

  设定Scopes包括叁个Core scopes:wl.signin wl.basic wl.offline_access叁个用「空白」隔开。并且註册SessionChanged事件,用于监控Live Controls登入后触发的状态改变事件。

  (a-2) 建立一个LiveConnectClient变数,并且随着SigninButton触发SessionChanged事件来启动该变数连接Live Connect;

   1: private LiveConnectClient gLiveClient;
   2:  
   3: private void btnLogin_SessionChanged(object sender, LiveConnectSessionChangedEventArgs e)
   4: {
   5:     //LiveConnectSessionStatus.Connected代表SigninButton已完成OAuth認證
   6:     if (e != null && e.Session != null && e.Status == LiveConnectSessionStatus.Connected)
   7:     {
   8:                    //初始化LiveConnectClient進行存取資料的任務
   9:         this.gLiveClient = new LiveConnectClient(e.Session);
  10:         //註冊GetCompleted事件
  11:         this.gLiveClient.GetCompleted += OnGetMe;
  12:         //要求取得個人(me)層級的資訊
  13:         this.gLiveClient.GetAsync("me"null);
  14:     }
  15:     else
  16:     {
  17:         this.gLiveClient = null
  18:         this.tbError.Text = e.Error != null  e.Error.ToString() : string.Empty;
  19:     }
  20: }
  21:  
  22: private void OnGetMe(object sender, LiveOperationCompletedEventArgs e)
  23: {
  24:     this.gLiveClient.GetCompleted -= OnGetMe; 
  25:     if (e.Error == null)
  26:     {
  27:         //使用wl.basic中的contact物件結構:first_name取得值
  28:         string firstName = e.Result.ContainsKey("first_name") ? 
  29:                             e.Result["first_name"as string : string.Empty;
  30:  
  31:         //使用wl.basic中的contact物件結構:last_name取得值
  32:         string lastName = e.Result.ContainsKey("last_name") ? 
  33:                             e.Result["last_name"as string : string.Empty;
  34:         this.tbGreeting.Text = "Welcome " + firstName + " " + lastName;
  35:     }
  36:     else
  37:     {
  38:         this.tbError.Text = e.Error.ToString();
  39:     }
  40: }

  在上述的程式範例中,有一个重要的关键字:「me」。此时,也许您会觉得奇怪,这个是什么呢?其me代表的是一个Path的观念,它定义了目前要存取的範围是在何某Path下,例如:存取个人的联络人:/me/contacts;某一个用户的联络人:/USER_ID/contacts。



--------------------------------------------------------------------------------------------------------------------------------------


然而,Path的关键值,往下将加以说明: (a-3) Understanding the objects: 对于Live Connect REST API而言,每一个资讯的分类都算是一个Object。该Object包括:子物件集合、阵列、Values。 要怎么使用这些物件,则
  

  然而,Path的关键值,往下将加以说明:

  (a-3) Understanding the objects:

  对于Live Connect REST API而言,每一个资讯的分类都算是一个Object。该Object包括:子物件集合、阵列、Values。

  要怎么使用这些物件,则需要先了解unique path,它类似ID一样代表每一个物件存取的识别与範围。

ObjectDescriptionValue object paths
Activity储存用户的活动feed与状态讯息。/me/share 
/USER_ID/share
Album用户在Skydrive裡Album的资讯内容。 
包括:photos、videos、audios、files与folders的组合。
/me/albums 
/USER_ID/albums 
/ALBUM_ID 

一个Album物件可回传以下的Path内容: 
/ALBUM_ID/files 
/me/skydrive/files 
/me/skydrive/shared/files 
/me/skydrive/shared/albums 
/USER_ID/skydrive/files
Application储存与Live Connect互动的Client ID资讯。/me/applications 
/USER_ID/applications 
/APPLICATION_ID
Audio用户储存于Skydrive的Audio资讯。/AUDIO_ID 

一个Audio物件可回传以下的Path内容: 
/ALBUM_ID/files 
/FOLDER_ID/files 
/me/skydrive/files 
/USER_ID/skydrive/files
Calendar储存用户的Calendar资讯。/me/calendars 
/USER_ID/calendars 
/CALENDAR_ID
Comment储存在用户Skydrive裡photos或videos的Comment资讯。/PHOTO_ID/comments 
/VIDEO_ID/comments 
/COMMENT_ID
Contact用户在Hotmail上的联络人。如果联络人资讯中的is_friend值为true,取出的联络人也是friend.。/me/contacts 
/USER_ID/contacts 
/CONTACT_ID
Error由Live Connect API回传的错误资讯。None
Event储存在用户Calendar上的事件。/me/events 
/USER_ID/events 
/CALENDAR_ID/events
File用户在Skydrive中的档案。/FILE_ID 

一个File物件可回传以下的Path内容: 

/FOLDER_ID/files 
/me/skydrive/files 
/me/skydrive/shared 
/me/skydrive/shared/files 
/USER_ID/skydrive/files
Folder用户在Skydrive中的资料夹。它能包括:photos、videos、audios、files与子资料夹的组合资讯。/FOLDER_ID 

一个Photo物件可回传以下的Path内容: 
/ALBUM_ID/files 
/FOLDER_ID/files 
/me/skydrive/files 
/me/skydrive/shared/files 
/USER_ID/skydrive/files
Friend用户朋友的资讯。朋友是联络人的子集合,并且搭配publicly visible relationship 定义可见度。因此,Contact物件的资料会比Friend完整。它能取到的内容,最简单ID与Name。/me/friends 
/USER_ID/friends
Permissions储存scopes清单。/me/permissions 
/USER_ID/permissions
Photo用户储存于Skydrive的Photo资讯。/PHOTO_ID 

一个Photo物件可回传以下的Path内容: 
/ALBUM_ID/files 
/ALBUM_ID/photos 
/FOLDER_ID/files 
/me/skydrive/files 
/me/skydrive/shared/photos 
/USER_ID/skydrive/files
Tag在Skydrvice中photo或video上标记的关联资讯。/PHOTO_ID/tags 
/VIDEO_ID/tags 
/TAG_ID
User代表一个用户。/me 
/USER_ID
Video用户储存于Skydrive的Video资讯。/VIDEO_ID 

一个Video物件可回传以下的Path内容: 
/ALBUM_ID/files 
/ALBUM_ID/videos 
/FOLDER_ID/files 
/me/skydrive/files 
/me/skydrive/shared/videos 
/USER_ID/skydrive/files

  了解上述Path与对应物件使用的方式,简单的举个例子:想要取出自己Skydrive中的所有Photo资讯:

   1: //"/me/skydrive/files?filter=photos":代表要從自己的Skydrive中找出PHOTOS的檔案
   2: this.gLiveClient.GetAsync("/me/skydrive/files?filter=photos"null);

  其中过滤的参数可使用:albums、audio、folders、photos、videos。

  [範例程式]

  由于内容太多了,範例部分移至加以说明。

  ======

  以上是分享怎么存取SkyDrvice的内容,因为我觉得透过SkyDrive可以配合很多的应用,因此我自己很希望去了解怎么存取它的内容,这样我就可以放置一些我需要内容在SkyDrive裡,透过自己开发的App去读取内容或做Shared的功能,至于Shared的功能也可以配合

  Socket的应用来进行。因此,WP7裡一个App可以纳入很多好用的开发API与概念,让自己App更加生活化。

  本文来自pou的博客,原文地址:http://www./pou/archive/2012/03/22/70936.aspx

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多