53
いろいろなWindowsRuntimeAPI @garicchi 2014/6/14 プログラミング生放送@松山 1

いろいろなWindows runtimeapi

Embed Size (px)

Citation preview

Page 1: いろいろなWindows runtimeapi

いろいろなWindowsRuntimeAPI@garicchi

2014/6/14 プログラミング生放送@松山 1

Page 2: いろいろなWindows runtimeapi

自己紹介

栂井良太(Ryota Togai @garicchi)

暖かい地域のとある大学に通っています(学生)

Windowsストアアプリとかクライアント開発とか全般的に好き

http://garicchi.com

http://garicchi.hatenablog.jp

2014/6/14 プログラミング生放送@松山 2

Page 3: いろいろなWindows runtimeapi

Microsoft Student Partners

Microsoftの学生組織

最近メンバーが増えまくってついに60人に

全国?で活動しているかも

2014/6/14 プログラミング生放送@松山 3

Microsoft Student Partners

Page 4: いろいろなWindows runtimeapi

わたしとプロ生ちゃん

2013年10月プログラミング生放送@大阪登壇

プロ生うどんパーティー etc..

2014/6/14 プログラミング生放送@松山 4

ぷろなまなうぷれ プロ生@サッカー

Page 5: いろいろなWindows runtimeapi

Agenda

LockScreen

SyndicationFeed

StreamSocket

PdfDocument

Notification

Protocol

BackgroundTask

2014/6/14 プログラミング生放送@松山 5

Page 6: いろいろなWindows runtimeapi

WindowsRuntimeって?

Windows8以降、新しいWindowsのAPIModernデザインのアプリをさまざまな言語で書くための共通プラットフォーム

最近WindowsPhoneにも統合http://www.infoq.com/jp/news/2011/09/Design-Details-Windows-Runtime

2014/6/14 プログラミング生放送@松山 6

Page 7: いろいろなWindows runtimeapi

セッション目標

WindowsRuntimeの使わなさそうなAPIを知ってもらう

