windows phoneアプリとネットサービスとの連携

65
Windows Phone アプ リとネットサービ スとの連携 Windows Phone勉強会@四日市 第12011/12/10 青木宣明 @kumar0001

Upload: nobuaki-aoki

Post on 05-Jul-2015

1.084 views

Category:

Documents


4 download

DESCRIPTION

第1回まどべんよっかいち(2011/12/10)での発表スライドです。

TRANSCRIPT

Page 1: Windows phoneアプリとネットサービスとの連携

Windows Phoneアプリとネットサービスとの連携

Windows Phone勉強会@四日市第1回

2011/12/10

青木宣明 @kumar0001

Page 2: Windows phoneアプリとネットサービスとの連携

Agenda

Windows Phoneはネットワークとの連携に主

眼が置かれています。電話機単体でできることもありますが、ネットワークサービスと連携することでできることが広がります

今回は、Windows Phoneアプリの外部連携の例として、Windows Liveにアクセスするライブラリである”Live Connect”を紹介します

Page 3: Windows phoneアプリとネットサービスとの連携

目次

1. Windows Phoneと外部との連携

2. WPアプリと外部との連携

3. Live ConnectによるWindows Liveとの連携

1. Live IDによる認証・認可

2. Hotmail(カレンダー・アドレス帳)へのアクセス

3. SkyDriveへのアクセス

Page 4: Windows phoneアプリとネットサービスとの連携

WINDOWS PHONEと外部との連携

Page 5: Windows phoneアプリとネットサービスとの連携

Windows Phoneの外部連携

広い意味での連携=Windows Phoneが外部とやりとりするためのインターフェース

・GPS

・カメラ

通信(3G/Wi-fi)

センサー・加速度・近接・照度・地磁気・ジャイロスコープ・モーション

Page 6: Windows phoneアプリとネットサービスとの連携

ハブ=クラウドとの連携

Windows Phoneは標準機能としてクラウドと連携する”ハブ”を提供している。

ハブ 機能

Music + Video 電話機の音楽・ビデオの再生。PCとの同期も。本来はコンテンツの購入もできる

People オンラインのアドレス帳、SNSのアカウント情報を一元的に管理。SNSの更新情報の表示、および投稿

Marketplace アプリケーションの入手

Games XBox Liveと連携

Pictures 写真を一元管理。電話機だけなく、PCとの同期、SNS・SkyDriveにある写真も表示

Office SharePoint、SkyDriveにあるOfficeファイルの表示・編集

Page 7: Windows phoneアプリとネットサービスとの連携
Page 8: Windows phoneアプリとネットサービスとの連携

クラウドと同期される情報(1)

アドレス帳の情報、カレンダーのイベント情報も同期される

Page 9: Windows phoneアプリとネットサービスとの連携

クラウドと同期される情報(2)

OfficeハブはSkyDriveに保存されたファイルと同期する

Page 10: Windows phoneアプリとネットサービスとの連携

WP7アプリと外部との連携

Page 11: Windows phoneアプリとネットサービスとの連携

WPアプリの外部連携

Windows Phoneアプリから、これらの外部インターフェースを利用できる• カメラによる撮影、バーコード読み取り

• GPSによる位置検出 (A-GPS)

• Wi-Fi/携帯電話による位置検出(Default)

• GPS衛星による位置検出(High)

• センサーへのアクセス

• ハブのデータ利用

• 通信によるクラウドとの連携• HTTP通信などでWindows Live, Facebookなどのサービスにアクセス

Page 12: Windows phoneアプリとネットサービスとの連携

Pictureハブの“共有…”

Pictureハブにある画像ファイルを、アプリから利用できる機能

Page 13: Windows phoneアプリとネットサービスとの連携

Pictureハブの“共有…”

ただし電話機ローカルの画像だけ

ネットワーク上の画像ファイルは扱えない

オンラインの画像ファイルを扱うためには、アプリが頑張るしかない

Page 14: Windows phoneアプリとネットサービスとの連携

Peopleハブのアドレス帳

アプリからアドレス帳の情報を取得できる

ContactsクラスのSearchAsyncメソッドで検索する

検索結果をLINQでソート&リスト要素作成

Page 15: Windows phoneアプリとネットサービスとの連携

