27
Windows Phone 8 デバイスを使おう ~近接通信編~ 第5回まどべんよっかいち 2013/4/6 青木宣明 @kumar0001

Windows phone 8のデバイスを使おう~近接通信編~(公開用)

Embed Size (px)

Citation preview

Page 1: Windows phone 8のデバイスを使おう~近接通信編~(公開用)

Windows Phone 8のデバイスを使おう~近接通信編~

第5回まどべんよっかいち 2013/4/6

青木宣明 @kumar0001

Page 2: Windows phone 8のデバイスを使おう~近接通信編~(公開用)

Agenda

1. Windows Phoneのデバイス

1. Windows Phone 7.8

2. Windows Phone 8

2. 近接通信プログラミング~端末間通信編~

3. まとめ

Page 3: Windows phone 8のデバイスを使おう~近接通信編~(公開用)

Windows Phoneのデバイス

• Windows Phone 7.8のデバイス

• Windows Phone 8のデバイス

Page 4: Windows phone 8のデバイスを使おう~近接通信編~(公開用)

Windows Phoneのデバイス

Windows Phoneではシャシー規格によって、ハードウェア仕様が決められている

•規格をそろえることで、端末が異なってもユーザが同等のエクスペリエンスを体験できる

OS側のサポートコスト低減

アプリケーション開発のコスト低減

•ただし、端末間の差異が少なく、メーカー側は差別化しにくい問題も

Page 5: Windows phone 8のデバイスを使おう~近接通信編~(公開用)

Windows Phone 7.8のデバイス

・GPS・カメラ・FMラジオ

通信(3G/Wi-fi)

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

APから制御不可

搭載は任意

Bluetooth・A2DP・AVRCP・HFP・HSP・PBAP

Page 6: Windows phone 8のデバイスを使おう~近接通信編~(公開用)

WP7.8端末の連携

①APのデータを

クラウド上のストレージ経由で受け渡しする

②Webサービスを経由する

WP7.8まではクラウド・Webサービスを経由して連携するしかなかった

Bluetooth

Page 7: Windows phone 8のデバイスを使おう~近接通信編~(公開用)

Windows Phone 8のデバイス(1)

WP7.8から以下の機能が追加• GPS

バックグラウンドでの位置検出が可能に

• MicroSDカードOSから保存: 写真、動画OSから読み込み: 写真、動画、音楽署名済みアプリのインストール

• 音声音声認識音声合成

• BluetoothプロファイルOPP(Object Push Profile)の追加

• NFC/Bluetooth/WiFi-Directによる近接通信

Page 8: Windows phone 8のデバイスを使おう~近接通信編~(公開用)

(参考)WP8のBTプロファイル

Advanced Audio Distribution Profile (A2DP 1.2)

Audio/Video Remote Control Profile (AVRCP 1.4)

Hands Free Profile (HFP 1.5)

Phone Book Access Profile (PBAP 1.1)

Object Push Profile (OPP 1.1)

Page 9: Windows phone 8のデバイスを使おう~近接通信編~(公開用)

Windows Phone 8のデバイス(2)

特に注目を引くのがBluetooth OPPと近接通信の追加• WinRTのProximity APIで利用する

通信方法は3通り• NFC近距離(~数cm)での通信ICタグや端末同士での通信

• Bluetooth数m~10mでの通信デバイスや端末同士での通信

• WiFi-Direct、TCP/IP端末同士での通信

Page 10: Windows phone 8のデバイスを使おう~近接通信編~(公開用)

WP8端末の連携

①APのデータを

クラウド上のストレージ経由で受け渡しする

②Webサービスを経由する

WP8では端末間の直接通信、NFCによるICタグの読み書き、SPPデバイスとの連携が可能に

③端末間で直接通信する

近接通信Bluetooth(OPP)

NFCタグ

SPPデバイス

Page 11: Windows phone 8のデバイスを使おう~近接通信編~(公開用)

近接通信を活用したアプリ開発

