従来のオンライン HTML5 技術は、ネットワーク環境の影響を受けやすく、 HTML5 ページのパフォーマンスが低下する可能性があります。さまざまなサービスをオフラインパッケージとしてカプセル化し、リリースプラットフォームを介して配信することで、クライアントリソースを更新できます。
このトピックでは、オフラインパッケージの管理方法について説明します。
前提条件
クライアントプロジェクトは、SDK が追加された後、NebulamPaaSBiz.framework を統合しています。
オフラインパッケージの生成
.amr オフラインパッケージを生成するには、フロントエンド .zip パッケージをビルドし、.amr パッケージをオンラインで生成する必要があります。詳細については、「オフラインパッケージの生成」をご参照ください。
オフラインパッケージの読み込み
2 つの方法があります。
オフラインパッケージのプリセット
ホームページとログインページは、ネットワークの状態に関係なく、迅速に読み込む必要があります。この種のリソースはオフラインパッケージとしてカプセル化し、プロジェクトにプリセットすることで、リソースをオフラインで迅速に読み込むことができます。
次の手順を実行します。
たとえば、
DemoCustomPresetApps.bundleのように、独立したバンドルを作成します。リリースプラットフォームからダウンロードしたオフラインパッケージとh5_json.jsonファイルをバンドルに追加します。
注: 現在、リリースプラットフォームでは、単一のオフラインパッケージのh5_json.json構成ファイルをダウンロードできます。複数のオフラインパッケージをプリセットする場合は、 JSON ファイルのdata配列をマージします。コンテナを初期化するときに、
initNebulaWithCustomPresetApplistPathインターフェースを呼び出し、プリセットオフラインパッケージのパスを手順 1 で作成したバンドルとして設定します。- (void)application:(UIApplication *)application beforeDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // rpc を初期化する [MPRpcInterface initRpc]; // コンテナを初期化する // [MPNebulaAdapterInterface initNebula]; // JSAPI パスとプリセットオフラインパッケージ情報をカスタマイズする NSString *presetApplistPath = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"DemoCustomPresetApps.bundle/h5_json.json"] ofType:nil]; NSString *appPackagePath = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"DemoCustomPresetApps.bundle"] ofType:nil]; NSString *pluginsJsapisPath = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"DemoCustomPlugins.bundle/Poseidon-UserDefine-Extra-Config.plist"] ofType:nil]; [MPNebulaAdapterInterface initNebulaWithCustomPresetApplistPath:presetApplistPath customPresetAppPackagePath:appPackagePath customPluginsJsapisPath:pluginsJsapisPath]; }- プリセットされていないオフラインパッケージの読み込みと同様に、対応するページに移動するときに、Nebula コンテナによって提供されるインターフェースメソッドを呼び出して、オフラインパッケージを読み込みます。
- (void)openPresetPackage { [[MPNebulaAdapterInterface shareInstance] startH5ViewControllerWithNebulaApp:@{@"appId":@"20180910"}]; }
リモートオフラインパッケージの読み込み
クライアントにオフラインパッケージをプリセットするだけでなく、リリースプラットフォームでオフラインパッケージを動的にリリースすることもできます。その後、クライアントはリモートオフラインパッケージを直接読み込み、多数のプリセットオフラインパッケージによってクライアントのパッケージサイズが過度に大きくなるのを防ぎます。
次の手順を実行します。
アプリの起動後、パッケージ情報をプリロードし、オフラインパッケージをダウンロードして、オフラインパッケージを開いたときに空白の画面が表示されるのを防ぐことができます。
コードサンプル
[[MPNebulaAdapterInterface shareInstance] requestAllNebulaApps:^(NSDictionary *data, NSError *error) { NSLog(@"[mpaas] nebula rpc data :%@", data); }];インターフェースメソッド
@interface MPNebulaAdapterInterface : NSObject /** * ローカルオフラインパッケージ情報を完全に更新します。 * * @param finish: コールバックが完了しました。 * */ - (void)requestAllNebulaApps:(NAMRequestFinish)finish; /** * 単一のアプリリクエスト * * @param params: リクエストリスト。{appid:version} の形式です。複数のアプリ ID を転送できます。バージョン番号は最大 4 桁で構成されます (例: 1.0.0.1)。バージョンが設定されていない場合、デフォルトで最新バージョンが有効になります。バージョン番号とのあいまい一致がサポートされています。たとえば、「*」は最新バージョンと一致し、「1.*」は 1 で始まる最新バージョン番号と一致します。 * @param finish: コールバックが完了しました。 */ - (void)requestNebulaAppsWithParams:(NSDictionary *)params finish:(NAMRequestFinish)finish; @end
クライアントの構成が完了したら、リリースプラットフォームからオフラインパッケージをダウンロードできます。詳細については、「配信サービス > オフラインパッケージの管理 > オフラインパッケージのリリース」をご参照ください。
ページにアクセスすると、Nebula コンテナによって提供されるインターフェースメソッドが呼び出されてオフラインパッケージが読み込まれ、リリースプラットフォームで配信されたオフラインパッケージが表示されます。
コードサンプル
- (void)openPresetPackage { [[MPNebulaAdapterInterface shareInstance] startH5ViewControllerWithNebulaApp:@{@"appId":@"20180910"}]; }インターフェースメソッド
@interface MPNebulaAdapterInterface : NSObject /** * 転送されたオフラインパッケージ情報に基づいて HTML5 コンテナを作成し、自動プッシュによって開きます。 * * @param params: HTML5 コンテナの起動パラメータ。appId は必須です。オプションのパラメータについては、 https://tech.antfin.com/docs/2/85001 にあるリファレンスドキュメントを参照してください。 * */ - (void)startH5ViewControllerWithNebulaApp:(NSDictionary *)params; @end
グローバルリソースパッケージの使用
Nebula グローバルリソースパッケージを使用すると、複数の HTML5 アプリで同じリソースが使用されている場合の冗長性の問題を解決できます (例: React アプリの ReactJS フレームワークコード)。パブリックリソースをグローバルリソースパッケージに配置することで、 HTML5 アプリのサイズを削減できます。次のコードサンプルに示すように、afterDidFinishLaunchingWithOptions メソッドでグローバルオフラインパッケージを構成できます。ここで、7777777 はグローバルリソースパッケージの appId です。
nebulaCommonResourceAppList は、指定された ID を持つオフラインパッケージがグローバルリソースパッケージとして使用されることを HTML5 コンテナに通知するために使用されます。この ID がないと、 HTML5 アプリに組み込まれていても、オフラインパッケージは有効になりません。
```
- (void)application:(UIApplication *)application afterDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[MPNebulaAdapterInterface shareInstance].nebulaCommonResourceAppList = @[@"77777777"];//グローバルリソースパッケージを設定する
}
```ページの読み込み速度を上げるために、グローバルリソースパッケージをプリセットすることをお勧めします。これは、MDS プラットフォームを介して更新することもできます。
オフラインパッケージの動的更新
mPaaS は、強力な動的更新機能を提供します。リリースプラットフォームで新しいバージョンのオフラインパッケージを配信して、クライアントの対応するページを更新できます。詳細については、「配信サービス > オフラインパッケージの管理 > オフラインパッケージのリリース」をご参照ください。