すべてのプロダクト
Search
ドキュメントセンター

Mobile Platform as a Service:オフライン パッケージの管理

最終更新日:Jan 17, 2025

オフライン パッケージ管理操作には、HTML5 アプリのプリロードグローバル リソース パッケージの使用HTML5 アプリの更新HTML5 アプリのダウンロードHTML5 アプリのインストールアプリ情報の取得セキュリティ署名の検証、および ローカル アプリ情報の削除 が含まれます。

前提条件

  • アクセス構成が完了していること。詳細については、「SDK の追加」をご参照ください。

  • オフライン パッケージが生成されていること。詳細については、「オフライン パッケージの生成」をご参照ください。

HTML5 アプリのプリロード

一般的に、HTML5 アプリを初めて開くときには、オフライン パッケージがダウンロードされていない場合があります。この場合、フォールバック URL を使用してアプリを開く必要があります。

HTML5 アプリのプリロードには、クライアントによってリリースされたインストール パッケージに、使用可能な HTML5 アプリをプリインストールすることが含まれます。プリインストールされたアプリを初めて開くとき、ユーザーはオフライン パッケージ リソースを直接使用できるため、ユーザー エクスペリエンスが向上します。

説明

コア HTML5 アプリのみをプリインストールし、使用率の低いアプリはプリインストールしないことをお勧めします。

HTML5 アプリをプリロードするには、次の手順を実行する必要があります。

  1. HTML5 アプリ リリース バックエンドから、HTML5 アプリ構成ファイル .json と必要なオフライン パッケージをダウンロードします。

  2. .json ファイルとオフライン パッケージをプロジェクトの asset ディレクトリに追加します。

  3. アプリの起動時に、プリロード コードを呼び出してアプリをインストールします。コード サンプルは次のとおりです。

    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(appId66666692 を持つリソースパッケージをグローバルリソースパッケージとして指定し、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 です。