SlideShare una empresa de Scribd logo
1 de 65
Windows Phoneアプ
リとネットサービ
スとの連携
Windows Phone勉強会@四日市 第1回
2011/12/10
青木宣明 @kumar0001
Agenda
Windows Phoneはネットワークとの連携に主
眼が置かれています。電話機単体でできること
もありますが、ネットワークサービスと連携する
ことでできることが広がります
今回は、Windows Phoneアプリの外部連携の
例として、Windows Liveにアクセスするライブラ
リである”Live Connect”を紹介します
目次
1. Windows Phoneと外部との連携
2. WPアプリと外部との連携
3. Live ConnectによるWindows Liveとの連携
1. Live IDによる認証・認可
2. Hotmail(カレンダー・アドレス帳)へのアクセス
3. SkyDriveへのアクセス
WINDOWS PHONEと外部との連携
Windows Phoneの外部連携
広い意味での連携=Windows Phoneが外部
とやりとりするためのインターフェース
・GPS
・カメラ
通信
(3G/Wi-fi)
センサー
・加速度
・近接
・照度
・地磁気
・ジャイロスコープ
・モーション
ハブ=クラウドとの連携
Windows Phoneは標準機能としてクラウドと連
携する”ハブ”を提供している。
ハブ 機能
Music + Video 電話機の音楽・ビデオの再生。PCとの同期も。本来
はコンテンツの購入もできる
People オンラインのアドレス帳、SNSのアカウント情報を一元
的に管理。SNSの更新情報の表示、および投稿
Marketplace アプリケーションの入手
Games XBox Liveと連携
Pictures 写真を一元管理。電話機だけなく、PCとの同期、SN
S・SkyDriveにある写真も表示
Office SharePoint、SkyDriveにあるOfficeファイルの表示・
編集
クラウドと同期される情報(1)
アドレス帳の情報、カレンダーのイベント情報も
同期される
クラウドと同期される情報(2)
OfficeハブはSkyDriveに保存されたファイルと
同期する
WP7アプリと外部との連携
WPアプリの外部連携
Windows Phoneアプリから、これらの外部イン
ターフェースを利用できる
• カメラによる撮影、バーコード読み取り
• GPSによる位置検出 (A-GPS)
• Wi-Fi/携帯電話による位置検出(Default)
• GPS衛星による位置検出(High)
• センサーへのアクセス
• ハブのデータ利用
• 通信によるクラウドとの連携
• HTTP通信などでWindows Live, Facebookなど
のサービスにアクセス
Pictureハブの“共有…”
Pictureハブにある画像ファイルを、アプリから
利用できる機能
Pictureハブの“共有…”
ただし電話機ローカルの画像だけ
ネットワーク上の画像ファイルは扱えない
オンラインの画像
ファイルを扱うた
めには、アプリが
頑張るしかない
Peopleハブのアドレス帳
アプリからアドレス帳の情報を取得できる
Contactsクラスの
SearchAsyncメソッドで検索す
る
検索結果をLINQでソート
&リスト要素作成
Peopleハブのアドレス帳
SearchAsyncの検索結果
• Microsoft.Phone.UserData.Contactクラス
Name Description
Accounts データ元
Addresses 住所
Birthdays 誕生日
Children 子供
Companies 会社
CompleteName フルネーム
DisplayName 表示名
Name Description
EmailAddresses 電子メールアドレス
IsPinnedToStart スタート画面にピン留めされているか
Notes メモ
PhoneNumbers 電話番号
SignificantOthers ?
Websites Webサイト
カレンダーのイベント情報
カレンダーのイベント情報も取得可能
Appointmentsクラスの
SearchAsyncメソッドで検索す
る
検索結果をLINQでソート
&リスト要素作成
カレンダーのイベント情報
SearchAsyncの検索結果
• Microsoft.Phone.UserData.Appointmentクラス
Name Description
Account データ元
Attendees 参加者
Details 詳細
EndTime 終了日時
IsAllDayEvent 終日のイベントかを示すフラグ
IsPrivate プライベートなイベントかを示すフラグ
Location 場所
Organizer 主催者
StartTime 開始日時
Status 予定の公開方法(予定あり, 外出中とか)
Subject 件名
アドレス帳・カレンダーの利
用の問題点
アドレス帳のコンタクト情報、カレンダーのイベ
ント情報はどちらも読み取り専用
アプリからデータを登録・更新・削除することができ
ない
データの登録・更新・削除をするためには、
アプリが別の方法で頑張るしかない
SkyDriveへのアクセス
Windows Phoneの機能として、SkyDrive上の
ファイルにアクセスできる
アプリからSkyDriveにアクセスするAPIは、公
式には提供されてこなかった
Live Connect によるWindows Liveとの
連携
Windows Live
Microsoftによる各種クラウドサービスのブラン
ド
• Live ID: シングルサインオン(認証)
• Profile: ユーザ情報
• Hotmail: カレンダー、アドレス帳
• SkyDrive: 写真、ドキュメントなどのオンラインスト
レージ
• Live Mesh: PC間の同期サービス
…
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の詳細な説明がある
• 公開アプリでも利用可能(⇒同梱のライセンス文書)
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)は正式にはサポートしていないが、REST
APIによるアクセスが可能
• 同梱のヘルプファイルにサンプル有り
Live Connectの提供機能
サービス 機能
ID /
Profiles
認証、ユーザ情報のアクセス
Hotmail カレンダー情報の作成、読み取り、更新、削除
イベントの作成、読み取り、更新、削除
アドレス帳情報の取得、作成
SkyDrive ファイル(写真、ドキュメント)のアップロード、取得、
更新、削除
ファイルのコピー、移動
フォルダの作成、削除、更新
公開URLの取得(読み取りのみ、読み書き両方)
Messenge
r
XMPPによるメッセンジャーの利用
ステータス(在席、ビジーなど)の設定
利用の流れ
事前準備
1. アプリケーションをWindows Liveに登録してClient
IDを取得する
アプリでのLive Connectの利用
1. 認可
• OAuth 2.0を用いてユーザからデータアクセスの認可を
得る
• 認可の結果としてアクセストークンを入手する
2. データアクセス
• REST APIによりデータにアクセスする
• 必要に応じて、戻り値のJSONを解析して、データを利
用する
アプリの登録(1/4)
Step1) https://manage.dev.live.com/ にアクセスし
て、”Create Application”をクリック
アプリの登録(2/4)
Step2) アプリ名と言語を設定して”I accept”をクリッ
ク
アプリの登録(3/4)
Step3) 表示されたClient IDを記録しておく
アプリの登録(4/4)
Step4) “Application Settings Page”→”API
Settings”とクリック。” Mobile client app”をYesにし
てSave
LIVE IDによる認証・認可
Live IDによる認証・認可
認可の流れ
• 認可(auhorize)のURLを呼び出す
Client ID
許可してほしい機能(Scope)
• Live Connectのサインインページを経て、ユー
ザに権限の許可を求める画面が表示される
• ユーザが許可するとアクセストークンが発行される
それ以降のAPI利用時にアクセストークンを指定する
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の代表
例
Scope (2/2)
Scope 許可される操作
wl.phone_numbers 個人・仕事・モバイルの電話番号の取得
wl.postal_addresse
s
郵便番号の取得
wl.share ユーザの状態のメッセージ(オンライン・退席中など)の更新
wl.skydrive SkyDriveのドキュメント・写真の取得
wl.skydrive_update SkyDriveのドキュメント・写真の取得と更新
これらの他にもアクセスする情報に応じて細かく分かれた
権限が定義されている。
Sign-inボタン
Live Connectが提供するコントロールで、RESTでのア
クセスなしで簡単にLive Connectへのサインインができ
る
※アクセス先に応じたロゴに変更可能
※SignInの文字も変更可能
Sign-Inボタンの使い方(1/5)
プロジェクト
A) アセンブリの参照を追加
• Microsoft.Live
• Microsoft.Live.Controls
Sign-Inボタンの使い方(2/5)
XAML
A) 名前空間の宣言を追加
xmlns:live="clr-
namespace:Microsoft.Live.Controls;assembly=Microsoft.Live.Controls"
Sign-Inボタンの使い方(3/5)
XAML
A) SignInButtonを追加する
• ClientIdに取得したクライアントIDを記述
• Scopes属性に必要なScopeをカンマ区切りで記述
• RedirectUriは”https://oauth.live.com/desktop”と記述
• SessionChangedイベントハンドラを定義
ここでは、ViewModelのコマンド
で受け取るため
EventToCommandを使ってい
る
Sign-Inボタンの使い方(4/5)
ViewModel
A) SessionChangedイベントを受けるハンドラを定義
ここでは、ViewModelのコマンドとして定義
保存したLiveConnectClientオブジェクトを
使ってアクセスする
Sign-Inボタンの使い方(5/5)
ViewModel
A) LiveConnectClientを使ってアクセスする
Rxを使って
GetCompletedイベント
を処理する
RESTのURI /meで自分のコンタクト情報を取得
Sign-Inボタンの問題
簡単に使えるSign-Inボタンですが…
Sign-Inボタンを使ったWP7アプリが審査落ち
• ロゴを隠すことで審査に通過したとのこと
SDKリファレンスには…
SDKのリファレンスによると”none”を指定できると
あるが、実際には利用不可
対策
Sign-Inボタンの問題への対策案
A) Sign-ボタンのロゴを隠すように細工する
B) REST APIでの認可を行う
C) ボタンのロゴについて、ユーザ向け(アプリのAbout
画面など) 、テスター向け(申請時の指示欄)に説明
を記述する
• この方法で審査に通るかは未検証。落ちるかも…
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
REST APIでの認可(1/4)
XAML
• WebBrowserコントロールを配置
• Navigatedイベントをハンドルする
REST APIでの認可(2/4)
ViewModel
• Authボタンのコマンドで認可用URLに遷移
REST APIでの認可(3/4)
View (コードビハインド)
• ViewModelメッセージハンドラを登録しておく
• ViewModelからViewへの操作用
• WebBrowserコントロールへのNavigateの指示を行う
REST APIでの認可(4/4)
ViewModel
• WebBrowserコントロールのNavigatedイベントをハ
ンドルする 遷移先URLを利用して、
認可完了を判定
URLのパラメータから
アクセストークンを取得する
※以降のアクセスで利用
HOTMAIL(カレンダー)へのアクセス
カレンダーイベントへのアクセス
Scope
Scope 選択基準
wl.calendars カレンダーとイベントの読み込みだけの場合
wl.calendars_update カレンダーとイベントの読み込み、および追加・更
新・削除の場合
wl.contacts_calendars カレンダーとイベントの読み込みだけの場合
他のユーザから共有されているものも対象となる
wl.events_create カレンダーを作成する場合
カレンダーイベントへのアクセス
URL
GET
• /CALENDAR_ID/events ⇒ カレンダーのイベント情報
• /me/events ⇒ ユーザのイベント情報
• /USER_ID/events ⇒ 指定したユーザのイベント情報
• /EVENT_ID ⇒ イベントそのものの情報
• POST
• /me/events ⇒ イベントの作成
• DELETE
• /EVENT_ID ⇒ イベントの削除
Eventオブジェクト
Live Connect
Preliminary Document
より抜粋
Live Connect reference
の”REST API”章
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",
サンプル
ユーザのイベント一覧の取得
結果がDictionary<string,object>のた
め扱いにくい
JSONの生の結果データをRawResult
で取得できるので、方法があれば自前
でパースも?
サンプル
イベントの作成 Dictionary<string,object>
にデータを設定する
PostAsyncでデータを
POST
SKYDRIVEへのアクセス
SkyDriveへのアクセス
Scope
Scope 選択基準
wl.skydrive SkyDriveのドキュメント・写真の読み込みだけの場
合
wl.skydrive_update SkyDriveのドキュメント・写真の読み込み、および追
加・更新・削除の場合
wl.contacts_skydrive SkyDriveのドキュメント・写真の読み込み
他のユーザから共有されているものも対象となる
Fileオブジェクト
Live Connect
Preliminary Document
より抜粋
Live Connect reference
の”REST API”章
Folderオブジェクト
Live Connect
Preliminary Document
より抜粋
Live Connect reference
の”REST API”章
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?cidu003d56a63380c6d55c7eu0026pageu003dviewu0026residu003d56A63380C6D55C7E!2
13u0026paridu003d56A63380C6D55C7E!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": {
サンプル
フォルダ一覧の取得
サンプル
ファイルのアップロード
時間の都合でサンプルの実装が間に合いません
でした…。ブログで紹介できればと思います。
まとめ
クラウドとの連携に主眼を置いたWindows Phone
ですが、そのWPアプリがクラウドと連携する上で十
分な機能が提供されていません。
Windows Liveとの連携については、2011年9月
に”Live Connect”がリリースされて容易に連携でき
るようになりました。
その他のクラウドとの連携については、改めて紹介
できればと思います。
ご静聴ありがとうございました