使わなさそうで実は使ってほしいAPIを覚えて使ってもらいたい(願望

デモ中心でいきたい

2014/6/14 プログラミング生放送@松山 7

Page 8: いろいろなWindows runtimeapi

LockScreen

WindowsRuntimeはWindows8.1のロック画面の画像を操作できる

※ただしWindowsPhone8.1は未対応

2014/6/14 プログラミング生放送@松山 8

Page 9: いろいろなWindows runtimeapi

LockScreenAPI

LockScreenの画像変更は無許可で可能

2014/6/14 プログラミング生放送@松山 9

LockScreenクラス GetImageStream

LockScreenクラス SetImageStream

Page 10: いろいろなWindows runtimeapi

SyndicationFeed

AtomやRSSを簡単にパースしてくれる

わざわざxmlを解析しなくてもいい

2014/6/14 プログラミング生放送@松山 10

Page 11: いろいろなWindows runtimeapi

SyndicationFeed

HttpClientでダウンロード→SyndicationFeedで解析

2014/6/14 プログラミング生放送@松山 11

Page 12: いろいろなWindows runtimeapi

ソケット通信

ソケット通信とは?

2014/6/14 プログラミング生放送@松山 12

クライアント サーバー

Socket Socket

バーチャルサーキット

相互通信

IPアドレスとポート番号を指定して通信を行うクライアントとサーバー間のTCP/IP通信

Page 13: いろいろなWindows runtimeapi

ソケット通信の流れ

Listen→Connect→Acceptで接続完了

2014/6/14 プログラミング生放送@松山 13

クライアント

サーバー

Socket Socket

Listen

Connect

Accept

Page 14: いろいろなWindows runtimeapi

ソケット通信の流れ(一般)

一度接続を確立したらあとは相互通信

2014/6/14 プログラミング生放送@松山 14

クライアント

サーバー

Socket Socket

sendreceive

send receive

Page 15: いろいろなWindows runtimeapi

ソケット通信の流れ(WinRTの場合)

サーバーとクライアントで確立したStreamに向かってDataWriterで書き込みDataReaderで読み込み

2014/6/14 プログラミング生放送@松山 15

クライアント

サーバー

Socket Socket

DataReaderDataWriter

DataReaderStream

Stream

DataWriter

Page 16: いろいろなWindows runtimeapi

何に使えるの?

デバイス間のデータ通信

タブレットをPhoneから操作したり

2014/6/14 プログラミング生放送@松山 16

Page 17: いろいろなWindows runtimeapi

WindowsRuntimeのSocketAPI

クラス プロトコル クライアントorサーバー

StreamSocket TCP クライアント

StreamSocketListener TCP サーバー

StreamWebSocket WebSocket クライアント

MessageSocket WebSocket クライアント

DatagramSocket UDP ピア

2014/6/14 プログラミング生放送@松山 17

日経BP プログラミングWindowsRuntimeより

Page 18: いろいろなWindows runtimeapi

マニフェストの機能を忘れずに

マニフェストから

インターネット(クライアント)とインターネット(クライアントとサーバー)

2014/6/14 プログラミング生放送@松山 18

Page 19: いろいろなWindows runtimeapi

PDF

WindowsRuntimeではPDFを公式サポート(?)

PDFのページを取得して拡大、縮小とかして画像にするぐらいしか機能がない

2014/6/14 プログラミング生放送@松山 19

PdfDocument

PdfPage

PdfPage

Page 20: いろいろなWindows runtimeapi

PDF API

機能はすごく少ない→ビューアぐらいなら…

2014/6/14 プログラミング生放送@松山 20

PdfDocument PdfPage

パスワード保護されているか

ページ数

ビットマップ変換

ズーム

回転

など

Page 21: いろいろなWindows runtimeapi

通知

2種類の通知方法、2種類の表示方法

2014/6/14 プログラミング生放送@松山 21

ローカル通知

プッシュ通知

トースト

ライブタイル

表示方法

Page 22: いろいろなWindows runtimeapi

トースト

最前面に出てくる通知バー

ユーザーの操作を阻害しない(ただし視界は阻害する)

すぐに消える

2014/6/14 プログラミング生放送@松山 22

Page 23: いろいろなWindows runtimeapi

ライブタイル

Windows8特有のスタート画面でユーザーとの対話

トースト通知よりは長く通知したい場合

アプリを起動しなくても情報がわかる

2014/6/14 プログラミング生放送@松山 23

Page 24: いろいろなWindows runtimeapi

ライブタイルの重要性

2014/6/14 プログラミング生放送@松山 24

ライブタイルに対応していないアプリはタイルサイズが小さくなる?

ライブタイルに対応してるアプリ少なすぎィ!

Page 25: いろいろなWindows runtimeapi

ローカル通知プッシュ通知

ライブタイルやトーストを使うには?

ローカル通知かプッシュ通知を使う

2014/6/14 プログラミング生放送@松山 25

アプリ

アプリ内で自身が通知を行う

通知

アプリサービス

外部サービスから通知を送る

通知

ローカル通知 プッシュ通知

Page 26: いろいろなWindows runtimeapi

ローカル通知

テンプレートxmlの編集通知を送信

2014/6/14 プログラミング生放送@松山 26

ToastNotificationManager

TileUpdateManager

Page 27: いろいろなWindows runtimeapi

XML編集がめんどくさい?

NotificationsExtentionsがあります

すべてのテンプレートがインターフェース化され、XMLを編集しなくてもライブタイルやトースト通知が楽に

ただしサンプルコードからのコピペ(Nuget配布なし)

2014/6/14 プログラミング生放送@松山 27

Page 28: いろいろなWindows runtimeapi

プッシュ通知

2014/6/14 プログラミング生放送@松山 28

アプリ

wnsプッシュ送信サービス

①チャンネルUriを要求

②チャンネルUriを返す ③チャンネルUriを送る

④チャンネルUriを含めてプッシュ通知を要求

プッシュ通知

Page 29: いろいろなWindows runtimeapi

Azure Mobile Servicesを使おう

プッシュ通知送信機として便利です

Azure Mobile Servicesのデータベースにデータをいれるとプッシュ通知が送信されるようにしてみる。

2014/6/14 プログラミング生放送@松山 29

Page 30: いろいろなWindows runtimeapi

Mobile Servicesを使ったプッシュ

2014/6/14 プログラミング生放送@松山 30

アプリ

wns

①チャンネルUriを要求

②チャンネルUriを返す③チャンネルUriを送る

④チャンネルUriを含めてプッシュ通知を要求

プッシュ通知

Azure

④チャンネルUriを取得

⑤チャンネルUriを含めてデータベースに挿入

Page 31: いろいろなWindows runtimeapi

パッケージSIDの取得

アプリをストアと関連付け

ダッシュボードからLiveコネクトサイトへ

パッケージSIDとクライアントシークレットを取得

2014/6/14 プログラミング生放送@松山 31

Page 32: いろいろなWindows runtimeapi

Azure Mobile Servicesへ登録

プッシュ通知の欄にパッケージSIDとクライアントシークレットを登録

2014/6/14 プログラミング生放送@松山 32

Page 33: いろいろなWindows runtimeapi

Azure Mobile Services データベーステーブルの作成

チャンネルUri用とプッシュ通知データ用の2つ作る

プッシュ通知データ用のところはサーバーサイドスクリプトでWNSへプッシュ通知要求の処理を書く

2014/6/14 プログラミング生放送@松山 33

Page 34: いろいろなWindows runtimeapi

データベース用Modelクラスの作成

チャンネルUri用とプッシュ通知データ用の2つ用意する

クラス名はMobileServicesのデータベーステーブル名と一致させる

String型のIdメンバは必須

2014/6/14 プログラミング生放送@松山 34

Page 35: いろいろなWindows runtimeapi

Mobile Service SDKをいれる

データベースのデータ挿入に必要

http://garicchi.com/?p=8291

2014/6/14 プログラミング生放送@松山 35

Page 36: いろいろなWindows runtimeapi

チャンネルUriを挿入

チャンネルUriを取得

チャンネルUri用テーブルにチャンネルUriを挿入

2014/6/14 プログラミング生放送@松山 36

Page 37: いろいろなWindows runtimeapi

プッシュ通知送信側でチャンネルUriを取得

WindowsPhone側でさっきデータベースに入れたチャンネルUriを取得

取得したチャンネルUriを含めてデータを挿入

2014/6/14 プログラミング生放送@松山 37

Page 38: いろいろなWindows runtimeapi

サーバーサイドスクリプトでWNSに

モバイルサービスのサーバーサイドスクリプトでデータ挿入時にWNSにプッシュ要求するスクリプトを実行

プッシュ通知

2014/6/14 プログラミング生放送@松山 38

Page 39: いろいろなWindows runtimeapi

サーバーサイドスクリプト

WNSオブジェクトhttp://msdn.microsoft.com/en-us/library/azure/jj860484.aspx

2014/6/14 プログラミング生放送@松山 39

トースト通知 ライブタイル

Page 40: いろいろなWindows runtimeapi

独自プロトコル

iOSのアプリとかでよくあるアプリ切り替え方法

Uriスキーム

2014/6/14 プログラミング生放送@松山 40

Page 41: いろいろなWindows runtimeapi

共有チャーム

Windows8.1なら共有チャームつかえ(ry

アプリ間データ連携なら共有チャーム

独自プロトコルなら直接アプリを切り替えることができる共有するデータはStringのみ

2014/6/14 プログラミング生放送@松山 41

Page 42: いろいろなWindows runtimeapi

アプリからアプリへ

Launcherを使う

2014/6/14 プログラミング生放送@松山 42

App1 App2

UrlQuery

Page 43: いろいろなWindows runtimeapi

Htmlからアプリへ

Webページからもアプリへリンク可能

もちろんPowerPointからも

2014/6/14 プログラミング生放送@松山 43

<a href="garicchi:///?query=fromWeb">garicchiプロトコル</a>

アプリ起動

Page 44: いろいろなWindows runtimeapi

BackgroundTask

アプリは通常バックグラウンドに回ると一時停止状態に

BackgroundTaskはアプリが起動していなくてもさまざまなトリガーによって動く

2014/6/14 プログラミング生放送@松山 44

App

Background

System

Trigger

BackgroundTask 別プロセス

Page 45: いろいろなWindows runtimeapi

トリガートリガー名 発生タイミング 頻度 ロック画面の配置

MaintenanceTrigger 最多15分間隔(電源に接続されている必要がある)

1回or繰り返し 必要なし

TimeTrigger 最多15分間隔(電源に接続されている必要なし)

1回or繰り返し 必要

SystemTrigger システムが発行するさまざまなトリガーに反応

1回or繰り返し 必要なし

LocationTrigger GPSが特定の場所を検知したとき

常に繰り返し 必要

PushNotificationTrigger プッシュ通知を受け取ったとき

常に繰り返し 必要

ControlChannelTrigger リアルタイム通信用 常に繰り返し 必要

2014/6/14 プログラミング生放送@松山 45

Page 46: いろいろなWindows runtimeapi

SystemTriggerシステムトリガー名 トリガー発生タイミング ロック画面の必要性

InternetAvailable インターネット接続が確立させたとき

NetworkStateChange 接続の状態(LAN/Wifi/3G)などが変わったとき

UserAway ユーザーが4分間入力をしなかったとき

必要

UserPresent ユーザーが離席から復活したとき

必要

SessionConnected ユーザーがログインしたとき 必要

ControlChannelReset ネットワークの再確立が必要になったとき

必要

2014/6/14 プログラミング生放送@松山 46

Page 47: いろいろなWindows runtimeapi

BackgroundTask作成

2014/6/14 プログラミング生放送@松山 47

新規プロジェクト(Windowsランタイムコンポーネント)を作成

BackgroundTaskの作成(IBackgroundTaskを実装)

プロジェクトの参照の追加

BackgroundTaskBuilder作成

Triggerセット

Register

マニフェストファイルの編集

Page 48: いろいろなWindows runtimeapi

新しくプロジェクトを作成

新規WindowsRuntimeコンポーネントを作成する必ずこのプロジェクトをアプリの参照に追加する

2014/6/14 プログラミング生放送@松山 48

Page 49: いろいろなWindows runtimeapi

BackgroundTask作成

IBackgroundTaskインターフェースを実装Runメソッドが実行される

2014/6/14 プログラミング生放送@松山 49

Page 50: いろいろなWindows runtimeapi

BackgroundTaskBuilderに登録

Name={タスクの名前(任意)}

TaskEntryPoint={名前空間.タスクのクラス名}

Triggerをセット

2014/6/14 プログラミング生放送@松山 50

ロック画面を使うトリガーの場合→

Page 51: いろいろなWindows runtimeapi

マニフェストファイルの編集

エントリポイントは必須 名前空間.クラス名

2014/6/14 プログラミング生放送@松山 51

Page 52: いろいろなWindows runtimeapi

バックグラウンドタスクをデバッグ

表示→ツールバーデバッグの場所

2014/6/14 プログラミング生放送@松山 52

Page 53: いろいろなWindows runtimeapi

まとめ

WindowsRuntimeはいろんなAPIがあって楽しい!

個人的にはライブタイルとか

データ共有とかをちゃんと実装する

アプリが増えてほしい

プロ生ちゃんかわいい!

2014/6/14 プログラミング生放送@松山 53