111015 すまべん wp7データ保存

1,329 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,329
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

111015 すまべん wp7データ保存

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

×