最近のアクセス:
データベースを事前にロードしてオフライン モバイル アプリケーションを作成する方法

多くの場合、ローカルデータベースにデータをロードした状態でオフライン モバイル アプリケーションをインストールする必要があります。また、最初の同期に長時間かかる場合や、初期データが将来的に変化しない場合があります。このような場合は、開発時にデータベースの事前ロードメカニズムを使用できます。
このチュートリアルは、スマートデバイス用オフラインアプリケーションでデータベースの事前ロードを行う開発者のための簡単なクイックガイドです。
例として、EventDay サンプルのオフラインブランチを使用します。

始める前に...

重要: アプリケーションのデータベースをプリロードするには、シミュレーターかデバイスを使用する必要があります。同じシミュレーターやデバイスを使用してもう一度同期することはできません。
詳細は、「事前ロードされたハッシュ」のセクションを参照してください。

iOS アプリケーション

手順 1: データベースの作成

データを事前にロードする最初の手順として、データベースを作成します。
1. Xcode でプロジェクトを開きます。
2. iOS シミュレーターでアプリケーションを実行し、データ同期処理が実行されるまで待ちます。
3. 同期が完了すると、Xcode のコンソールに次のようなメッセージが表示されます (Xcode でのデバッグの詳細については、こちらを参照してください):
---------------------------------------
-- DATABASE SYNCHRONIZATION FINISHED --

Database file: /Users/%USERNAME%/Library/Application Support/iPhone Simulator/%IOS_TARGET%/Applications/%APP_RANDOM_ID%/Documents/EventDay.sqlite

Hashes file: /Users/%USERNAME%/Library/Application Support/iPhone Simulator/%IOS_TARGET%/Applications/%APP_RANDOM_ID%/Documents/EventDay_hashes.json

BLOB data zip file: /Users/%USERNAME%/Library/Application Support/iPhone Simulator/%IOS_TARGET%/Applications/%APP_RANDOM_ID%/Documents/GXBlobData.zip
---------------------------------------
ここで %USERNAME% はユーザー名、%IOS_TARGET% は iPhone シミュレーターのターゲット、たとえば "7.0.3" です。
4.  この 3 ファイルをコピーして Xcode プロジェクトに含めます。ファイル名は %APP_NAME%.sqlite%APP_NAME%_hashes.json、および GXBlobData.zip です。ここで %APP_NAME% はアプリケーションの名前です。
注: これらのファイルが見つからない場合は、「オフライン データベース ファイルを検索する方法」を参照してください。

手順 2: プロジェクトに事前ロードのデータベースを追加

1. Xcode で、 [ Build Phases ] に移動し、 [ Copy Bundle Resources ] セクションを展開します。
イメージ:23756.jpg
2. コピーしたファイルをプロジェクトに追加します。
イメージ:23758.jpg
重要: アプリケーションで認識できるように、ファイル名は変更しないようにします。
3. Xcode でプロジェクトをビルドします。アプリケーションを実行するとき、同期処理によってデータが取得されません。

Android アプリケーション

手順 1: データベースの作成

データを事前にロードする最初の手順として、データベースを作成します。
1. root 化した端末がない場合、データベースにアクセスするには、データベースを SD カードに生成するようにテンプレートを変更する必要があります。そのためには、Android のオフラインデータベースのファイルをデバイスカードに格納する方法に示す手順に従います。
2. デバイスを PC に接続し、USB のデバッグを有効にした状態で、logcat を開き、アプリケーションを実行して、データ同期処理が実行されるまで待ちます。
3.  同期が完了すると、logcat に次のようなメッセージが表示されます:
GeneXusApplication: DATABASE SYNCHRONIZATION FINISHED

GeneXusApplication: Database file: /mnt/sdcard0/Android/data/com.artech.eventdayoffline.eventday/EventDay.sqlite

GeneXusApplication: Hashes file: /mnt/sdcard0/Android/data/com.artech.eventdayoffline.eventday/EventDay_hashes.json
4. 両方のファイルをコピーして Android プロジェクトに含めます。ファイル名は %APPNAME%.sqlite%APPNAME%_hashes.json です。ここで %APPNAME% にはアプリケーションの名前が入ります。
アプリケーションに Blob (画像やビデオ) がある場合は、これらもディレクトリー /mnt/sdcard0/Android/data/com.artech.eventdayoffline.eventday/files/blobs にコピーする必要があります。
注: これらのファイルが見つからない場合は、「オフライン データベース ファイルを検索する方法」を参照してください。

手順 2: プロジェクトに事前ロードのデータベースを追加

1. コピーした EventDay.sqlite ファイルの名前を eventday_sqlite (文字を小文字に、「.」を「_」に) 変更し、EventDay_hashes.json を eventday_hashes (文字を小文字にし、拡張子を削除) に変更します。さらに、モジュール名がある場合、その後ろにあるドット 「.」をアンダースコア「_」に置き換えます (modulename_eventday_sqlitemodulename_eventday_hashes のような名前になります)。
2. EventDay_sqlite ファイルと EventDay_hashes ファイルを、生成されたプロジェクトの raw ディレクトリー (\mobile\Android\<メイン>\src\main\res\raw) に、blobs ディレクトリーを assets ディレクトリー (\mobile\Android\<メイン>\assets) に追加します。
重要: アプリケーションで認識できるように、ファイル名は変更しないようにします。
3. セキュリティのため、手順 1.1 の変更内容を元に戻します。
4. GeneXus でアプリケーションをビルドします。アプリケーションを実行すると、同期を実行しなくても、すべてのデータと画像がデバイスに格納されます。

概念の詳細

事前ロードされたハッシュ

アプリケーションのバックエンド (サーバー側) は、{デバイス、アプリケーション} によって同期ハッシュを追跡します。データベースをプリロードする際に、使用されているシミュレーターやデバイスの DeviceId が事前ロードされたデータに対応するハッシュを格納します。
同じシミュレーターやデバイスを使ってもう一度同期する場合には、オリジナルのハッシュがサーバーデータベースから削除され、ほかのデバイスは同期できなくなります。
そのため、事前ロードされたデータベースを生成するためにシミュレーターやデバイスを使用して、もう一度同期する必要はありません。

回避策の 1 つは、GXDEVICERESULT テーブル内の GXDeviceId を変更することで、データベースの事前ロードされたハッシュを識別することです。

そのためには、上記のプロセスで最初の同期を実行した後、次の SQL クエリを実行します:
UPDATE  [ GXDEVICERESULT ]  SET  [ GXDeviceId ]  = "Preloaded Data";
:
  • デバイスの識別子はデバイスが送信するものであるため、UUID ですが、GXDeviceId フィールドは Character (127) として定義されています。
  • 更新文は、GXDEVICERESULT テーブルにあるすべてのレコードを更新します。データベースに既に実動データがある場合には、GXDeviceId でフィルタリングする必要があります。これを行うには、シミュレーターやデバイスを使って、たとえば、同期 HTTP 要求のヘッダーを調べることで、識別子を見つける必要があります。






サブページ
Created: 15/01/07 22:47 by Admin Last update: 21/05/21 03:31 by Admin
カテゴリ
Powered by GXwiki 3.0