狠狠撸

狠狠撸Share a Scribd company logo
Xamarin + Azure Mobile Appsの現実
第2章「オフライン同期」の光とちょっと影
JXUGC #23 Xamarin 無料化一周年記念勉強会!
2017.05.27
株式会社ケイ?ジェイ?システムズ
藤森 智
自己紹介
?名前:藤森 智(ふじもり さとる)
?所属:株式会社ケイ?ジェイ?システムズ
? 電子辞書や金融関係のデータ生成
? 印刷物のデータをクラウドで活用するための開発支援
? 古典データの検索サービス
?Xamarin歴:3年くらい(開発経験がライセンス歴が)
?趣味:料理
? ひたすら刻むかひたすら包むのが好き
? 「レシピもサンプルコードも三回作れば(書けば)自分のもの」
?Twitter:@masatoru
?Blog:http://masatoru.hatenadiary.jp/
オフライン同期とは
?オフライン同期とは
? ネットワークがつながらない環境でもアプリを使えるようにする方法
? 通常はローカルのデータベースを参照する
? オンラインの時に(必要な時に)バックエンドと同期を取る
?オフライン同期の利点
? ローカルのデータベースを参照するのでアプリケーションの応答性が向上する
? ネットワークに問題がある場合でも使用可能な信頼性の高いアプリを作成できる
? ネットワークに接続できない状態でもデータの追加や修正を可能にする
? 複数のデバイス間でデータを同期させ、同じレコードが2つのデバイスによって変更されたと
きに競合を検出する。
? 待ち時間の長いネットワークや従量制ネットワークの使用を制限する
https://docs.microsoft.com/ja-jp/azure/app-service-mobile/app-service-mobile-offline-data-sync
デモ
?環境
? バックエンド:Win+VS2017でデバッグ
? Xamarin.Forms:VisualStudio For Mac + iOSシミュレータでデバッグ
? Parallels Desktop for Mac
?https://github.com/masatoru/OfflineSyncSample
(多分Androidでも動作します。未確認でごめんなさい。)
?実際に同期処理をやってみる
→オフラインでも動くよー
オフライン同期の実装方法
?バックエンド側
1. VS2017→Azure Mobile Appテンプレートから作成
2. TableControlerによる実装
3. テーブルコントローラー機能の追加(AddTablesWithEntityFramework)
?Xamarin.Forms側
1. Azure Mobile Client SDK / Azure Mobile SQLiteStoreを追加(nuget)
2. SDKの初期化コードを記述(iOSのみ)
3. Modelを定義(SQLDatabaseと合わせる)
4. SDKを使用したManagerクラスの作成
同期処理、クライアントのストアのデータ取得
https://docs.microsoft.com/ja-jp/azure/app-service-mobile/app-service-mobile-xamarin-forms-get-
started-offline-data
SharpProxyを使おう
?ローカルのポートを外部のポートにすり替えるツール
?https://github.com/jocull/SharpProxy
?Mac側からPostmanで動作確認
SQLiteのファイルが作成される場所
?シミュレータのフォルダの場所
~/Library/Developer/CoreSimulator/Devices
?.default_created.plist にデバイスの一覧とフォルダ名が記載されている
?Finderでは探せない(謎)
?コンソールで探す(下記はSQLiteのファイルを削除する方法)
$ cd ~/Library/Developer/CoreSimulator/Devices
$ cd 17EC55D3-2F14-43AD-AF7A-xxxxxxxxxx
$ find . -name 'localstore.db' -print | xargs rm
?SQLiteの閲覧
? DB Browser for SQLite(Mac)
? SQLite / SQLServer Compact Toolbox(VSの拡張機能)
Connectivity Pluginを使おう
?プラグインを使うとネットワークの接続状態の検知や取得できる
?「 Connectivity Plugin for Xamarin and Windows 」をNugetから取得
?オフラインでも正常に動作していることを確認するツールとして使える
?使い方は簡単
Text = CrossConnectivity.Current.IsConnected ?“つながってるよ”:“オフラインだよ";
Text = await CrossConnectivity.Current.IsReachable(“http://xxxxx.jp”)
?“URLに到達したよ”:“そんなURLはないよ";
?他にも種別(Wifi,Bluetooth)の取得や状態(つながったとか切れたとか)を取得できたりする
ちょっと影の話
?VS2017のTableControllerがスキャフォールディングから作成できない
http://bit.ly/2r1kgUV(修正された?)
?リレーショナルなテーブルに対応していない
1対nのようなやつは無理
?AzureSearchなどのサービスとの組み合わせ
使えないこともないけど完全な“オフライン同期機能を実装!”とは言えない
まとめ
?オフライン同期の実装は簡単
?ローカルでバックエンドとXamarinをやるときはSharpProxyを使おう
?SQLiteのフォルダの場所や閲覧方法を知っておこう
?ネットワークの状態の管理はConnectivity Pluginを使おう
最後に
?App Mobile Appsはいいぞ!
?Xamarinはいいぞ!2017
?JXUGはいいぞ!2017
?各種Xamarin本はいいぞ!
ご清聴ありがとうございました。

More Related Content

Xamarin + Azure Mobile Appsの現実(第2章)