Más contenido relacionado

Más de Nobuaki Aoki

Blog=pelican+bit bucket+docker
Blog=pelican+bit bucket+dockerBlog=pelican+bit bucket+docker
Blog=pelican+bit bucket+dockerNobuaki Aoki
 
第1回三重合同懇親会
第1回三重合同懇親会第1回三重合同懇親会
第1回三重合同懇親会Nobuaki Aoki
 
IoTの始め方~.NET Micro Framework編
IoTの始め方~.NET Micro Framework編IoTの始め方~.NET Micro Framework編
IoTの始め方~.NET Micro Framework編Nobuaki Aoki
 
Getting started with edison
Getting started with edisonGetting started with edison
Getting started with edisonNobuaki Aoki
 
第11回まどべんよっかいちの告知
第11回まどべんよっかいちの告知第11回まどべんよっかいちの告知
第11回まどべんよっかいちの告知Nobuaki Aoki
 
第1回三重合同懇親会の告知
第1回三重合同懇親会の告知第1回三重合同懇親会の告知
第1回三重合同懇親会の告知Nobuaki Aoki
 
(仮)登別クマ牧場のテツロウについて
(仮)登別クマ牧場のテツロウについて(仮)登別クマ牧場のテツロウについて
(仮)登別クマ牧場のテツロウについてNobuaki Aoki
 