近接通信対応のアプリはまだこれから

サーバを経由せずに端末間で直接連携できるメリットがあるが、検証環境の準備が必要など取り組みにくい面も

近接通信対応のアプリ開発のきっかけになるよう、近接通信について見ていきます

Page 12: Windows phone 8のデバイスを使おう~近接通信編~(公開用)

デバイスプログラミング~近接通信編~

• OS標準機能の近接通信

• ShareMediaTask

• Proximity API

• 端末間通信

• TappingによるAP起動

• Bluetoothデバイスとの通信

Page 13: Windows phone 8のデバイスを使おう~近接通信編~(公開用)

WP8での近接通信

標準アプリでもサポートされている

•例)Pictureハブの共有

送信側

受信側

自分のアプリではどうやって実現できるのか?

Page 14: Windows phone 8のデバイスを使おう~近接通信編~(公開用)

自作アプリでの近接通信

方法1• ShareMediaTaskを使うメリット: 簡単。ファイルパスを与えるだけ

デメリット: タップによるファイル転送しかできない

方法2• Proximity APIを使ってPeerの探索~接続~通信を自前で行うメリット: 詳細に制御できる

デメリット: 手順を踏まえて使う必要がある。やや複雑

Page 15: Windows phone 8のデバイスを使おう~近接通信編~(公開用)

ShareMediaTaskでの近接通信

使い方は簡単

• FilePathプロパティに共有するファイルのパスを設定してShow()する

var photoChooserTask = new PhotoChooserTask { ShowCamera = true };

photoChooserTask.Completed += (s, e2) =>

{

var shareMediaTask

= new ShareMediaTask { FilePath = e2.OriginalFileName };

shareMediaTask.Show();

};

photoChooserTask.Show();

PhotoChooserTaskとの組み合わせ例

デモ

Page 16: Windows phone 8のデバイスを使おう~近接通信編~(公開用)

Proximity APIプログラミング

Proximity API• Windows Runtimeに含まれるWindows.Networking.Proximity名前空間

Peer(端末・デバイス)との通信をサポートする• TapによるPeerの検出

• PeerのブラウジングBluetooth, WiFi-Direct, TCP/IP

• Peerとの接続、ソケットの取得

• NFCでのICタグへのアクセス

Page 17: Windows phone 8のデバイスを使おう~近接通信編~(公開用)

近接通信のシナリオ

Peer間の近接通信のパターン

1. Bluetoothペアリング済みデバイスを列挙→接続してソケット取得

2. ICタグにメッセージをP&S

Page 18: Windows phone 8のデバイスを使おう~近接通信編~(公開用)

近接通信のシナリオ(1/3)

A. Tappingしてメッセージを送受信する

近接させる

Publish/Subscribeでメッセージを送受信

B. Tappingして接続した後ソケット通信を行う

近接させて接続を確立

Socketによるストリーム通信

・Bluetooth・WiFi-Direct・TCP/IP

NFCが使える場合NFCが使える場合

Page 19: Windows phone 8のデバイスを使おう~近接通信編~(公開用)

近接通信のシナリオ(2/3)

C. Browsingで見つけたPeerと接続した後ソケット通信を行う

Socketによるストリーム通信

・Bluetooth・WiFi-Direct・TCP/IP

Peerを探索 Advertising

接続を確立

Page 20: Windows phone 8のデバイスを使おう~近接通信編~(公開用)

近接通信のシナリオ(3/3)

D. ペアリング済みのBluetoothデバイスと接続してソケット通信を行う

Socketによるストリーム通信

Peerを探索

E. ICタグとメッセージをPublish/Subscribeする

接続を確立

Page 21: Windows phone 8のデバイスを使おう~近接通信編~(公開用)

近接通信の基本的な手順

•Windows.Networking.Proximity.ProximityDevice.GetDefault() != null

① Tappingサポートの確認

•ProximityDevice.PublishMesage

•ProximityDevice.PublishUriMessage

•ProximityDevice.PublishBinaryMessage

