windows10でapiはどう変わったのか
TRANSCRIPT
Windows10 で API はどう変わったのか栂井良太 - @garicchi
自己紹介
栂井良太 ( とがいりょうた )
静岡大学 情報学部 4 年音声情報処理研究室
Microsoft MVP forWindows Platform Development
Twitter : @garicchi
Windows10 発売おめでとうございます
One Windowsスタートメニューウインドウ化できる Universal Windows Appタブレットモードetc…
進化した Windows10 のアプリ
• 新しい名前→ Universal Windows Platform App ( 略 UWP)
• 今日の目標• 8.1 時代のアプリと何が違うの?• API 的にはどう変わったの?
• そのまえに• UWP についておさらい
Universal Windows App とは
Universal Windows AppIoT デバイスから大型スクリーンデバイスまで 1 つのバイナリで
https://msdn.microsoft.com/ja-jp/library/windows/apps/dn894631.aspx
Device Family
One Platform
Adaptive Layout
様々な画面サイズのデバイスファミリに適用可能 (Adaptive) な画面レイアウト1 つのバイナリが様々なデバイスで動く→特定のデバイスで動かない→✖アプリのウインドウ化→他解像度への対応
https://msdn.microsoft.com/ja-jp/library/windows/apps/dn894631.aspx
One SDK
今までWindowsStore 用 SDK 、 WindowsPhone 用 SDK…
これからUWP 用 SDK + 各デバイスファミリ用 Extension SDK
インストールの簡易化 参照マネージャから SDK を参照
何が変わった?
SDK の単一化
Mobile Extension SDK を参照してみる
参照前 参照後
API が使えるかどうか判定する方法
ExtensionSDK だけで結構たくさんの API が
One Store
すべてのアプリを配信する統一的ストア現在対応してるのはデスクトップと Phone のみ
WindowsStore WindowsPhoneStore
紐付け
アプリ内課金ローミングデータ
今まで これから
WindowsStore
アプリ内課金ローミングデータ
One Storeもちろんデスクトップ専用や Phone 専用アプリとして提出もできる
ストア提出時に選択
余談 :UWP アプリパッケージ作成
x86 、 x64 、 arm 向けに .Net ネイティブコンパイル
ストアでは CPU ごとに提出
まとめ UWP とは
• 様々なデバイス上で動くワンバイナリなアプリ• 1 つの SDK で開発でき、必要に応じて拡張 SDK を加え
る• 1 つの Store で配信
• ↑ を実現するためには 8.1 時代より多くの API 拡張が必要
UWP で変更があった API 一覧 ( 抜粋 )ユーザーインターフェース
StateTriggerSetterコンパイル時バインディング (x:Bind)段階レンダリング (x:Phase)遅延読み込み (x:DeferLoadingStrategy)SplitViewRelativePanelCalendarViewCalendarDatePickerMediaTransportControls依存関係プロパテイ変更通知
MapControlOriginalKeyInk 関連
CommandBar と AppBar の更新
GridView の縦スクロール
リストスクロール仮想化
AutoSuggetstBox (SearchBox 廃止 )ContentDialog (Phone から )Pivot (Phone から )FontIcon
アプリケーションモデルCotranaLauncherFolderAsync共有ストレージ
プロトコル設定呼び出し
LaunchUriFroResultsAsync
デバイス位置情報 (RequestAccessAsync)AllJoynモバイル印刷 APIWindows.Devices.PowerWindows.Device.MidiWindows.Device.Sensors.CustomSmartCardTrigger
グラフィックスDirectX12SoftwareBitmapSource遠近投影カメラ
メディアHttp ライブストリーミング(AdaptiveMediaSource)TranscodeVideoProcessorMediaProcessingTriggerGetAsCastingSource によるキャスト
MediaTransportControlsJPEG エンコードとデコード
MediaOverlayWindows.Media.Effects
ネットワークHttp ライブストリーミング(AdaptiveMediaSource)Windows.Devices.BluetoothAdvertisement
セキュリティWindows.Security.Cryptography(ECC 暗号化 )KeyCredentialManager
システム・サービスバッテリー節約機能通知 (PowerSettingRegisterNotification)VersionHelper
ストレージPublisherCacheFolder
ツールライブビジュアルツリー
ユーザーエクスペリエンスSpeechRecognitionWindows.ApplicationModel.DataTransfer.DragDropApplicationView.TitleBar
WebWebView Edge モードブラウズ
WebView の新しい API
通知Adaptive Live TileInteractive Toast
バックグラウンドタスクBackgroundTask の新しい TriggerAppService
https://dev.windows.com/ja-jp/getstarted/whats-new-windows-10
今回はこの中でも使えそうな新機能を紹介
ユーザーインターフェース
新しい UI コントロール• Adaptive Layout を実現するためのコントロール
SplitView RelativePanel
• 新しく追加されたコントロールMapControl CalendarView CalendarDatePicker MediaTransportControl
SplitViewPane と Content の分割表示をするコントロール
DisplayMode = “Inline” DisplayMode = “Overlay”
DisplayMode = “CompactInline” DisplayMode = “CompactOverlay”
公式が提供する UWP では SplitView がデフォルト
CompactOverlay の例 (天気アプリ )
CompactInline の例 ( カレンダーアプリ )
コンテンツの位置は変わってない
コンテンツの位置が変わる
Compact の場合• Compact じゃない Overlay や Inline は?• モバイルアプリ
Compact部分がない• モバイルのようなサイズの小さいデバイスではコンテンツに集中できるよ
うに Compact 部分は隠す
SplitView で実現する AdaptiveLayoutSplitView を使うことで様々なサイズのデバイスに合わせたナビゲーションとコンテンツを表示できる
RelativePanel• 様々なサイズに適用する AdaptiveLayout ではコンテンツがよく座標移動
する→絶対座標による UI 配置✖• あるコントロールに対して相対的な配置をしたい→ RelativePanel
ある UI 要素に対し
相対的な座標指定
RelativePanel
詳しくは→ http://garicchi.com/?p=18905
StateTrigger• VisualState を自動的に切り替える新しい方法
• VisualState?• XAML コントロールの変化を複数の状態として定義することができるもの
VisualState1 VisualState2
簡単に切り替え
StateTrigger• 従来の VisualState の切り替え方法
• コードから切り替え (VisualStateManager)
• XAML Behavior を利用した切り替え (GotoStateAction)
• 新しい方法 (StateTrigger)• ある条件に当てはまった場合、自動的に State切り替え• 現在ある StateTrigger→AdaptiveTrigger ( カスタム作成可能 )
AdaptiveTrigger• 最初から用意されている StateTrigger の 1 つ
• ウインドウ幅や高さが指定以上になると自動的に State を切り替える
幅が 400以上あれば切り替え
• 従来ならウインドウのサイズ変更イベントを受け取ってコードから切り替える必要があった
• XAML だけで簡易化させた→ AdaptiveLayout を作りやすく!
StateTrigger と SplitView で実現する AdaptiveLayout
• StateTrigger によって自動的に SplitView の表示を切り替える• ( たぶん )UWP の推奨レイアウト
• UWP の UI 設計はより多くのデバイスに適用できるように設計しなければならない
XAML ビュー
• 単一の XAML だけでは見た目が実現できない場合• UWP には XAML ビューというものがある
• 単一の XAML ( コードビハインドなし )• DeviceFamily-[Name] というフォルダを作ることで
デバイスによって XAML を切り替え可能
アプリ間通信
Windows アプリのアプリ間通信
• UWP でのアプリ間通信方式• Data Contract• URLProtocol• Shared Storage Access Manager
• URL Protocol (Result 付き )• App Service
• UWP ではセキュリティ上、アプリ間通信方法は限られている• garicchicom://
ストアアプリ時代から
UWP から
DataContract• UWP の標準的なデータ共有方法
OS
App1
①共有ターゲット登録
③起動App2
②データ共有
契約 (Contract)
• 呼び出す側は呼び出される側のアプリを指定できない ( データの種類だけ )
• 呼び出された側がちゃんとデータが処理されたかどうかもわからないhttp://windows.microsoft.com/ja-jp/windows-8/charms-tutorial
共有チャーム
• チャーム廃止• 8.1 までの DataContract の呼び出し方は共有チャーム
• 10 からは共有ボタンを作り、 API を呼ぶ
http://windows.microsoft.com/ja-jp/windows-8/charms-tutorial
URL プロトコル
• 8.1 時代からあった URL スキームによるアプリ呼び出し
OS
App1
①URL スキーム登録 (例 myApp:
③起動App2
②URL スキーム呼び出し (例 myapp:?data=“hoge”
• 8.1 まではデータを一方的に送信するだけだった• クエリによるテキストデータ送信• ファイル送信 (Shared Storage Access Manager)
Launch for Result• Windows10 からは結果を取得できるように
OS
App1
①URL スキーム登録 (例 myApp:
③起動App2
②URL スキーム呼び出し (例 myapp:?data=“hoge”
④結果の返却
• 永続的な通信→✖• 呼び出したアプリ側からはアプリがちゃんと処理してくれたか
がわかる
http://garicchi.com/?p=18985
App Services• UWP の大きな追加機能の一つ• バックグランドで起動し別のアプリにデータを提供
OS
App1②バックグラウンド起動
App2
①App Service 呼び出し
③メッセージ送信
④返却
• プロトコル呼び出しとの違い• 呼び出すアプリが一意に特定• バックグラウンド起動• 永続的なコネクション
App Services の特徴
• 呼び出すアプリが一意に特定される• 他人のアプリと連携は想定されていない• 同じ作者の別アプリ間連携が目的→機能分離?
http://www.microsoftvirtualacademy.com/training-courses/a-developers-guide-to-windows-10
UWP のアプリ間通信
• 結果の帰ってくる Launch for Result• サービスとしての App Service
• Windows10 でアプリ間通信は強化されてアプリ間連携の幅が強化された
• 連携する複数アプリの可能性がでてきた
バックグラウンドタスク
BackgroundTask
• UWP は基本的にアプリを閉じるとタスクを実行できなくなる• BackgroundTask に登録しておくと Trigger が発動したときに別のプロセスとして処理を実行できる
App
System
System
Trigger
BackgroundTask 別プロセス
BackgroundTask登録
Background Task Trigger の例
• Time Trigger• 一定時間で Task を実行• 最短 15 分間隔
• System Trigger• システムのあらゆるイベント時に Task 実行• 例 Internet Available , Power State Changed
• Push Notification Trigger• プッシュ通知が来た時に Task 実行
UWP で追加された Trigger• UWP で BackgroundTask Trigger が結構追加
SystemTriggerTimeTriggerMaintenanceTriggerDeviceUseTriggerDeviceServicingTriggerPushNotificationTrigger
CachedFileUpdaterTriggerDeviceConnectionChangeTriggerGattCharacteristicNotificationTriggerRfcommConnectionTriggerLocationTrigger
AppointmentStoreNotificationTriggerContactStoreNotificationTriggerEmailStoreNotificationTriggerBluetoothLEAdvertisementWatcherTriggerBluetoothLEAdvertisementPublisherTriggerDeviceWatcherTriggerActivitySensorTriggerSensorDataThresholdTriggerToastNotificationHistoryChangedTriggerToastNotificationActionTriggerApplicationTriggerMediaProcessingTriggerSocketActivityTrigger
Win
dows
8.1
Win
dows
Phon
e8.1
Windows10
で追
加
Windows10 UWP で使える Trigger http://www.microsoftvirtualacademy.com/training-courses/a-developers-guide-to-windows-10
通知
UWP の通知
• Adaptive Live Tile• デバイス解像度に合わせた表示を行うライブタイル
• Interactive Toast• トースト通知内で様々な操作ができるように
http://blogs.msdn.com/b/tiles_and_toasts/archive/2015/06/30/adaptive-tile-templates-schema-and-documentation.aspx
http://blogs.msdn.com/b/tiles_and_toasts/archive/2015/07/02/adaptive-and-interactive-toast-notifications-for-windows-10.aspx
Adaptive Live Tile
• UWP でライブタイルの自由度↑• ライブタイルで様々な表現が可能に
• 様々なデバイス解像度に適用できるように• ライブタイルでも Adaptive UI• どんな解像度でも満足に見えるように
http://blogs.msdn.com/b/tiles_and_toasts/archive/2015/06/30/adaptive-tile-templates-schema-and-documentation.aspx
Adaptive Tile Templates Scheme• ライブタイルは xml を編集して通知を発行する• UWP で xml のスキーマが増えた
デフォルトの xml
テキストの alignment Colmun 表示背景画像の明るさ
http://blogs.msdn.com/b/tiles_and_toasts/archive/2015/06/30/adaptive-tile-templates-schema-and-documentation.aspx
Interactive Toast• 今までのトースト通知• 通知を表示するだけ• その通知にたいするアクションを作れなかった
• UWP のトースト通知• 通知に対するアクション (例 SNS の返信 ) ができるようになってより
インタラクティブに• 通知としての表現力↑
https://msdn.microsoft.com/ja-jp/library/windows/apps/hh761494.aspx
http://blogs.msdn.com/b/tiles_and_toasts/archive/2015/07/02/adaptive-and-interactive-toast-notifications-for-windows-10.aspx
Interactive Toast Template Scheme
• トースト通知も xml を編集して発行
デフォルトの xml
input と actionToast の ActivationKind
http://blogs.msdn.com/b/tiles_and_toasts/archive/2015/07/02/adaptive-and-interactive-toast-notifications-for-windows-10.aspx
UWP の通知
• トーストやライブタイルなどの通知での表現力が向上• タイル UI は UWP の魅力の一つ• 様々なデバイスでインタラクティブな通知ができるアプリの作成が可
能に
Cortana
日本語版 Cortana
Windows10 Insider preview build 10532 で搭載UWP アプリも Cortana に対応させることができる
Voice Command Definition
• Cortana に話しかけてアプリを起動することができる
• VCD という xml を作る• 例 (明日の天気を知りたい• ↓• {when}[ の天気を知りたい ]• ↓• 天気アプリ起動
Universal Windows App の開発
AppTemplate• 自作テンプレートを作りました• ここからダウンロード• http://garicchi.com/?p=18996
• ハンバーガーメニュー実装済み• 今後公式からちゃんとしたテンプレー
ト出てくる?
さらに勉強するには
• Windows-universal-samples – Github• https://github.com/Microsoft/Windows-universal-samples
• A Developer's Guide to Windows 10 - Microsoft Virtual Academy• http://
www.microsoftvirtualacademy.com/training-courses/a-developers-guide-to-windows-10
• Windows アプリ開発入門 – garicchi.com• http://garicchi.com/?page_id=111