まどべんよっかいちのご紹介
まどべんよっかいちのご紹介まどべんよっかいちのご紹介
まどべんよっかいちのご紹介Nobuaki Aoki
 
Microsoft Azure Mobile Serviceによるアプリ構築
Microsoft Azure Mobile Serviceによるアプリ構築Microsoft Azure Mobile Serviceによるアプリ構築
Microsoft Azure Mobile Serviceによるアプリ構築Nobuaki Aoki
 
mbedとwindows 8.1
mbedとwindows 8.1mbedとwindows 8.1
mbedとwindows 8.1Nobuaki Aoki
 
Windows.Web.Http.HttpClientとWebAuthenticationBroker
Windows.Web.Http.HttpClientとWebAuthenticationBrokerWindows.Web.Http.HttpClientとWebAuthenticationBroker
Windows.Web.Http.HttpClientとWebAuthenticationBrokerNobuaki Aoki
 
Windows phone 8プログラミング~gps&地図編~
Windows phone 8プログラミング~gps&地図編~Windows phone 8プログラミング~gps&地図編~
Windows phone 8プログラミング~gps&地図編~Nobuaki Aoki
 
Windows Azure Mobile Servicesによるアプリ構築
Windows Azure Mobile Servicesによるアプリ構築Windows Azure Mobile Servicesによるアプリ構築
Windows Azure Mobile Servicesによるアプリ構築Nobuaki Aoki
 
