111015 すまべん wp7データ保存

48
WP7 ででででででで でででで でで でで (@tanaka_733) 2011/10/15 でででででで #15 1

Upload: -

Post on 22-Jun-2015

1.209 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 111015 すまべん wp7データ保存

1

WP7 でのデータ保存いろいろ

田中 孝佳 (@tanaka_733)

2011/10/15 すまべん関東 #15

Page 2: 111015 すまべん wp7データ保存

2

自己紹介 ERP パッケージベンダーの研究部門

クラウドを使っていい感じにする研究 Silverlight +サーバーサイド Java で開発

Silverlight を囲む会東京 のスタッフしてます Silverlight 好きが高じて WP7 にはまる

IS12T 持ってます 1 台前から Windows AU (E30HT) アプリも 1 つリリース (SimpleCompass)

ブログ:銀の光と藍い空 http://techblog.hilife-jp.info/

2011/10/15 すまべん関東 #15

Page 3: 111015 すまべん wp7データ保存

3

今日のテーマ WP7 でデータを保存しよう

データ保存はプログラミングの基本…多分 でも、 WP7 ではアプリから

ファイルシステムにアクセスできない データを保存する方法を紹介します

2011/10/15 すまべん関東 #15

Page 4: 111015 すまべん wp7データ保存

4

分離ストレージへの保存WP7 でのデータ保存の基本

2011/10/15 すまべん関東 #15

Page 5: 111015 すまべん wp7データ保存

5

分離ストレージ(Isolated Storage)

Web 版 Silverlight にもある機能 こちらはユーザーのアクセス許可が必要

アプリケーションごとのセキュアな保存 フォルダ・ファイルという階層が持てる 任意の形式で保存可能

バイナリ、 XML 、 JSON etc 容量は仕様上は無制限

2011/10/15 すまべん関東 #15

Page 6: 111015 すまべん wp7データ保存

6

どんなときに使うの? 設定データなどを永続的に 非 Active 時の View の状態などを一時的

に View の状態の保存とは?

Windows Phone では非 Active 時にメモリが解放される可能性があります

戻るボタンを押された時とか バックグランドで一部の処理はできます

View の状態を復元するために保存

2011/10/15 すまべん関東 #15

( 参考 )Windows Phone 7 のトゥームストーン処理http://msdn.microsoft.com/ja-jp/magazine/hh148153.aspx

Page 7: 111015 すまべん wp7データ保存

7

分離ストレージの使い方 (1) IsolatedStorageSetting クラスを使用

保存

検索

2011/10/15 すまべん関東 #15

Page 8: 111015 すまべん wp7データ保存

8

分離ストレージの使い方 (2) IsolatedStorageFile クラスを使用

リスト

ファイル作成

2011/10/15 すまべん関東 #15

Page 9: 111015 すまべん wp7データ保存

9

保存形式をちょっと考察 .NET と相性がいいのは XML

デフォルトでサポートされてるし、LINQ to XML あるし

その次は JSON DataContractJsonSerializer がある XML より軽量

でも、バイナリに比べると重いですね 可読性はあるけど、

分離ストレージ内では意味がない

2011/10/15 すまべん関東 #15

Page 10: 111015 すまべん wp7データ保存

10

Sterling がある バイナリシリアル化で保存サイズ圧縮 シリアル化をカスタマイズ可能

暗号化 カスタムのシリアル化

クエリの高速化 LINQ でアクセスできる

2011/10/15 すまべん関東 #15

( 参考 ) Windows Phone 7 の分離ストレージ用の Sterlinghttp://msdn.microsoft.com/ja-jp/magazine/hh205658.aspx

Page 11: 111015 すまべん wp7データ保存

11

SQL Server CE の利用モバイルでも RDBMS 使えるよ!

2011/10/15 すまべん関東 #15

Page 12: 111015 すまべん wp7データ保存

12