Peopleハブのアドレス帳

SearchAsyncの検索結果• Microsoft.Phone.UserData.Contactクラス

Name Description

Accounts データ元

Addresses 住所

Birthdays 誕生日

Children 子供

Companies 会社

CompleteName フルネーム

DisplayName 表示名

Name Description

EmailAddresses 電子メールアドレス

IsPinnedToStart スタート画面にピン留めされているか

Notes メモ

PhoneNumbers 電話番号

SignificantOthers ?

Websites Webサイト

Page 16: Windows phoneアプリとネットサービスとの連携

カレンダーのイベント情報

カレンダーのイベント情報も取得可能

AppointmentsクラスのSearchAsyncメソッドで検索する

検索結果をLINQでソート&リスト要素作成

Page 17: Windows phoneアプリとネットサービスとの連携

カレンダーのイベント情報

SearchAsyncの検索結果• Microsoft.Phone.UserData.Appointmentクラス

Name Description

Account データ元

Attendees 参加者

Details 詳細

EndTime 終了日時

IsAllDayEvent 終日のイベントかを示すフラグ

IsPrivate プライベートなイベントかを示すフラグ

Location 場所

Organizer 主催者

StartTime 開始日時

Status 予定の公開方法(予定あり,外出中とか)

Subject 件名

Page 18: Windows phoneアプリとネットサービスとの連携

アドレス帳・カレンダーの利用の問題点アドレス帳のコンタクト情報、カレンダーのイベント情報はどちらも読み取り専用

アプリからデータを登録・更新・削除することができない

データの登録・更新・削除をするためには、アプリが別の方法で頑張るしかない

Page 19: Windows phoneアプリとネットサービスとの連携

SkyDriveへのアクセス

Windows Phoneの機能として、SkyDrive上のファイルにアクセスできる

アプリからSkyDriveにアクセスするAPIは、公式には提供されてこなかった

Page 20: Windows phoneアプリとネットサービスとの連携

Live Connect によるWindows Liveとの連携

Page 21: Windows phoneアプリとネットサービスとの連携

Windows Live

Microsoftによる各種クラウドサービスのブランド

• Live ID: シングルサインオン(認証)

• Profile: ユーザ情報

• Hotmail: カレンダー、アドレス帳

• SkyDrive: 写真、ドキュメントなどのオンラインストレージ

• Live Mesh: PC間の同期サービス

Page 22: Windows phoneアプリとネットサービスとの連携

Live Connectとは

Windows LiveのAPI

• 以前は”Windows Live Messenger Connect”と呼ばれていた

• http://msdn.microsoft.com/en-us/library/ff749458.aspx

• (参考) http://gihyo.jp/dev/serial/01/wl-sdk/0042

• 2011年9月13日に//build/において”Live

Connect”と名称変更• (参考) http://gihyo.jp/dev/serial/01/wl-sdk/0044

Live SDK Developer Previewが提供されている• https://connect.microsoft.com/site1226

• (参考) 同梱のHelp(CHM)ファイル。APIの詳細な説明がある

• 公開アプリでも利用可能(⇒同梱のライセンス文書)

Page 23: Windows phoneアプリとネットサービスとの連携

Live ConnectのAPIの種類

APIは以下の3種類が提供されている1. JavaScript API

• Webアプリ, Metro style apps(Win8)

2. Managed API

• .NETアプリ(WP7, Metro style apps)

3. REST API

• 上記以外の環境

Desktopアプリ(WPFなど)とモバイルアプリ(非WP7)は正式にはサポートしていないが、RESTAPIによるアクセスが可能• 同梱のヘルプファイルにサンプル有り

Page 24: Windows phoneアプリとネットサービスとの連携

Live Connectの提供機能サービス 機能

ID /

Profiles

認証、ユーザ情報のアクセス

Hotmail カレンダー情報の作成、読み取り、更新、削除イベントの作成、読み取り、更新、削除アドレス帳情報の取得、作成

SkyDrive ファイル(写真、ドキュメント)のアップロード、取得、更新、削除ファイルのコピー、移動フォルダの作成、削除、更新公開URLの取得(読み取りのみ、読み書き両方)

Messenge

r

XMPPによるメッセンジャーの利用ステータス(在席、ビジーなど)の設定

