Os pacotes offline permitem agrupar páginas H5 para carregamento local, evitando o impacto no desempenho causado por condições de rede ruins. Entregue atualizações de pacotes aos clientes pela plataforma de publicação.
Gerencie pacotes offline das seguintes maneiras:
Pré-requisitos
Certifique-se de integrar o NebulamPaaSBiz.framework ao projeto do cliente após adicionar o SDK.
Gerar um pacote offline
Para gerar um pacote offline .amr, crie um pacote frontend .zip e gere o pacote .amr online. Para mais informações, consulte Gerar um pacote offline.
Carregar um pacote offline
Carregue um pacote offline de duas formas, dependendo se ele está pré-definido no cliente:
Pré-definir um pacote offline
Páginas como a inicial ou a de login devem carregar rapidamente, independentemente das condições de rede. Agrupe esses recursos em um pacote offline e pré-defina-o no projeto para garantir o carregamento mesmo com o aplicativo offline.
Execute as etapas a seguir:
-
Crie um bundle separado, como
DemoCustomPresetApps.bundle. Adicione o pacote offline.amre o arquivoh5_json.jsonbaixado da plataforma de publicação a esse bundle.
NotaAtualmente, a plataforma de publicação permite baixar o arquivo de configuração
h5_json.jsonapenas para um único pacote offline. Se você pré-definir vários pacotes offline, mescle-os manualmente no array de dados do arquivo JSON. -
Ao inicializar o contêiner, chame o método
initNebulaWithCustomPresetApplistPathe defina o caminho do pacote offline pré-definido para o bundle criado na etapa anterior.- (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]; } -
Assim como no carregamento de um pacote offline não pré-definido, chame o método fornecido pelo contêiner Nebula para carregar o pacote offline ao acessar a página correspondente.
- (void)openPresetPackage { [[MPNebulaAdapterInterface shareInstance] startH5ViewControllerWithNebulaApp:@{@"appId":@"20180910"}]; }
Carregar um pacote offline remoto
Publique dinamicamente um pacote offline pela plataforma de publicação e carregue-o diretamente no cliente, em vez de pré-defini-lo. Isso evita que o pacote do cliente fique excessivamente grande.
Execute as etapas a seguir:
-
Após iniciar o aplicativo, pré-carregue as informações do pacote e baixe o pacote offline. Essa ação evita a exibição de uma tela em branco ao abrir o pacote.
-
Código de exemplo
[[MPNebulaAdapterInterface shareInstance] requestAllNebulaApps:^(NSDictionary *data, NSError *error) { NSLog(@"[mpaas] nebula rpc data :%@", data); }]; -
Métodos da interface
@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@interface MPNebulaAdapterInterface : NSObject /** * Full update of local offline package information * * @param finish Completion callback * */ - (void)requestAllNebulaApps:(NAMRequestFinish)finish; /** * 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
-
Após configurar o cliente, entregue um pacote offline pela plataforma de publicação. Para mais informações, consulte Real-time Release > Offline Package Management > Publish an offline package.
-
Ao acessar a página correspondente, chame o método fornecido pelo contêiner Nebula para carregar o pacote offline. A página usará então o pacote offline entregue pela plataforma de publicação.
-
Código de exemplo
- (void)openPresetPackage { [[MPNebulaAdapterInterface shareInstance] startH5ViewControllerWithNebulaApp:@{@"appId":@"20180910"}]; } -
Método da interface
@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
-
Usar um pacote de recursos global
Quando vários aplicativos H5 compartilham os mesmos recursos, como código do framework ReactJS, coloque esses recursos em um pacote de recursos global para reduzir o tamanho de cada aplicativo. Configure o pacote offline global no método afterDidFinishLaunchingWithOptions, conforme o código de exemplo a seguir. Neste exemplo, 77777777 é o ID do aplicativo do pacote de recursos global.
A propriedade nebulaCommonResourceAppList especifica qual pacote offline o contêiner H5 usa como pacote de recursos global. Sem essa configuração, o pacote não entrará em vigor, mesmo que seja integrado.
- (void)application:(UIApplication *)application afterDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[MPNebulaAdapterInterface shareInstance].nebulaCommonResourceAppList = @[@"77777777"];// Set the global resource package
}
Para melhorar a velocidade de carregamento da página, pré-defina o pacote de recursos global. Ainda é possível entregar atualizações posteriormente pelo backend do aplicativo H5.
Atualizar dinamicamente um pacote offline
O mPaaS oferece recursos de atualização dinâmica. Entregue uma nova versão de um pacote offline pela plataforma de publicação para atualizar a página correspondente no cliente. Para mais informações, consulte Real-time Release > Offline Package Management > Publish an offline package.