RDBMS も使えるよ SQL Server CE が使えます

組み込み系とか、簡易 DB としておなじみ 自称 SQL のプロがいいそうなこと

が・・・

2011/10/15 すまべん関東 #15

Page 13: 111015 すまべん wp7データ保存

13

SQL で何でも解決!!

2011/10/15 すまべん関東 #15

SELECT * FROM SERVER SOUTER JOIN SERVER_HISTORY HON S.ID = H.H_IDWHERE S.DATE = H.DATEUNIONSELECT * FROM SERVER2 S2INNER JOIN SERVER_HISTORY H2ON S2.ID = H2.H_IDWHERE S2.DATE = H2.DATEAND S2.NAME IN ( SELECT * FROM TAG T WHERE S2.TAG = T.ID)UNIONSELECT *FROM SERVER S3INNER JOIN VOLUME ON S3.ID = V.SERVER_IDUNIONSELECT *FROM SERVER S4OUTER JOIN NETWORK NWON S4.ID = NW.SERVER_OD・・・

Page 14: 111015 すまべん wp7データ保存

14

WP7 では SQL が書けません Code First な LINQ to SQL のみ Entity クラスを定義して、

そのクラスを利用してテーブルを作成 CRUD 操作も同様

2011/10/15 すまべん関東 #15

Page 15: 111015 すまべん wp7データ保存

15

SQL Sever CE を使う準備 参照を追加

using 節を追加 ( 拡張メソッドのため )

2011/10/15 すまべん関東 #15

using System.Data.Linq;using System.Data.Linq.Mapping;using Microsoft.Phone.Data.Linq.Mapping;

Page 16: 111015 すまべん wp7データ保存

16

サンプル ここのサンプル「 Local Database

Sample 」からの抜粋です http://

msdn.microsoft.com/ja-jp/library/ff431744%28v=vs.92%29.aspx

プロジェクト DL はこちら http://go.microsoft.com/fwlink/?

LinkId=219066

2011/10/15 すまべん関東 #15

Page 17: 111015 すまべん wp7データ保存

17

接続

2011/10/15 すまべん関東 #15

接続文字列

DataContext

DB が無い時 ( 初回起動時 )

DB 作成

初期データ作成

更新をコミット

Page 18: 111015 すまべん wp7データ保存

18

ConnectString 形式いろいろ分離ストレージ内 “isostore:/mydb.sdf”

アプリケーションフォルダ内に読み込み専用で

“Data Source = ‘appdata:/mydb.sdf’;File Mode = read only;”

パスワード付きで暗号化 “Data Source=‘isostore:/mydb.sdf’;Password=‘securepassword’;”

DB サイズ最大 256MB 、バッファサイズ最大 1024KB

“Data Source=‘mydb.sdf’;File Mode=read only;Max Database Size = 256; Max Buffer Size=1024;”

言語指定と大文字小文字の区別指定 “Data Source=‘mydb.sdf’;Culture Identifier=de-de;Case Sensitive=true;”

2011/10/15 すまべん関東 #15

プログラミング Windows Phone より抜粋

Page 19: 111015 すまべん wp7データ保存

19

DataContext

2011/10/15 すまべん関東 #15

DataContext を継承

接続文字列を渡す

Table を定義Entity クラスを指定

Page 20: 111015 すまべん wp7データ保存

20

Enity クラス

2011/10/15 すまべん関東 #15

[Table] 属性2 つのインタフェース

は後述

Column属性を定義

インターフェースのための定型文

Page 21: 111015 すまべん wp7データ保存

21

Entity クラスでなぜ Inotify~ を実装するのか

INotifyPropertyChanged LINQ to SQL では不要 Binding する際に

View へ変更通知を飛ばすために必要 INotifyPropertyChanging

LINQ to SQL では不要 Binding でも不要 LINQ to SQL でのメモリ使用量を削減できる