Page 25: Windows phoneアプリとネットサービスとの連携

利用の流れ

事前準備1. アプリケーションをWindows Liveに登録してClient

IDを取得する

アプリでのLive Connectの利用1. 認可

• OAuth 2.0を用いてユーザからデータアクセスの認可を得る

• 認可の結果としてアクセストークンを入手する

2. データアクセス• REST APIによりデータにアクセスする

• 必要に応じて、戻り値のJSONを解析して、データを利用する

Page 26: Windows phoneアプリとネットサービスとの連携

アプリの登録(1/4)

Step1) https://manage.dev.live.com/にアクセスして、”Create Application”をクリック

Page 27: Windows phoneアプリとネットサービスとの連携

アプリの登録(2/4)

Step2) アプリ名と言語を設定して”I accept”をクリック

Page 28: Windows phoneアプリとネットサービスとの連携

アプリの登録(3/4)

Step3) 表示されたClient IDを記録しておく

Page 29: Windows phoneアプリとネットサービスとの連携

アプリの登録(4/4)

Step4) “Application Settings Page”→”API

Settings”とクリック。” Mobile client app”をYesにしてSave

Page 30: Windows phoneアプリとネットサービスとの連携

LIVE IDによる認証・認可

Page 31: Windows phoneアプリとネットサービスとの連携

Live IDによる認証・認可

認可の流れ

• 認可(auhorize)のURLを呼び出す

Client ID

許可してほしい機能(Scope)

• Live Connectのサインインページを経て、ユーザに権限の許可を求める画面が表示される

• ユーザが許可するとアクセストークンが発行される

それ以降のAPI利用時にアクセストークンを指定する

Page 32: Windows phoneアプリとネットサービスとの連携
Page 33: Windows phoneアプリとネットサービスとの連携

Scope (1/2)

アプリがLive Connectの機能を使う前にユーザから得る許可のこと

• 参照) SDK同梱のヘルプファイルの”Live Connect Reference”→”Scopes and permissions”

Scope 許可される操作

wl.basic 基本プロファイル、アドレス帳のユーザリストの取得

wl.birthday 誕生日情報の取得

wl.calendars カレンダーとイベント情報の取得

wl.calendars_update カレンダー/イベントの取得と更新

wl.emails 個人・preferred・ビジネスのメールアドレスの取得

wl.photos 写真・動画・アルバムの取得

Scopeの代表例

Page 34: Windows phoneアプリとネットサービスとの連携

Scope (2/2)Scope 許可される操作

wl.phone_numbers 個人・仕事・モバイルの電話番号の取得

wl.postal_addresse

s

郵便番号の取得

wl.share ユーザの状態のメッセージ(オンライン・退席中など)の更新

wl.skydrive SkyDriveのドキュメント・写真の取得

wl.skydrive_update SkyDriveのドキュメント・写真の取得と更新

これらの他にもアクセスする情報に応じて細かく分かれた権限が定義されている。

Page 35: Windows phoneアプリとネットサービスとの連携

Sign-inボタン

Live Connectが提供するコントロールで、RESTでのアクセスなしで簡単にLive Connectへのサインインができる

※アクセス先に応じたロゴに変更可能※SignInの文字も変更可能

Page 36: Windows phoneアプリとネットサービスとの連携

Sign-Inボタンの使い方(1/5)

プロジェクト

A) アセンブリの参照を追加

• Microsoft.Live

• Microsoft.Live.Controls

Page 37: Windows phoneアプリとネットサービスとの連携

Sign-Inボタンの使い方(2/5)

XAML

A) 名前空間の宣言を追加

xmlns:live="clr-

namespace:Microsoft.Live.Controls;assembly=Microsoft.Live.Controls"

Page 38: Windows phoneアプリとネットサービスとの連携

Sign-Inボタンの使い方(3/5)

XAMLA) SignInButtonを追加する

• ClientIdに取得したクライアントIDを記述• Scopes属性に必要なScopeをカンマ区切りで記述• RedirectUriは”https://oauth.live.com/desktop”と記述• SessionChangedイベントハンドラを定義

ここでは、ViewModelのコマンド

で受け取るためEventToCommandを使っている