Windows phone 8のデバイスを使おう~カメラ&フォト編~(公開用)
Windows phone 8のデバイスを使おう~カメラ&フォト編~(公開用)Windows phone 8のデバイスを使おう~カメラ&フォト編~(公開用)
Windows phone 8のデバイスを使おう~カメラ&フォト編~(公開用)Nobuaki Aoki
 
Windows phone 8のデバイスを使おう~近接通信編~(公開用)
Windows phone 8のデバイスを使おう~近接通信編~(公開用)Windows phone 8のデバイスを使おう~近接通信編~(公開用)
Windows phone 8のデバイスを使おう~近接通信編~(公開用)Nobuaki Aoki
 
Wp8 longlistselectorでのページング処理
Wp8 longlistselectorでのページング処理Wp8 longlistselectorでのページング処理
Wp8 longlistselectorでのページング処理Nobuaki Aoki
 
Metrostyleappに挑戦してみた
Metrostyleappに挑戦してみたMetrostyleappに挑戦してみた
Metrostyleappに挑戦してみたNobuaki Aoki
 
Windows phoneの開発ツール
Windows phoneの開発ツールWindows phoneの開発ツール
Windows phoneの開発ツールNobuaki Aoki
 
Windows phone SDK 8.0でのアプリ開発
Windows phone SDK 8.0でのアプリ開発Windows phone SDK 8.0でのアプリ開発
Windows phone SDK 8.0でのアプリ開発Nobuaki Aoki
 