http://msdn.microsoft.com/en-us/library/hh286406%28v=VS.92%29.aspx#BKMK_MinimizingMemoryUsage2011/10/15 すまべん関東 #15

Page 22: 111015 すまべん wp7データ保存

22

( 参考 ) INotifyPropertyChanged

INotifyPropertyChanged MVVM において、 ViewModel

もしくは Model が実装することが多い プロパティの変更通知をイベントとして飛ば

す そのため、 setter 内で変更前後の値を比べ

ている

2011/10/15 すまべん関東 #15

Page 23: 111015 すまべん wp7データ保存

23

( 参考 ) INotifyPropertyChanging

INotifyPropertyChanging INotifyPropertyChanged はプロパティが変更された後にイベントを飛ばすが、こちらは変更される前に飛ばす

LINQ to SQL において、変更前後の値を持つ必要があるが、これを実装していると、必要な時だけ変更前の値を持つ

実装していない場合は、常に持っているため、メモリ使用量が増えてしまう

2011/10/15 すまべん関東 #15

Page 24: 111015 すまべん wp7データ保存

24

アプリには VerUP がつきもの DB のスキーマ変更しますね

基本はテーブル・カラムの追加のみ WP7 での対応

DB の VerCount を取得・設定できる現在の Ver と比べて古ければ更新処理をする

2011/10/15 すまべん関東 #15

Page 25: 111015 すまべん wp7データ保存

25

WP7 の DB での VerUP サンプル

2011/10/15 すまべん関東 #15

Ver2 から 3 への更新

Ver1 から 2 への更新

アプリのバージョンを定義

Page 26: 111015 すまべん wp7データ保存

26

SkyDrive への保存クラウド連携

2011/10/15 すまべん関東 #15

Page 27: 111015 すまべん wp7データ保存

27

どうしても携帯の外に保存したい

今までの方法は携帯の中のみ しかもそのアプリからしか見えない

携帯の外に保存したい時は?画像なら Picutures経由で

SkyDrive に保存できる でも普通のファイルを保存したい時は?

2011/10/15 すまべん関東 #15

Page 28: 111015 すまべん wp7データ保存

28

SkyDrive に保存してみよう 必ず持ってる Live ID そして SkyDrive Windows Live SDK で API 操作可能 ただし、 OS の LiveID とは別認証

パスワード入力の手間がかかる別のユーザーの SkyDrive にも保存可能

API経由なので他のスマフォ・ PC アプリ・Web アプリでも可能

2011/10/15 すまべん関東 #15

Page 29: 111015 すまべん wp7データ保存

29

OAuth認証が必要 OAuth の実装ですか・・・

OAuth認証自体はライブラリを使えても、ログイン UI の表示とかも面倒いですね

2011/10/15 すまべん関東 #15

Page 30: 111015 すまべん wp7データ保存

30

Live SDK Developer Preview Live SDK を Windows Phone から手軽

に使えるライブラリ Developer Preview です

API がこなれていなかったりする プロジェクトのサイト

https://connect.microsoft.com/site1226/

2011/10/15 すまべん関東 #15

Page 31: 111015 すまべん wp7データ保存

31

Live SDK への登録 Live SDK を呼び出すアプリを登録します Live Connect app management site

https://manage.dev.live.com/

2011/10/15 すまべん関東 #15

Page 32: 111015 すまべん wp7データ保存

32

Live SDK への登録

2011/10/15 すまべん関東 #15

Page 33: 111015 すまべん wp7データ保存

33

Live SDK への登録 API 設定をから Mobile client app を

Yes に変更 Client ID をコピー

2011/10/15 すまべん関東 #15

Page 34: 111015 すまべん wp7データ保存

34

Live SDK の使用 (1) 参照に追加

Microsoft.Live Microsoft.Live.Controls

SignInButton を UI に追加 ブラウザ表示とか面倒な処理を

書かなくていい!!