②-1送信側: メッセージのPublish

•ProximityDevice.SubscribeForMessage

②-2 受信側: メッセージのSubscribe

•StopPublishingMessage

•StopSubscribingForMessage

③終了時

A. TappingでのPublish/Subscribe

デモ

Page 22: Windows phone 8のデバイスを使おう~近接通信編~(公開用)

近接通信の基本的な手順

•PeerFinder.SupportedDiscoveryTypes & PeerDiscoveryTypes.Triggeredを確認

•PeerFinder.TriggeredConnectionStateChangedを設定

① Tappingによる接続のサポート有無の確認

•PeerFinder.Start()を実行すると、自端末がリモート端末で検出可能になる

② Advertisingの開始

•TriggeredConnectionStateChangedイベントで状態がTriggeredConnectState.Completedになったら通信を行う

•このとき接続が完了していてStreamSocketが渡される

③接続の完了待ち

• InputStream, OutputStreamを利用して通信を行う

④ Socketの利用

B. Tapping Triggerでの接続

デモ

Page 23: Windows phone 8のデバイスを使おう~近接通信編~(公開用)

近接通信の基本的な手順

• PeerFinder.SupportedDiscoveryTypes & PeerDiscoveryTypes.Browseを確認

• PeerFinder.ConnectionRequestedを設定

① Tappingによる接続可否の確認

• PeerFinder.Start()を実行すると、自端末がリモート端末で検出可能になる

② Advertisingの開始

• PeerFinder.FindAllPeersAsync()で検出したPeer情報を取得

•その中のPeerに対してPeerFinder.ConnectAsync()で接続する

③-1 Peerの探索

•ConnectionRequestedイベントに対してPeerFinder.ConnectAsync()で接続する

③-2 接続要求の受け入れ

• StreamSocket.InputStream, StreamSocket.OutputStreamを利用して通信を行う

④ Socketの利用

C. Peer Browsingでの接続

デモ

Page 24: Windows phone 8のデバイスを使おう~近接通信編~(公開用)

Peerの接近・離脱の検出

DeviceArrived, DeviceDepartredイベントでPeerの接近、離脱を検知できる• 例)接近したらAdvertising→接続→通信

デモ

proximityDevice = ProximityDevice.GetDefault();

proximityDevice.DeviceArrived += proximityDevice_DeviceArrived;

proximityDevice.DeviceDeparted += proximityDevice_DeviceDeparted;

private void proximityDevice_DeviceArrived(ProximityDevice sender)

{

PeerFinder.Start();

}

private void proximityDevice_DeviceDeparted(ProximityDevice sender)

{

PeerFinder.Stop();

}

Page 25: Windows phone 8のデバイスを使おう~近接通信編~(公開用)

Tappingによるアプリの起動

Tappingにより、他端末のAPを起動できる• APがインストールされていない場合、ストアからダウンロードさせる

Advertisingを実行中のAP

OSがAPを起動するか確認する

APを起動していない端末

近接させる

Page 26: Windows phone 8のデバイスを使おう~近接通信編~(公開用)

Tappingによるアプリの起動

デモ

protected override void OnNavigatedTo(NavigationEventArgs e)

{

if (e.Uri.ToString().Contains(

"ms_nfp_launchargs=Windows.Networking.Proximity.PeerFinder:

StreamSocket"))

{

PeerFinder.Start();

}

}

起動されたページのURIに以下のパラメータが含まれる• ms_nfp_launchargs=Windows.Networking.Proximity.PeerFinder:

StreamSocket

Advertisingを実行すると、APを起動したリモート端末のPeer探索に反応できる• 後は通常通りに接続→ソケット通信

Page 27: Windows phone 8のデバイスを使おう~近接通信編~(公開用)

まとめ

WP8から近接通信がサポートされて、端末間の直接通信が可能になった。

近接通信を利用するシナリオは複数あるが、どれも利用方法は簡易である。

近接通信を活用して、アプリの提供機能に+αを実現したい