Upload
ryota-togai
View
2.169
Download
7
Embed Size (px)
Citation preview
いろいろなWindowsRuntimeAPI@garicchi
2014/6/14 プログラミング生放送@松山 1
自己紹介
栂井良太(Ryota Togai @garicchi)
暖かい地域のとある大学に通っています(学生)
Windowsストアアプリとかクライアント開発とか全般的に好き
http://garicchi.com
http://garicchi.hatenablog.jp
2014/6/14 プログラミング生放送@松山 2
Microsoft Student Partners
Microsoftの学生組織
最近メンバーが増えまくってついに60人に
全国?で活動しているかも
2014/6/14 プログラミング生放送@松山 3
Microsoft Student Partners
わたしとプロ生ちゃん
2013年10月プログラミング生放送@大阪登壇
プロ生うどんパーティー etc..
2014/6/14 プログラミング生放送@松山 4
ぷろなまなうぷれ プロ生@サッカー
Agenda
LockScreen
SyndicationFeed
StreamSocket
PdfDocument
Notification
Protocol
BackgroundTask
2014/6/14 プログラミング生放送@松山 5
WindowsRuntimeって?
Windows8以降、新しいWindowsのAPIModernデザインのアプリをさまざまな言語で書くための共通プラットフォーム
最近WindowsPhoneにも統合http://www.infoq.com/jp/news/2011/09/Design-Details-Windows-Runtime
2014/6/14 プログラミング生放送@松山 6
セッション目標
WindowsRuntimeの使わなさそうなAPIを知ってもらう
使わなさそうで実は使ってほしいAPIを覚えて使ってもらいたい(願望
デモ中心でいきたい
2014/6/14 プログラミング生放送@松山 7
LockScreen
WindowsRuntimeはWindows8.1のロック画面の画像を操作できる
※ただしWindowsPhone8.1は未対応
2014/6/14 プログラミング生放送@松山 8
LockScreenAPI
LockScreenの画像変更は無許可で可能
2014/6/14 プログラミング生放送@松山 9
LockScreenクラス GetImageStream
LockScreenクラス SetImageStream
SyndicationFeed
AtomやRSSを簡単にパースしてくれる
わざわざxmlを解析しなくてもいい
2014/6/14 プログラミング生放送@松山 10
SyndicationFeed
HttpClientでダウンロード→SyndicationFeedで解析
2014/6/14 プログラミング生放送@松山 11
ソケット通信
ソケット通信とは?
2014/6/14 プログラミング生放送@松山 12
クライアント サーバー
Socket Socket
バーチャルサーキット
相互通信
IPアドレスとポート番号を指定して通信を行うクライアントとサーバー間のTCP/IP通信
ソケット通信の流れ
Listen→Connect→Acceptで接続完了
2014/6/14 プログラミング生放送@松山 13
クライアント
サーバー
Socket Socket
Listen
Connect
Accept
ソケット通信の流れ(一般)
一度接続を確立したらあとは相互通信
2014/6/14 プログラミング生放送@松山 14
クライアント
サーバー
Socket Socket
sendreceive
send receive
ソケット通信の流れ(WinRTの場合)
サーバーとクライアントで確立したStreamに向かってDataWriterで書き込みDataReaderで読み込み
2014/6/14 プログラミング生放送@松山 15
クライアント
サーバー
Socket Socket
DataReaderDataWriter
DataReaderStream
Stream
DataWriter
何に使えるの?
デバイス間のデータ通信
タブレットをPhoneから操作したり
2014/6/14 プログラミング生放送@松山 16
WindowsRuntimeのSocketAPI
クラス プロトコル クライアントorサーバー
StreamSocket TCP クライアント
StreamSocketListener TCP サーバー
StreamWebSocket WebSocket クライアント
MessageSocket WebSocket クライアント
DatagramSocket UDP ピア
2014/6/14 プログラミング生放送@松山 17
日経BP プログラミングWindowsRuntimeより
マニフェストの機能を忘れずに
マニフェストから
インターネット(クライアント)とインターネット(クライアントとサーバー)
2014/6/14 プログラミング生放送@松山 18
WindowsRuntimeではPDFを公式サポート(?)
PDFのページを取得して拡大、縮小とかして画像にするぐらいしか機能がない
2014/6/14 プログラミング生放送@松山 19
PdfDocument
PdfPage
PdfPage
PDF API
機能はすごく少ない→ビューアぐらいなら…
2014/6/14 プログラミング生放送@松山 20
PdfDocument PdfPage
パスワード保護されているか
ページ数
ビットマップ変換
ズーム
回転
など
通知
2種類の通知方法、2種類の表示方法
2014/6/14 プログラミング生放送@松山 21
ローカル通知
プッシュ通知
トースト
ライブタイル
表示方法
トースト
最前面に出てくる通知バー
ユーザーの操作を阻害しない(ただし視界は阻害する)
すぐに消える
2014/6/14 プログラミング生放送@松山 22
ライブタイル
Windows8特有のスタート画面でユーザーとの対話
トースト通知よりは長く通知したい場合
アプリを起動しなくても情報がわかる
2014/6/14 プログラミング生放送@松山 23
ライブタイルの重要性
2014/6/14 プログラミング生放送@松山 24
ライブタイルに対応していないアプリはタイルサイズが小さくなる?
ライブタイルに対応してるアプリ少なすぎィ!
ローカル通知プッシュ通知
ライブタイルやトーストを使うには?
ローカル通知かプッシュ通知を使う
2014/6/14 プログラミング生放送@松山 25
アプリ
アプリ内で自身が通知を行う
通知
アプリサービス
外部サービスから通知を送る
通知
ローカル通知 プッシュ通知
ローカル通知
テンプレートxmlの編集通知を送信
2014/6/14 プログラミング生放送@松山 26
ToastNotificationManager
TileUpdateManager
XML編集がめんどくさい?
NotificationsExtentionsがあります
すべてのテンプレートがインターフェース化され、XMLを編集しなくてもライブタイルやトースト通知が楽に
ただしサンプルコードからのコピペ(Nuget配布なし)
2014/6/14 プログラミング生放送@松山 27
プッシュ通知
2014/6/14 プログラミング生放送@松山 28
アプリ
wnsプッシュ送信サービス
①チャンネルUriを要求
②チャンネルUriを返す ③チャンネルUriを送る
④チャンネルUriを含めてプッシュ通知を要求
プッシュ通知
Azure Mobile Servicesを使おう
プッシュ通知送信機として便利です
Azure Mobile Servicesのデータベースにデータをいれるとプッシュ通知が送信されるようにしてみる。
2014/6/14 プログラミング生放送@松山 29
Mobile Servicesを使ったプッシュ
2014/6/14 プログラミング生放送@松山 30
アプリ
wns
①チャンネルUriを要求
②チャンネルUriを返す③チャンネルUriを送る
④チャンネルUriを含めてプッシュ通知を要求
プッシュ通知
Azure
④チャンネルUriを取得
⑤チャンネルUriを含めてデータベースに挿入
パッケージSIDの取得
アプリをストアと関連付け
ダッシュボードからLiveコネクトサイトへ
パッケージSIDとクライアントシークレットを取得
2014/6/14 プログラミング生放送@松山 31
Azure Mobile Servicesへ登録
プッシュ通知の欄にパッケージSIDとクライアントシークレットを登録
2014/6/14 プログラミング生放送@松山 32
Azure Mobile Services データベーステーブルの作成
チャンネルUri用とプッシュ通知データ用の2つ作る
プッシュ通知データ用のところはサーバーサイドスクリプトでWNSへプッシュ通知要求の処理を書く
2014/6/14 プログラミング生放送@松山 33
データベース用Modelクラスの作成
チャンネルUri用とプッシュ通知データ用の2つ用意する
クラス名はMobileServicesのデータベーステーブル名と一致させる
String型のIdメンバは必須
2014/6/14 プログラミング生放送@松山 34
Mobile Service SDKをいれる
データベースのデータ挿入に必要
http://garicchi.com/?p=8291
2014/6/14 プログラミング生放送@松山 35
チャンネルUriを挿入
チャンネルUriを取得
チャンネルUri用テーブルにチャンネルUriを挿入
2014/6/14 プログラミング生放送@松山 36
プッシュ通知送信側でチャンネルUriを取得
WindowsPhone側でさっきデータベースに入れたチャンネルUriを取得
取得したチャンネルUriを含めてデータを挿入
2014/6/14 プログラミング生放送@松山 37
サーバーサイドスクリプトでWNSに
モバイルサービスのサーバーサイドスクリプトでデータ挿入時にWNSにプッシュ要求するスクリプトを実行
プッシュ通知
2014/6/14 プログラミング生放送@松山 38
サーバーサイドスクリプト
WNSオブジェクトhttp://msdn.microsoft.com/en-us/library/azure/jj860484.aspx
2014/6/14 プログラミング生放送@松山 39
トースト通知 ライブタイル
独自プロトコル
iOSのアプリとかでよくあるアプリ切り替え方法
Uriスキーム
2014/6/14 プログラミング生放送@松山 40
共有チャーム
Windows8.1なら共有チャームつかえ(ry
アプリ間データ連携なら共有チャーム
独自プロトコルなら直接アプリを切り替えることができる共有するデータはStringのみ
2014/6/14 プログラミング生放送@松山 41
アプリからアプリへ
Launcherを使う
2014/6/14 プログラミング生放送@松山 42
App1 App2
UrlQuery
Htmlからアプリへ
Webページからもアプリへリンク可能
もちろんPowerPointからも
2014/6/14 プログラミング生放送@松山 43
<a href="garicchi:///?query=fromWeb">garicchiプロトコル</a>
アプリ起動
BackgroundTask
アプリは通常バックグラウンドに回ると一時停止状態に
BackgroundTaskはアプリが起動していなくてもさまざまなトリガーによって動く
2014/6/14 プログラミング生放送@松山 44
App
Background
System
Trigger
BackgroundTask 別プロセス
トリガートリガー名 発生タイミング 頻度 ロック画面の配置
MaintenanceTrigger 最多15分間隔(電源に接続されている必要がある)
1回or繰り返し 必要なし
TimeTrigger 最多15分間隔(電源に接続されている必要なし)
1回or繰り返し 必要
SystemTrigger システムが発行するさまざまなトリガーに反応
1回or繰り返し 必要なし
LocationTrigger GPSが特定の場所を検知したとき
常に繰り返し 必要
PushNotificationTrigger プッシュ通知を受け取ったとき
常に繰り返し 必要
ControlChannelTrigger リアルタイム通信用 常に繰り返し 必要
2014/6/14 プログラミング生放送@松山 45
SystemTriggerシステムトリガー名 トリガー発生タイミング ロック画面の必要性
InternetAvailable インターネット接続が確立させたとき
NetworkStateChange 接続の状態(LAN/Wifi/3G)などが変わったとき
UserAway ユーザーが4分間入力をしなかったとき
必要
UserPresent ユーザーが離席から復活したとき
必要
SessionConnected ユーザーがログインしたとき 必要
ControlChannelReset ネットワークの再確立が必要になったとき
必要
2014/6/14 プログラミング生放送@松山 46
BackgroundTask作成
2014/6/14 プログラミング生放送@松山 47
新規プロジェクト(Windowsランタイムコンポーネント)を作成
BackgroundTaskの作成(IBackgroundTaskを実装)
プロジェクトの参照の追加
BackgroundTaskBuilder作成
Triggerセット
Register
マニフェストファイルの編集
新しくプロジェクトを作成
新規WindowsRuntimeコンポーネントを作成する必ずこのプロジェクトをアプリの参照に追加する
2014/6/14 プログラミング生放送@松山 48
BackgroundTask作成
IBackgroundTaskインターフェースを実装Runメソッドが実行される
2014/6/14 プログラミング生放送@松山 49
BackgroundTaskBuilderに登録
Name={タスクの名前(任意)}
TaskEntryPoint={名前空間.タスクのクラス名}
Triggerをセット
2014/6/14 プログラミング生放送@松山 50
ロック画面を使うトリガーの場合→
マニフェストファイルの編集
エントリポイントは必須 名前空間.クラス名
2014/6/14 プログラミング生放送@松山 51
バックグラウンドタスクをデバッグ
表示→ツールバーデバッグの場所
2014/6/14 プログラミング生放送@松山 52
まとめ
WindowsRuntimeはいろんなAPIがあって楽しい!
個人的にはライブタイルとか
データ共有とかをちゃんと実装する
アプリが増えてほしい
プロ生ちゃんかわいい!
2014/6/14 プログラミング生放送@松山 53