オフラインパッケージの管理には、H5 アプリケーションのプリセット、更新、ダウンロード、インストール、削除が含まれます。その他の操作には、グローバルリソースパッケージの使用、アプリケーション情報の取得、セキュリティ署名の検証などがあります。
前提条件
統合設定を完了していること。詳細については、「SDK の追加」をご参照ください。
オフラインパッケージを生成していること。詳細については、「オフラインパッケージの生成」をご参照ください。
H5 アプリケーションのプリセット
通常、H5 アプリケーションを初めて開くとき、オフラインパッケージのダウンロードが完了していない場合があります。この場合、アプリケーションはフォールバック URL を使用して開きます。
H5 アプリケーションのプリセットは、クライアントでリリースされたインストールパッケージに利用可能な H5 アプリケーションをプリインストールするのと似ています。ユーザーがプリインストール済みのアプリケーションを初めて開くと、アプリケーションはオフラインパッケージのリソースを直接使用できます。これにより、ユーザーエクスペリエンスが向上します。
コア H5 アプリケーションのみをプリセットしてください。頻繁に使用されないアプリケーションのプリセットは避けてください。
H5 アプリケーションをプリセットするには、次の手順を実行します。
H5 アプリケーションの公開コンソールから、プリセットする H5 アプリケーションの
.json設定ファイルとオフラインパッケージをダウンロードします。プロジェクトの
assetフォルダに.jsonファイルとオフラインパッケージを追加します。アプリケーションの起動時に、プリセットコードを呼び出してアプリケーションをインストールします。次のコードに例を示します。
MPNebula.loadOfflineNebula("h5_json.json", new MPNebulaOfflineInfo("90000000_1.0.0.6.amr", "90000000", "1.0.0.6"));説明これはブロッキングコールです。ビルトインオフラインパッケージのメソッドをメインスレッドで呼び出さないでください。
このメソッドは一度しか呼び出せません。複数回呼び出した場合、最初の呼び出しのみが有効です。したがって、プリセットするすべてのオフラインパッケージの情報を一度の呼び出しで渡す必要があります。
複数のビルトイン .amr パッケージがある場合は、ファイルが存在することを確認してください。ファイルが存在しない場合、他のビルトインオフラインパッケージのインストールは失敗します。
グローバルリソースパッケージの使用
Nebula グローバルリソースパッケージは、複数の H5 アプリケーションが同じリソースを使用する際に発生する冗長性の問題を解決します。たとえば、React アプリケーションは ReactJS フレームワークコードを使用します。パブリックリソースをグローバルリソースパッケージに入れることで、H5 アプリケーションのサイズを削減できます。
通常、プロジェクトにはグローバルリソースパッケージをプリセットする必要があります。その後の更新は、引き続き H5 アプリケーションコンソールから配信できます。
次のコード例では、アプリケーション ID (appId) が 66666692 のオフラインパッケージをグローバルリソースパッケージとして指定します。また、assets/nebulaPreset/66666692 オフラインパッケージもプリセットします。各メソッドの説明は次のとおりです。
getCommonResourceAppList:指定された ID のオフラインパッケージがグローバルリソースパッケージであることを H5 コンテナーに通知します。この ID を設定しない場合、ビルトインオフラインパッケージが含まれていても有効になりません。getH5PresetPkg:ビルトインのグローバルリソースパッケージのパスとバージョンを指定します。H5 コンテナーは、指定されたアセットリソースフォルダからリソースパッケージをロードします。ただし、サーバーサイドでより新しいバージョンが見つかった場合、古いバージョンのビルトインパッケージはロードされません。前述のloadOffLineNebulaメソッドを使用してグローバルリソースパッケージをプリセットすることもできます。その場合、このメソッドでビルトインオフラインパッケージのパスとバージョンを設定する必要はありません。説明このメソッドは H5 グローバルリソースパッケージにのみ適用されます。
getTinyCommonApp:ミニアプリのフレームワークリソースパッケージ ID のみを返します。グローバルリソースパッケージが H5 アプリケーションでのみ使用される場合は、このメソッドにパブリックリソースパッケージ 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());H5 アプリケーションのダウンロード
MPNebula は、H5 アプリケーションを手動でダウンロードするためのインターフェイスを提供します。
/**
* オフラインパッケージのダウンロード
*
* @param appId オフラインパッケージの ID
* @param mpaasNebulaDownloadCallback ダウンロードコールバック
*/
public static void downloadApp(final String appId, final MpaasNebulaDownloadCallback mpaasNebulaDownloadCallback)H5 アプリケーションのインストール
MPNebula は、H5 アプリケーションを手動でインストールするためのインターフェイスを提供します。
/**
* オフラインパッケージのインストール
*
* @param appId オフラインパッケージの ID
* @param mpaasNebulaInstallCallback インストールコールバック
*/
public static void installApp(final String appId, final MpaasNebulaInstallCallback mpaasNebulaInstallCallback)アプリケーション情報の取得
`H5AppProvider` のメソッドを呼び出して、H5 アプリケーションに関する情報を取得できます。
H5AppProvider provider = H5Utils.getProvider(H5AppProvider.class.getName());
AppInfo appInfo = provider.getAppInfo("10000000"); // アプリケーション設定の取得
boolean isInstalled = provider.isInstalled("10000000", "1.0.0.0"); // 特定のバージョンのアプリケーションがインストールされているかどうかの確認
boolean isAvailable = provider.isAvailable("10000000", "1.0.0.0"); // 特定のバージョンのアプリケーションのオフラインパッケージがダウンロードされているかどうかの確認セキュリティ署名の検証
Nebula には、悪意のあるプログラムがデバイスにダウンロードされたオフラインパッケージを改ざんするのを防ぐための、オフラインパッケージ署名検証メカニズムがあります。このメカニズムを有効にするには、MPNebula インターフェイスを呼び出して署名検証パラメーターを設定します。ベースライン 10.1.60 以降を使用する場合は、コンテナー設定も有効にする必要があります。詳細については、「H5 コンテナーの設定」をご参照ください。
初めてオフラインパッケージを開く前に
MPNebulaインターフェイスを呼び出してください。そうしないと、公開鍵の初期化に失敗します。公開鍵と秘密鍵の詳細については、「オフラインパッケージの設定 > キー管理」をご参照ください。クライアントで署名検証が有効になっているかどうかに関係なく、root 化されていると識別されたデバイスでは強制的に実行されます。
/** * @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 です。