オフライン パッケージ管理操作には、HTML5 アプリのプリロード、グローバル リソース パッケージの使用、HTML5 アプリの更新、HTML5 アプリのダウンロード、HTML5 アプリのインストール、アプリ情報の取得、セキュリティ署名の検証、および ローカル アプリ情報の削除 が含まれます。
前提条件
アクセス構成が完了していること。詳細については、「SDK の追加」をご参照ください。
オフライン パッケージが生成されていること。詳細については、「オフライン パッケージの生成」をご参照ください。
HTML5 アプリのプリロード
一般的に、HTML5 アプリを初めて開くときには、オフライン パッケージがダウンロードされていない場合があります。この場合、フォールバック URL を使用してアプリを開く必要があります。
HTML5 アプリのプリロードには、クライアントによってリリースされたインストール パッケージに、使用可能な HTML5 アプリをプリインストールすることが含まれます。プリインストールされたアプリを初めて開くとき、ユーザーはオフライン パッケージ リソースを直接使用できるため、ユーザー エクスペリエンスが向上します。
コア HTML5 アプリのみをプリインストールし、使用率の低いアプリはプリインストールしないことをお勧めします。
HTML5 アプリをプリロードするには、次の手順を実行する必要があります。
HTML5 アプリ リリース バックエンドから、HTML5 アプリ構成ファイル
.jsonと必要なオフライン パッケージをダウンロードします。.jsonファイルとオフライン パッケージをプロジェクトのassetディレクトリに追加します。アプリの起動時に、プリロード コードを呼び出してアプリをインストールします。コード サンプルは次のとおりです。
MPNebula.loadOfflineNebula("h5_json.json", new MPNebulaOfflineInfo("90000000_1.0.0.6.amr", "90000000", "1.0.0.6"));説明このメソッドはブロック型の呼び出しメソッドです。メインスレッドに埋め込まれたオフライン パッケージ メソッドを呼び出さないでください。
このメソッドは 1 回だけ呼び出すことができます。複数回呼び出された場合、最初の呼び出しのみが有効になります。したがって、必要なすべてのオフライン パッケージに関する情報を一度に入力する必要があります。
複数の amr パッケージが埋め込まれている場合は、ファイルがすでに存在することを確認してください。存在しない場合、他の埋め込まれたオフライン パッケージは失敗します。
グローバル リソース パッケージの使用
Nebula グローバル リソース パッケージは、複数の HTML5 アプリが同じリソースを使用することによって発生する冗長性に対処します。たとえば、React アプリは ReactJS フレームワーク コードを使用します。パブリック リソースをグローバル リソース パッケージに含めて、HTML5 アプリのサイズを縮小できます。
一般に、グローバル リソース パッケージはプロジェクト用に事前に設定する必要があり、後続の更新は HTML5 アプリ バックエンドを通じて配信できます。
次のコードサンプルでは、アプリ ID(appId) 66666692 を持つリソースパッケージをグローバルリソースパッケージとして指定し、assets/nebulaPreset/66666692 オフラインパッケージをプリセットしています。
getCommonResourceAppList: 指定された ID のオフライン パッケージをグローバル リソース パッケージとして使用することを HTML5 コンテナーに通知します。この ID が構成されていない場合、このオフライン パッケージは埋め込まれていても有効になりません。getH5PresetPkg: 埋め込まれたグローバル リソース パッケージのパスとバージョンを指定します。HTML5 コンテナーは、指定されたアセット リソース ディレクトリからリソース パッケージを読み込みます。ただし、サーバー上で新しいバージョンが検出された場合、以前のバージョンのこの埋め込みパッケージは読み込まれません。さらに、前述のloadOffLineNebulaメソッドを使用して、グローバル リソース パッケージをプリセットできます。この場合、このメソッドで埋め込まれたオフライン パッケージのパスとバージョンを指定する必要はありません。説明このメソッドは、HTML5 グローバル リソース パッケージにのみ適用されます。
getTinyCommonApp: ミニアプリのフレームワーク リソース パッケージ ID を返します。グローバル リソース パッケージが HTML5 コンテナーによってのみ使用される場合は、このパブリック リソース パッケージの ID をこのメソッドに書き込まないでください。
参照コード サンプル:
public class H5AppCenterPresetProviderImpl implements H5AppCenterPresetProvider {
private static final String TAG = "H5AppCenterPresetProviderImpl";
// ビジネスのパブリック リソース パッケージ。666666 で始まるのは避けてください
private static final String COMMON_BIZ_APP = "xxxxxxxx";
// ミニプログラム用の特殊リソース パッケージ。ビジネスのために移動しないでください
private static final String TINY_COMMON_APP = "66666692";
// プリセット パッケージのアセット ディレクトリ
private final static String NEBULA_APPS_PRE_INSTALL = "nebulaPreset" + File.separator;
// プリセット パッケージ コレクション
private static final Map<String, H5PresetInfo> NEBULA_LOCAL_PACKAGE_APP_IDS = new HashMap();
static {
H5PresetInfo h5PresetInfo2 = new H5PresetInfo();
// 組み込みディレクトリのファイル名
h5PresetInfo2.appId = TINY_COMMON_APP;
h5PresetInfo2.version = "1.0.0.0";
h5PresetInfo2.downloadUrl = "";
NEBULA_LOCAL_PACKAGE_APP_IDS.put(TINY_COMMON_APP, h5PresetInfo2);
}
@Override
public Set<String> getCommonResourceAppList() {
Set<String> appIdList = new HashSet<String>();
appIdList.add(getTinyCommonApp());
appIdList.add(COMMON_BIZ_APP);
return appIdList;
}
@Override
public H5PresetPkg getH5PresetPkg() {
H5PresetPkg h5PresetPkg = new H5PresetPkg();
h5PresetPkg.setPreSetInfo(NEBULA_LOCAL_PACKAGE_APP_IDS);
h5PresetPkg.setPresetPath(NEBULA_APPS_PRE_INSTALL);
return h5PresetPkg;
}
@Override
public Set<String> getEnableDegradeApp() {
return null;
}
@Override
public String getTinyCommonApp() {
return TINY_COMMON_APP;
}
@Override
public InputStream getPresetAppInfo() {
return null;
}
@Override
public InputStream getPresetAppInfoObject() {
return null;
}
}アプリの起動時に次のコードを呼び出します。
H5Utils.getH5ProviderManager().setProvider(H5AppCenterPresetProvider.class.getName(), new H5AppCenterPresetProviderImpl());HTML5 アプリの更新
デフォルトでは、Nebula は HTML5 アプリが開かれるたびに新しいバージョンがあるかどうかを確認します。サーバーへの負荷を考慮して、確認期間は制限されており、デフォルトでは 30 分です。使用可能な最新バージョンをすぐに確認するには、次のコードを呼び出して更新をリクエストします。一般に、このコードはアプリの起動後またはユーザーのログイン後に呼び出すことができます。
MPNebula.updateAllApp(new MpaasNebulaUpdateCallback(){
@Override
public void onResult(final boolean success, final boolean isLimit, String detailCode) {
super.onResult(success, isLimit);
runOnUiThread(new Runnable() {
@Override
public void run() {
AUToast.makeToast(NebulaAppActivity.this,
success ? R.string.update_success : R.string.update_failure, 2000).show();
}
});
}
});HTML5 アプリのダウンロード
MPNebula API を使用すると、HTML5 アプリを手動でダウンロードできます。
/**
*オフライン パッケージをダウンロードします。
*
* @param appId: オフライン パッケージ ID
* @param mpaasNebulaDownloadCallback: ダウンロード コールバック
*/
public static void downloadApp(final String appId, final MpaasNebulaDownloadCallback mpaasNebulaDownloadCallback)HTML5 アプリのインストール
MPNebula API を使用すると、HTML5 アプリを手動でインストールできます。
/**
*オフライン パッケージをインストールします。
*
* @param appId: オフライン パッケージ ID
* @param mpaasNebulaInstallCallback: インストール コールバック
*/
public static void installApp(final String appId, final MpaasNebulaInstallCallback mpaasNebulaInstallCallback)アプリ情報の取得
H5AppProvider メソッドを呼び出して、HTML5 アプリに関する情報を取得します。
H5AppProvider provider = H5Utils.getProvider(H5AppProvider.class.getName());
AppInfo appInfo = provider.getAppInfo("1000000"); // アプリ構成を取得します。
boolean isInstalled = provider.isInstalled("100000", "1.0.0.0"); // アプリ バージョンがインストールされているかどうか。
boolean isAvailable = provider.isAvailable("100000", "1.0.0.0");// アプリ バージョンのオフライン パッケージが正常にダウンロードされているかどうか。セキュリティ署名の検証
Nebula には、悪意のあるプログラムがデバイスにダウンロードされたオフライン パッケージを改ざんするのを防ぐためのオフライン パッケージ署名検証メカニズムがあります。署名検証を使用するには、MPNebula インターフェースを呼び出します。 10.1.60 以上では、追加のコンテナー構成が必要です。詳細については、「HTML5 コンテナー構成」をご参照ください。
オフライン パッケージを初めて開く前に、この API を呼び出します。そうしないと、公開鍵の初期化に失敗します。公開鍵と秘密鍵については、「HTML5 オフライン パッケージの構成」をご参照ください。
ルートと判断された携帯電話では、クライアントで署名検証が有効になっているかどうかに関係なく、署名検証が強制的に実行されます。
```java
/**
* @param publicKey: 署名検証用の公開鍵
*/
public static void enableAppVerification(final String publicKey)
```ローカル アプリ情報の削除
Nebula は、ローカル アプリ情報を削除するためのインターフェースを提供します。ローカル アプリ情報が削除されると、クライアント側はアプリが再度開かれたときにサービス側にリクエストを送信してローカル アプリをダウンロードおよび更新します。
public class MPNebula {
// appId は、オフライン パッケージまたはミニプログラムの ID です
public static boolean deleteAppInfo(String appId);
}この API でサポートされている最低ベースライン バージョンは、それぞれ 10.1.68.8 と 10.1.60.14 です。