Windows Phone勉強会@四日市へのお誘い
Windows Phone勉強会@四日市へのお誘いWindows Phone勉強会@四日市へのお誘い
Windows Phone勉強会@四日市へのお誘いNobuaki Aoki
 

Más de Nobuaki Aoki (20)

Blog=pelican+bit bucket+docker
Blog=pelican+bit bucket+dockerBlog=pelican+bit bucket+docker
Blog=pelican+bit bucket+docker
 
第1回三重合同懇親会
第1回三重合同懇親会第1回三重合同懇親会
第1回三重合同懇親会
 
IoTの始め方~.NET Micro Framework編
IoTの始め方~.NET Micro Framework編IoTの始め方~.NET Micro Framework編
IoTの始め方~.NET Micro Framework編
 
Getting started with edison
Getting started with edisonGetting started with edison
Getting started with edison
 
第11回まどべんよっかいちの告知
第11回まどべんよっかいちの告知第11回まどべんよっかいちの告知
第11回まどべんよっかいちの告知
 
第1回三重合同懇親会の告知
第1回三重合同懇親会の告知第1回三重合同懇親会の告知
第1回三重合同懇親会の告知
 
(仮)登別クマ牧場のテツロウについて
(仮)登別クマ牧場のテツロウについて(仮)登別クマ牧場のテツロウについて
(仮)登別クマ牧場のテツロウについて
 
まどべんよっかいちのご紹介
まどべんよっかいちのご紹介まどべんよっかいちのご紹介
まどべんよっかいちのご紹介
 
Microsoft Azure Mobile Serviceによるアプリ構築
Microsoft Azure Mobile Serviceによるアプリ構築Microsoft Azure Mobile Serviceによるアプリ構築
Microsoft Azure Mobile Serviceによるアプリ構築
 
mbedとwindows 8.1
mbedとwindows 8.1mbedとwindows 8.1
mbedとwindows 8.1
 
Windows.Web.Http.HttpClientとWebAuthenticationBroker
Windows.Web.Http.HttpClientとWebAuthenticationBrokerWindows.Web.Http.HttpClientとWebAuthenticationBroker
Windows.Web.Http.HttpClientとWebAuthenticationBroker
 
Windows phone 8プログラミング~gps&地図編~
Windows phone 8プログラミング~gps&地図編~Windows phone 8プログラミング~gps&地図編~
Windows phone 8プログラミング~gps&地図編~
 
Windows Azure Mobile Servicesによるアプリ構築
Windows Azure Mobile Servicesによるアプリ構築Windows Azure Mobile Servicesによるアプリ構築
Windows Azure Mobile Servicesによるアプリ構築
 
Windows phone 8のデバイスを使おう~カメラ&フォト編~(公開用)
Windows phone 8のデバイスを使おう~カメラ&フォト編~(公開用)Windows phone 8のデバイスを使おう~カメラ&フォト編~(公開用)
Windows phone 8のデバイスを使おう~カメラ&フォト編~(公開用)
 
Windows phone 8のデバイスを使おう~近接通信編~(公開用)
Windows phone 8のデバイスを使おう~近接通信編~(公開用)Windows phone 8のデバイスを使おう~近接通信編~(公開用)
Windows phone 8のデバイスを使おう~近接通信編~(公開用)
 
Wp8 longlistselectorでのページング処理
Wp8 longlistselectorでのページング処理Wp8 longlistselectorでのページング処理
Wp8 longlistselectorでのページング処理
 
Metrostyleappに挑戦してみた
Metrostyleappに挑戦してみたMetrostyleappに挑戦してみた
Metrostyleappに挑戦してみた
 
Windows phoneの開発ツール
Windows phoneの開発ツールWindows phoneの開発ツール
Windows phoneの開発ツール
 
Windows phone SDK 8.0でのアプリ開発
Windows phone SDK 8.0でのアプリ開発Windows phone SDK 8.0でのアプリ開発
Windows phone SDK 8.0でのアプリ開発
 
Windows Phone勉強会@四日市へのお誘い
Windows Phone勉強会@四日市へのお誘いWindows Phone勉強会@四日市へのお誘い
Windows Phone勉強会@四日市へのお誘い
 

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