2011/10/15 すまべん関東 #15

Page 35: 111015 すまべん wp7データ保存

35

Live SDK の使用 (2) 以下の要素を XAML に指定 Scopes

操作を許可する範囲 (認可の範囲 ) ClientId

登録時に発行されて、コピーしたもの RedirectUri

Phone の場合使わない。一応、下記を指定 https://oauth.live.com/desktop

SessionChanged イベントハンドラ

2011/10/15 すまべん関東 #15

Page 36: 111015 すまべん wp7データ保存

36

Live SDK のサンプル 設定画面で SignIn する ( おまけ )Twitter から TL を取得 SkyDrive のフォルダをリスト表示 フォルダをダブルタップしたら

xml ファイルを特定のディレクトリに保存

2011/10/15 すまべん関東 #15

Page 37: 111015 すまべん wp7データ保存

37

SingIn 処理 SignInButton の

SessionChanged イベントを処理する

2011/10/15 すまべん関東 #15

Page 38: 111015 すまべん wp7データ保存

38

フォルダ取得 filter=folders,albums で取得返値は IDictionary<string, object>

2011/10/15 すまべん関東 #15

Page 39: 111015 すまべん wp7データ保存

39

フォルダ取得 (2) IDictionary<string, object> を変換

汚い Rx(LINQ) ですみません m(__)m

2011/10/15 すまべん関東 #15

Page 40: 111015 すまべん wp7データ保存

40

ファイルアップロード FolderID 、ファイル名、ファイルコンテ

ンツ (Stream) を渡します

2011/10/15 すまべん関東 #15

Page 41: 111015 すまべん wp7データ保存

41

注意!!! ファイル名が画像・ドキュメント以外の

拡張子だと失敗することがあるようです http://

social.msdn.microsoft.com/Forums/en-AU/messengerconnect/thread/9a7296e6-6d9e-41a1-86e1-376b516cb5fe

一応、なおすと言ってます 今回は拡張子を jpg に偽装することで泣く泣く超暫定対応

2011/10/15 すまべん関東 #15

Page 42: 111015 すまべん wp7データ保存

42

( 参考 ) その他の外部保存先の候補

API つきのオンラインストレージサービス Dropbox など

本格的なクラウドストレージ Azure Blob Storage, Amazon S3 など

Azure は WP7 ・ Android ・ iOS 向け SDK あり Amazon は SDK for .NET を移植すれば・・・

鬼門は XSLT変換と通信の同期処理 移植の場合はライセンスにもお気をつけを Android と iOS は SDK あるよ

2011/10/15 すまべん関東 #15

Page 43: 111015 すまべん wp7データ保存

43

付録そのほか

2011/10/15 すまべん関東 #15

Page 44: 111015 すまべん wp7データ保存

44

( 参考 ) 要望を MS に伝えられます!

開発者向け要望サイト「 WPDev Feedback 」の日本語版 http://

wpdev.uservoice.com/forums/136286-app-platform-japan

2011/10/15 すまべん関東 #15

Page 45: 111015 すまべん wp7データ保存

45

( 参考 ) 書籍 プログラミング Windows Phone

Windows Phone ゲームプログラミング

2011/10/15 すまべん関東 #15

レビューさせて頂きました

Page 46: 111015 すまべん wp7データ保存

46

( 参考 ) サンプルコード 資料と合わせて公開する予定

https://skydrive.live.com/?cid=b43f4832f5bafbb9&sc=documents&id=B43F4832F5BAFBB9%211286

いろいろひどいのでリファクタさせてください…

分離ストレージへの保存 StorageSample

Live SDK + Twitter Client LiveSDKSample2011/10/15 すまべん関東 #15

Page 47: 111015 すまべん wp7データ保存

472011/10/15 すまべん関東 #15

ご清聴ありがとうございました

Page 48: 111015 すまべん wp7データ保存

482011/10/15 すまべん関東 #15