従来のオンライン H5 ページのパフォーマンスは、多くの場合、ネットワーク状態に影響されます。この問題に対処するために、さまざまなサービスをオフラインパッケージにパッケージ化し、リリースプラットフォームを使用してクライアントリソースへの更新を配信できます。
このトピックでは、オフラインパッケージの管理方法について説明します。
前提条件
SDK を追加した後、NebulamPaaSBiz.framework がクライアントプロジェクトに統合されていることを確認してください。
オフラインパッケージの生成
.amr オフラインパッケージを生成するには、まずフロントエンドの .zip パッケージをビルドし、次にオンラインで .amr パッケージを生成します。詳細については、「オフラインパッケージの生成」をご参照ください。
オフラインパッケージの読み込み
オフラインパッケージは、クライアントにプリセットされているかどうかに応じて、2 つの方法で読み込むことができます。
オフラインパッケージのプリセット
ホームページやログインページなどのページは、ネットワークの状態に関係なく、迅速に読み込む必要があります。これを実現するには、これらのリソースをオフラインパッケージにまとめ、プロジェクトにプリセットします。これにより、アプリケーションがオフラインの場合でも、リソースが迅速に読み込まれるようになります。
次の手順を実行します。
DemoCustomPresetApps.bundleのような個別のバンドルを作成します。リリースプラットフォームからダウンロードした.amrオフラインパッケージとh5_json.jsonファイルをこのバンドルに追加します。
説明現在、リリースプラットフォームでは、単一のオフラインパッケージの
h5_json.json設定ファイルのみダウンロードをサポートしています。複数のオフラインパッケージをプリセットする場合は、JSON ファイルのデータ配列に手動でマージする必要があります。コンテナーを初期化する際に、
initNebulaWithCustomPresetApplistPathメソッドを呼び出し、プリセットされたオフラインパッケージのパスを前のステップで作成したバンドルに設定します。- (void)application:(UIApplication *)application beforeDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Initialize rpc [MPRpcInterface initRpc]; // Initialize the container // [MPNebulaAdapterInterface initNebula]; // Set the custom JSAPI path and preset offline package information 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"}]; }
リモートオフラインパッケージの読み込み
クライアントにオフラインパッケージをプリセットするだけでなく、リリースプラットフォームを通じてオフラインパッケージを動的にリリースすることもできます。クライアントはリモートのオフラインパッケージを直接読み込むことができます。これにより、多数のオフラインパッケージをプリセットすることによるクライアントパッケージの肥大化を防ぎます。
次の手順を実行します。
アプリケーションの起動後、パッケージ情報をプリロードし、オフラインパッケージをダウンロードします。これにより、パッケージを開くときに空白の画面が表示されるのを防ぎます。
インターフェイスメソッド
@interface MPNebulaAdapterInterface : NSObject /** * Request for a single application * * @param params The list of requests in {appid:version} format. You can pass multiple app IDs. The version number can have up to four segments, such as 1.0.0.1. If you do not specify a version, pass an empty value to use the latest version. Fuzzy matching is supported. For example, '*' matches the latest version, and '1.*' matches the latest version that starts with 1. * @param finish Completion callback */ - (void)requestNebulaAppsWithParams:(NSDictionary *)params finish:(NAMRequestFinish)finish; @end
クライアントの設定後、リリースプラットフォームを通じてオフラインパッケージを配信できます。詳細については、「リアルタイムリリース > オフラインパッケージ管理 > オフラインパッケージのリリース」をご参照ください。
対応するページに入るときに、Nebula コンテナーが提供するメソッドを呼び出してオフラインパッケージを読み込みます。ページは、リリースプラットフォームから配信されたオフラインパッケージを使用します。
サンプルコード
- (void)openPresetPackage { [[MPNebulaAdapterInterface shareInstance] startH5ViewControllerWithNebulaApp:@{@"appId":@"20180910"}]; }インターフェイスメソッド
@interface MPNebulaAdapterInterface : NSObject /** * Creates an H5 container based on the provided offline package information and automatically pushes to open it. * * @param params The startup parameters for the H5 container. The appId parameter is required. For other optional parameters, see the document at https://tech.antfin.com/docs/2/85001. * */ - (void)startH5ViewControllerWithNebulaApp:(NSDictionary *)params; @end
グローバルリソースパッケージの使用
Nebula グローバルリソースパッケージは、複数の H5 アプリケーションが ReactJS フレームワークコードなどの同じリソースを使用する際の冗長性を防ぎます。パブリックリソースをグローバルリソースパッケージに配置することで、個々の H5 アプリケーションのサイズを削減できます。次のサンプルコードに示すように、afterDidFinishLaunchingWithOptions メソッドでグローバルオフラインパッケージを設定できます。このサンプルでは、77777777 はグローバルリソースパッケージのアプリ ID です。
nebulaCommonResourceAppList プロパティは、指定された ID のオフラインパッケージをグローバルリソースパッケージとして使用するように H5 コンテナーに指示します。この ID を設定しない場合、パッケージが組み込まれていても効果はありません。
```
- (void)application:(UIApplication *)application afterDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[MPNebulaAdapterInterface shareInstance].nebulaCommonResourceAppList = @[@"77777777"];// Set the global resource package
}
```ページの読み込み速度を向上させるには、グローバルリソースパッケージをプリセットする必要があります。後から H5 アプリケーションバックエンドを通じて更新を配信することも可能です。
オフラインパッケージの動的更新
mPaaS は強力な動的更新機能を提供します。リリースプラットフォームを通じて新しいバージョンのオフラインパッケージを配信し、クライアント上の対応するページを更新できます。詳細については、「リアルタイムリリース > オフラインパッケージ管理 > オフラインパッケージのリリース」をご参照ください。