Transcript
1
WP7 でのデータ保存いろいろ
田中 孝佳 (@tanaka_733)
2011/10/15 すまべん関東 #15
2
自己紹介 ERP パッケージベンダーの研究部門
クラウドを使っていい感じにする研究 Silverlight +サーバーサイド Java で開発
Silverlight を囲む会東京 のスタッフしてます Silverlight 好きが高じて WP7 にはまる
IS12T 持ってます 1 台前から Windows AU (E30HT) アプリも 1 つリリース (SimpleCompass)
ブログ:銀の光と藍い空 http://techblog.hilife-jp.info/
2011/10/15 すまべん関東 #15
3
今日のテーマ WP7 でデータを保存しよう
データ保存はプログラミングの基本…多分 でも、 WP7 ではアプリから
ファイルシステムにアクセスできない データを保存する方法を紹介します
2011/10/15 すまべん関東 #15
4
分離ストレージへの保存WP7 でのデータ保存の基本
2011/10/15 すまべん関東 #15
5
分離ストレージ(Isolated Storage)
Web 版 Silverlight にもある機能 こちらはユーザーのアクセス許可が必要
アプリケーションごとのセキュアな保存 フォルダ・ファイルという階層が持てる 任意の形式で保存可能
バイナリ、 XML 、 JSON etc 容量は仕様上は無制限
2011/10/15 すまべん関東 #15
6
どんなときに使うの? 設定データなどを永続的に 非 Active 時の View の状態などを一時的
に View の状態の保存とは?
Windows Phone では非 Active 時にメモリが解放される可能性があります
戻るボタンを押された時とか バックグランドで一部の処理はできます
View の状態を復元するために保存
2011/10/15 すまべん関東 #15
( 参考 )Windows Phone 7 のトゥームストーン処理http://msdn.microsoft.com/ja-jp/magazine/hh148153.aspx
7
分離ストレージの使い方 (1) IsolatedStorageSetting クラスを使用
保存
検索
2011/10/15 すまべん関東 #15
8
分離ストレージの使い方 (2) IsolatedStorageFile クラスを使用
リスト
ファイル作成
2011/10/15 すまべん関東 #15
9
保存形式をちょっと考察 .NET と相性がいいのは XML
デフォルトでサポートされてるし、LINQ to XML あるし
その次は JSON DataContractJsonSerializer がある XML より軽量
でも、バイナリに比べると重いですね 可読性はあるけど、
分離ストレージ内では意味がない
2011/10/15 すまべん関東 #15
10
Sterling がある バイナリシリアル化で保存サイズ圧縮 シリアル化をカスタマイズ可能
暗号化 カスタムのシリアル化
クエリの高速化 LINQ でアクセスできる
2011/10/15 すまべん関東 #15
( 参考 ) Windows Phone 7 の分離ストレージ用の Sterlinghttp://msdn.microsoft.com/ja-jp/magazine/hh205658.aspx
11
SQL Server CE の利用モバイルでも RDBMS 使えるよ!
2011/10/15 すまべん関東 #15
12
RDBMS も使えるよ SQL Server CE が使えます
組み込み系とか、簡易 DB としておなじみ 自称 SQL のプロがいいそうなこと
が・・・
2011/10/15 すまべん関東 #15
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・・・
14
WP7 では SQL が書けません Code First な LINQ to SQL のみ Entity クラスを定義して、
そのクラスを利用してテーブルを作成 CRUD 操作も同様
2011/10/15 すまべん関東 #15
15
SQL Sever CE を使う準備 参照を追加
using 節を追加 ( 拡張メソッドのため )
2011/10/15 すまべん関東 #15
using System.Data.Linq;using System.Data.Linq.Mapping;using Microsoft.Phone.Data.Linq.Mapping;
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
17
接続
2011/10/15 すまべん関東 #15
接続文字列
DataContext
DB が無い時 ( 初回起動時 )
DB 作成
初期データ作成
更新をコミット
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 より抜粋
19
DataContext
2011/10/15 すまべん関東 #15
DataContext を継承
接続文字列を渡す
Table を定義Entity クラスを指定
20
Enity クラス
2011/10/15 すまべん関東 #15
[Table] 属性2 つのインタフェース
は後述
Column属性を定義
インターフェースのための定型文
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
22
( 参考 ) INotifyPropertyChanged
INotifyPropertyChanged MVVM において、 ViewModel
もしくは Model が実装することが多い プロパティの変更通知をイベントとして飛ば
す そのため、 setter 内で変更前後の値を比べ
ている
2011/10/15 すまべん関東 #15
23
( 参考 ) INotifyPropertyChanging
INotifyPropertyChanging INotifyPropertyChanged はプロパティが変更された後にイベントを飛ばすが、こちらは変更される前に飛ばす
LINQ to SQL において、変更前後の値を持つ必要があるが、これを実装していると、必要な時だけ変更前の値を持つ
実装していない場合は、常に持っているため、メモリ使用量が増えてしまう
2011/10/15 すまべん関東 #15
24
アプリには VerUP がつきもの DB のスキーマ変更しますね
基本はテーブル・カラムの追加のみ WP7 での対応
DB の VerCount を取得・設定できる現在の Ver と比べて古ければ更新処理をする
2011/10/15 すまべん関東 #15
25
WP7 の DB での VerUP サンプル
2011/10/15 すまべん関東 #15
Ver2 から 3 への更新
Ver1 から 2 への更新
アプリのバージョンを定義
26
SkyDrive への保存クラウド連携
2011/10/15 すまべん関東 #15
27
どうしても携帯の外に保存したい
今までの方法は携帯の中のみ しかもそのアプリからしか見えない
携帯の外に保存したい時は?画像なら Picutures経由で
SkyDrive に保存できる でも普通のファイルを保存したい時は?
2011/10/15 すまべん関東 #15
28
SkyDrive に保存してみよう 必ず持ってる Live ID そして SkyDrive Windows Live SDK で API 操作可能 ただし、 OS の LiveID とは別認証
パスワード入力の手間がかかる別のユーザーの SkyDrive にも保存可能
API経由なので他のスマフォ・ PC アプリ・Web アプリでも可能
2011/10/15 すまべん関東 #15
29
OAuth認証が必要 OAuth の実装ですか・・・
OAuth認証自体はライブラリを使えても、ログイン UI の表示とかも面倒いですね
2011/10/15 すまべん関東 #15
30
Live SDK Developer Preview Live SDK を Windows Phone から手軽
に使えるライブラリ Developer Preview です
API がこなれていなかったりする プロジェクトのサイト
https://connect.microsoft.com/site1226/
2011/10/15 すまべん関東 #15
31
Live SDK への登録 Live SDK を呼び出すアプリを登録します Live Connect app management site
https://manage.dev.live.com/
2011/10/15 すまべん関東 #15
32
Live SDK への登録
2011/10/15 すまべん関東 #15
33
Live SDK への登録 API 設定をから Mobile client app を
Yes に変更 Client ID をコピー
2011/10/15 すまべん関東 #15
34
Live SDK の使用 (1) 参照に追加
Microsoft.Live Microsoft.Live.Controls
SignInButton を UI に追加 ブラウザ表示とか面倒な処理を
書かなくていい!!
2011/10/15 すまべん関東 #15
35
Live SDK の使用 (2) 以下の要素を XAML に指定 Scopes
操作を許可する範囲 (認可の範囲 ) ClientId
登録時に発行されて、コピーしたもの RedirectUri
Phone の場合使わない。一応、下記を指定 https://oauth.live.com/desktop
SessionChanged イベントハンドラ
2011/10/15 すまべん関東 #15
36
Live SDK のサンプル 設定画面で SignIn する ( おまけ )Twitter から TL を取得 SkyDrive のフォルダをリスト表示 フォルダをダブルタップしたら
xml ファイルを特定のディレクトリに保存
2011/10/15 すまべん関東 #15
37
SingIn 処理 SignInButton の
SessionChanged イベントを処理する
2011/10/15 すまべん関東 #15
38
フォルダ取得 filter=folders,albums で取得返値は IDictionary<string, object>
2011/10/15 すまべん関東 #15
39
フォルダ取得 (2) IDictionary<string, object> を変換
汚い Rx(LINQ) ですみません m(__)m
2011/10/15 すまべん関東 #15
40
ファイルアップロード FolderID 、ファイル名、ファイルコンテ
ンツ (Stream) を渡します
2011/10/15 すまべん関東 #15
41
注意!!! ファイル名が画像・ドキュメント以外の
拡張子だと失敗することがあるようです http://
social.msdn.microsoft.com/Forums/en-AU/messengerconnect/thread/9a7296e6-6d9e-41a1-86e1-376b516cb5fe
一応、なおすと言ってます 今回は拡張子を jpg に偽装することで泣く泣く超暫定対応
2011/10/15 すまべん関東 #15
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
43
付録そのほか
2011/10/15 すまべん関東 #15
44
( 参考 ) 要望を MS に伝えられます!
開発者向け要望サイト「 WPDev Feedback 」の日本語版 http://
wpdev.uservoice.com/forums/136286-app-platform-japan
2011/10/15 すまべん関東 #15
45
( 参考 ) 書籍 プログラミング Windows Phone
Windows Phone ゲームプログラミング
2011/10/15 すまべん関東 #15
レビューさせて頂きました
46
( 参考 ) サンプルコード 資料と合わせて公開する予定
https://skydrive.live.com/?cid=b43f4832f5bafbb9&sc=documents&id=B43F4832F5BAFBB9%211286
いろいろひどいのでリファクタさせてください…
分離ストレージへの保存 StorageSample
Live SDK + Twitter Client LiveSDKSample2011/10/15 すまべん関東 #15
472011/10/15 すまべん関東 #15
ご清聴ありがとうございました
482011/10/15 すまべん関東 #15
top related