Page 39: Windows phoneアプリとネットサービスとの連携

Sign-Inボタンの使い方(4/5)

ViewModel

A) SessionChangedイベントを受けるハンドラを定義

ここでは、ViewModelのコマンドとして定義

保存したLiveConnectClientオブジェクトを使ってアクセスする

Page 40: Windows phoneアプリとネットサービスとの連携

Sign-Inボタンの使い方(5/5)

ViewModel

A) LiveConnectClientを使ってアクセスする

Rxを使ってGetCompletedイベントを処理する

RESTのURI /meで自分のコンタクト情報を取得

Page 41: Windows phoneアプリとネットサービスとの連携
Page 42: Windows phoneアプリとネットサービスとの連携

Sign-Inボタンの問題

簡単に使えるSign-Inボタンですが…

Sign-Inボタンを使ったWP7アプリが審査落ち

• ロゴを隠すことで審査に通過したとのこと

Page 43: Windows phoneアプリとネットサービスとの連携

SDKリファレンスには…

SDKのリファレンスによると”none”を指定できるとあるが、実際には利用不可

Page 44: Windows phoneアプリとネットサービスとの連携

対策

Sign-Inボタンの問題への対策案

A) Sign-ボタンのロゴを隠すように細工する

B) REST APIでの認可を行う

C) ボタンのロゴについて、ユーザ向け(アプリのAbout

画面など) 、テスター向け(申請時の指示欄)に説明を記述する

• この方法で審査に通るかは未検証。落ちるかも…

Page 45: Windows phoneアプリとネットサービスとの連携

Sign-Inボタンを使わない方法

REST APIによる認可

• REST APIを使って自前で認可を処理する

• ボタン以外のUIからの認可の実行もできる

• 参考)

【WP for ITPro】Windows Phone アプリからWindows

Live で認証するサンプルhttp://blogs.technet.com/b/junichia/archive/2011/11/08/3463795.aspx

Page 46: Windows phoneアプリとネットサービスとの連携

REST APIでの認可(1/4)

XAML

• WebBrowserコントロールを配置

• Navigatedイベントをハンドルする

Page 47: Windows phoneアプリとネットサービスとの連携

REST APIでの認可(2/4)

ViewModel

• Authボタンのコマンドで認可用URLに遷移

Page 48: Windows phoneアプリとネットサービスとの連携

REST APIでの認可(3/4)

View (コードビハインド)

• ViewModelメッセージハンドラを登録しておく• ViewModelからViewへの操作用

• WebBrowserコントロールへのNavigateの指示を行う

Page 49: Windows phoneアプリとネットサービスとの連携

REST APIでの認可(4/4)

ViewModel

• WebBrowserコントロールのNavigatedイベントをハンドルする

遷移先URLを利用して、認可完了を判定

URLのパラメータからアクセストークンを取得する※以降のアクセスで利用

Page 50: Windows phoneアプリとネットサービスとの連携

HOTMAIL(カレンダー)へのアクセス

Page 51: Windows phoneアプリとネットサービスとの連携

カレンダーイベントへのアクセス

Scope

Scope 選択基準

wl.calendars カレンダーとイベントの読み込みだけの場合

wl.calendars_update カレンダーとイベントの読み込み、および追加・更新・削除の場合

wl.contacts_calendars カレンダーとイベントの読み込みだけの場合他のユーザから共有されているものも対象となる

wl.events_create カレンダーを作成する場合

Page 52: Windows phoneアプリとネットサービスとの連携

カレンダーイベントへのアクセス

URL

GET

• /CALENDAR_ID/events ⇒ カレンダーのイベント情報

• /me/events ⇒ユーザのイベント情報

• /USER_ID/events ⇒指定したユーザのイベント情報

• /EVENT_ID ⇒ イベントそのものの情報

• POST

• /me/events ⇒ イベントの作成

• DELETE

• /EVENT_ID ⇒ イベントの削除

Page 53: Windows phoneアプリとネットサービスとの連携

Eventオブジェクト

Live Connect

Preliminary Document

より抜粋Live Connect reference

の”REST API”章

Page 54: Windows phoneアプリとネットサービスとの連携

Eventオブジェクト

(参考) Live Connect referenceの”REST API”章

