Gerencie pacotes offline envolve pré-configurar, atualize, baixe, instale e exclua aplicativos H5. Outras operações incluem usar pacotes de recursos globais, obter informações do aplicativo e verifique assinaturas de segurança.
Pré-requisitos
Conclua a configuração de integração. Para mais informações, consulte Adicionar o SDK.
Gere um pacote offline. Para mais informações, consulte Gerar um pacote offline.
Pré-configurar aplicativos H5
Geralmente, ao abrir um aplicativo H5 pela primeira vez, o download do pacote offline pode não ter sido concluído. Nesse caso, o aplicativo abre usando uma URL de fallback.
Pré-configurar um aplicativo H5 equivale a pré-instalar um aplicativo disponível no pacote de instalação lançado para o cliente. Quando o usuário abre o aplicativo pré-instalado pela primeira vez, ele usa diretamente os recursos do pacote offline, o que melhora a experiência do usuário.
Pré-configure apenas aplicativos H5 essenciais. Evite pré-configurar aplicativos pouco utilizados.
Para pré-configurar um aplicativo H5, siga estas etapas:
No console de publicação de aplicativos H5, baixe o arquivo de configuração
.jsondo aplicativo H5 e o pacote offline a ser pré-configurado.Adicione o arquivo
.jsone o pacote offline à pastaassetdo projeto.-
Ao iniciar o aplicativo, chame o código de pré-configuração para instalá-lo. O exemplo abaixo ilustra essa chamada:
MPNebula.loadOfflineNebula("h5_json.json", new MPNebulaOfflineInfo("90000000_1.0.0.6.amr", "90000000", "1.0.0.6"));NotaEsta é uma chamada bloqueante. Não invoque o método para pacotes offline integrados na thread principal.
Este método aceita apenas uma invocação. Chamadas subsequentes são ignoradas; portanto, transmita as informações de todos os pacotes offline a serem pré-configurados em uma única chamada.
Se houver múltiplos pacotes .amr integrados, garanta que todos os arquivos existam. A ausência de qualquer arquivo causa falha na instalação dos demais pacotes offline integrados.
Usar pacotes de recursos globais
Os pacotes de recursos globais do Nebula eliminam a redundância gerada quando vários aplicativos H5 compartilham os mesmos recursos. Por exemplo, um aplicativo React usa o código do framework ReactJS. Agrupar recursos comuns em um pacote global reduz o tamanho dos aplicativos H5.
Normalmente, você deve pré-configurar um pacote de recursos globais para o projeto. Atualizações futuras ainda podem ser entregues pelo console de aplicativos H5.
O exemplo de código a seguir defina o pacote offline com id de aplicativo (appId) 66666692 como pacote de recursos globais. Ele também pré-configura o pacote offline assets/nebulaPreset/66666692. Os métodos são descritos a seguir:
getCommonResourceAppList: Notifica o contêiner H5 de que o pacote offline com o id especificado é um pacote de recursos globais. Sem a configuração desse id, o pacote offline integrado não entra em vigor, mesmo que esteja incluído.-
getH5PresetPkg: Defina o caminho e a versão do pacote de recursos globais integrado. O contêiner H5 carrega o pacote de recursos da pasta de ativos especificada. No entanto, se o servidor identificar uma versão superior, o pacote integrado de versão inferior não será carregado. Alternativamente, use o métodoloadOffLineNebulamencionado anteriormente para pré-configurar o pacote de recursos globais. Nesse caso, não é necessário defina o caminho e a versão do pacote offline integrado neste método.NotaEste método aplica-se exclusivamente a pacotes de recursos globais H5.
getTinyCommonApp: Retorna apenas o id do pacote de recursos do framework para miniapps. Se o pacote de recursos globais for destinado somente a aplicativos H5, não inclua o id do pacote de recursos comuns neste método.
O código abaixo apresenta um exemplo de classe de implementação de referência:
public class H5AppCenterPresetProviderImpl implements H5AppCenterPresetProvider {
private static final String TAG = "H5AppCenterPresetProviderImpl";
// Public resource package for the business. Avoid using a prefix of 666666.
private static final String COMMON_BIZ_APP = "xxxxxxxx";
// Miniapp-specific resource package. Do not modify.
private static final String TINY_COMMON_APP = "66666692";
// The asset folder for preset packages.
private final static String NEBULA_APPS_PRE_INSTALL = "nebulaPreset" + File.separator;
// Collection of preset packages.
private static final Map<String, H5PresetInfo> NEBULA_LOCAL_PACKAGE_APP_IDS = new HashMap();
static {
H5PresetInfo h5PresetInfo2 = new H5PresetInfo();
// File name in the built-in folder.
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;
}
}
Em seguida, execute o código abaixo durante a inicialização do aplicativo:
H5Utils.getH5ProviderManager().setProvider(H5AppCenterPresetProvider.class.getName(), new H5AppCenterPresetProviderImpl());
Atualize aplicativos H5
Por padrão, o Nebula verifica a existência de uma nova versão sempre que um aplicativo H5 é aberto. Para reduzir a carga no servidor, essa verificação respeita um intervalo de tempo, configurado por padrão em 30 minutos. Para buscar imediatamente a versão mais recente disponível, invoque o código a seguir para solicitar a atualização. Recomenda-se execute essa chamada na inicialização do aplicativo ou após o login do usuário.
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();
}
});
}
});
Baixe aplicativos H5
O MPNebula oferece uma interface para baixar manualmente aplicativos H5:
/**
* Download an offline package
*
* @param appId The ID of the offline package
* @param mpaasNebulaDownloadCallback The download callback
*/
public static void downloadApp(final String appId, final MpaasNebulaDownloadCallback mpaasNebulaDownloadCallback)
Instale aplicativos H5
O MPNebula disponibiliza uma interface para instalar manualmente aplicativos H5:
/**
* Install an offline package
*
* @param appId The ID of the offline package
* @param mpaasNebulaInstallCallback The installation callback
*/
public static void installApp(final String appId, final MpaasNebulaInstallCallback mpaasNebulaInstallCallback)
Obter informações do aplicativo
Use um método de H5AppProvider para recuperar informações sobre um aplicativo H5:
H5AppProvider provider = H5Utils.getProvider(H5AppProvider.class.getName());
AppInfo appInfo = provider.getAppInfo("10000000"); // Get the application configuration
boolean isInstalled = provider.isInstalled("10000000", "1.0.0.0"); // Check if a specific version of the application is installed
boolean isAvailable = provider.isAvailable("10000000", "1.0.0.0"); // Check if the offline package for a specific version of the application is downloaded
Verifique assinaturas de segurança
O Nebula possui um mecanismo de verificação de assinatura de pacotes offline para impedir que programas maliciosos alterem pacotes baixados no dispositivo. Ative esse recurso chamando a interface MPNebula para defina os parâmetros de verificação de assinatura. Se você usar a baseline 10.1.60 ou superior, também deverá ative a configuração do contêiner. Para mais detalhes, consulte Configuração do contêiner H5.
Invoque a interface
MPNebulaantes de abrir um pacote offline pela primeira vez. Caso contrário, a inicialização da chave pública falhará. Para mais informações sobre chaves públicas e privadas, consulte Configurar pacotes offline > Gerenciamento de chaves.-
Independentemente de a verificação de assinatura estar ativada no cliente, ela é executada obrigatoriamente em dispositivos identificados com root.
/** * @param publicKey The public key for signature verification */ public static void enableAppVerification(final String publicKey)
Exclua aplicativos locais
O Nebula fornece uma interface para excluir informações de aplicativos locais. Após a exclusão desses dados, o aplicativo solicita ao servidor um novo download e atualize as informações locais na próxima abertura.
public class MPNebula {
// appId is the application ID of the offline package or miniapp.
public static boolean deleteAppInfo(String appId);
}
As versões mínimas de baseline compatíveis com esta API são 10.1.68.8 e 10.1.60.14.