{

"data": [

{

"id": "event.234a66f5917828a7.00e3268d4510499d8194f948a28d84ec.a120b08283eb4572bf09210989f81c59",

"name": "Christmas Eve",

"description": "",

"calendar_id": "calendar.234a66f5917828a7.00e3268d4510499d8194f948a28d84ec",

"from": {

"name": null,

"id": null

},

"start_time": "2011-12-24T00:00:00-0800",

"end_time": "2011-12-25T00:00:00-0800",

"location": null,

"is_all_day_event": true,

"is_recurrent": true,

"recurrence": "Occurs every year on day 24 of December.",

"reminder_time": null,

"availability": "free",

"visibility": "public",

"created_time": "2010-04-23T18:45:03+0000",

"updated_time": "2010-04-23T18:45:03+0000"

}, {

"id": "event.234a66f5917828a7.00e3268d4510499d8194f948a28d84ec.b4ac08dcb61b46a987120f883e247c84",

"name": "Christmas Day",

Page 55: Windows phoneアプリとネットサービスとの連携

サンプル

ユーザのイベント一覧の取得

結果がDictionary<string,object>のため扱いにくい

JSONの生の結果データをRawResult

で取得できるので、方法があれば自前でパースも?

Page 56: Windows phoneアプリとネットサービスとの連携

サンプル

イベントの作成Dictionary<string,object>

にデータを設定する

PostAsyncでデータをPOST

Page 57: Windows phoneアプリとネットサービスとの連携

SKYDRIVEへのアクセス

Page 58: Windows phoneアプリとネットサービスとの連携

SkyDriveへのアクセス

Scope

Scope 選択基準

wl.skydrive SkyDriveのドキュメント・写真の読み込みだけの場合

wl.skydrive_update SkyDriveのドキュメント・写真の読み込み、および追加・更新・削除の場合

wl.contacts_skydrive SkyDriveのドキュメント・写真の読み込み他のユーザから共有されているものも対象となる

Page 59: Windows phoneアプリとネットサービスとの連携

Fileオブジェクト

Live Connect

Preliminary Document

より抜粋Live Connect reference

の”REST API”章

Page 60: Windows phoneアプリとネットサービスとの連携

Folderオブジェクト

Live Connect

Preliminary Document

より抜粋Live Connect reference

の”REST API”章

Page 61: Windows phoneアプリとネットサービスとの連携

Folderオブジェクト

(参考) Live Connect referenceの”REST API”章

{

"data": [

{

"id": "folder.56a63380c6d55c7e.56A63380C6D55C7E!213",

"from": {

"name": "Nobuaki Aoki",

"id": "56a63380c6d55c7e"

},

"name": "backup",

"description": null,

"parent_id": "folder.56a63380c6d55c7e",

"upload_location": "https://beta.apis.live.net/v5.0/folder.56a63380c6d55c7e.56A63380C6D55C7E!213/files/",

"count": 1,

"link": "https://skydrive-

df.live.com/redir.aspx?cid\u003d56a63380c6d55c7e\u0026page\u003dview\u0026resid\u003d56A63380C6D55C7E!2

13\u0026parid\u003d56A63380C6D55C7E!112",

"type": "folder",

"shared_with": {

"access": "Just me"

},

"created_time": "2010-09-25T14:14:13+0000",

"updated_time": "2010-09-25T14:15:39+0000"

}, {

"id": "folder.56a63380c6d55c7e.56A63380C6D55C7E!113",

"from": {

Page 62: Windows phoneアプリとネットサービスとの連携

サンプル

フォルダ一覧の取得

Page 63: Windows phoneアプリとネットサービスとの連携

サンプル

ファイルのアップロード

時間の都合でサンプルの実装が間に合いませんでした…。ブログで紹介できればと思います。

Page 64: Windows phoneアプリとネットサービスとの連携

まとめ

クラウドとの連携に主眼を置いたWindows Phone

ですが、そのWPアプリがクラウドと連携する上で十分な機能が提供されていません。

Windows Liveとの連携については、2011年9月に”Live Connect”がリリースされて容易に連携できるようになりました。

その他のクラウドとの連携については、改めて紹介できればと思います。

Page 65: Windows phoneアプリとネットサービスとの連携

ご静聴ありがとうございました