10 perguntas para suporte HMS em aplicativos híbridos, AppGallery e Huawei Phone Emulation





Olá, Habr! O número de serviços no ecossistema Huawei Mobile Services (HMS) por ano. cresceu de 9 para 31, e os desenvolvedores começaram a ter cada vez mais dúvidas sobre o suporte de aplicativos híbridos, interação com AppGallery, uso de serviços individuais e baleias. As principais plataformas para nossa comunicação com a comunidade global são Stackoverflow , Reddit , XDA-Developers e a seção de suporte no portal de desenvolvedores da Huawei. Especialmente para aqueles que estão interessados ​​em nossa plataforma, coletamos desses sites 10 perguntas sobre como trabalhar com a Huawei Mobile Services. 



1. O React nativo e o Firebase SDK funcionarão em telefones Huawei sem o serviço Google e sem alterações de código? 



Sim, o aplicativo nativo do React funcionará sem modificações, basta enviar o APK para fazer o upload para a Huawei App Gallery. O Firebase SDK é um pouco mais complicado. O desempenho de seu aplicativo depende dos serviços que você está tentando incluir em seu aplicativo. Por exemplo, o login no Google usando o módulo de autenticação Firebase não será compatível com telefones que não possuem o Google Mobile Services, como o Huawei Mate 30 Pro.



Se você deseja usar o mesmo APK para GMS e HMS, primeiro é necessário verificar a disponibilidade do serviço. 

Para GMS:



val gmsAvailable = GooglePlayServicesUtil.getInstance().isGooglePlayServicesAvailable(mContext)


Para HMS:



val hmsAvailable = HuaweiApiAvailability.getInstance().isHuaweiMobileServicesAvailable(mContext)


Ao tentar usar o login do Google ou Huawei ou qualquer outro serviço:



if gmsAvailable {
   // execute GMS Code
} else if hmsAvailable {
   // execute HMS Code
}


2. Quais são os custos ocultos reais de apoiar um ecossistema adicional?



O custo de manutenção de um aplicativo no HMS depende de como você projeta o sistema e de quais serviços seu aplicativo requer. Em média, os tempos de integração podem variar de algumas horas a várias semanas, dependendo do aplicativo e do número de serviços do Google e Firebase no aplicativo original.



Se o seu aplicativo não possui GMS integrado, você pode baixá-lo sem nenhuma modificação - Facebook, Yandex e outros serviços funcionarão.



3. Quais mashups o HMS suporta? 



Desde o HMS Core 5.0.0, o número de baleias suportadas por plataformas de terceiros aumentou:

 

Apache Cordova:





React Native:





Xamarin:





Flutter:





4. Você consegue ler os dados do sensor de profundidade (TOF) nos telefones Huawei?



Sim, isso é possível usando o AR Engine SDK . O Huawei AR Engine fornece renderização em tempo real da grade de cena e o resultado inclui a posição do telefone móvel no espaço. A grade 3D da visualização da câmera atual só oferece suporte aos modelos Honor V20 e P30Pro, que podem receber informações de profundidade, e a cena de digitalização compatível é estática. 



TOF é compatível com os seguintes dispositivos:
  • P: P30 / P30Pro / P40 / P40Pro / P40Pro +

  • Mate: Mate20 / Mate20Pro / Mate20RS / Mate 20X / Mate20X (5G) / Mate30 / Mate30Pro / Mate30RS / Mate30 (5G) / Mate30Pro (5G) / Mate X / Mate XS

  • Nova: Nova6 / Nova6-5G / Nova7 / Nova7Pro

  • Honor: Honor V20 / Honor 20 / Honor 20Pro / Honor V30 / Honor V30Pro / Honor 30S / Honor 30 Pro / Honor 30 Pro +

  • : Tablet M6


Para obter dados do TOF, use a classe ARSceneMesh usando os seguintes métodos:



public ShortBuffer getSceneDepth()
        // Get the depth image of current frame(optimized).
public int getSceneDepthHeight()
        // Get the height of the depth image.
public int getSceneDepthWidth()
        // Get the width of the depth image.


Existem outras opções de como calcular a profundidade. Você pode obter o objeto de classe ARFrame e usar seus métodos hitTest, takingDepthImage. O método GetSceneDepth da classe ARSceneMesh também retorna o mapa de profundidade processado. É mais preciso, mas só funciona até 2,5 metros.



5. Como abrir AppGallery diretamente do aplicativo?



AppGallery do aplicativo é aberto da mesma forma que a Google Play Store. Observe que AppGallery usa seu próprio esquema appmarket: //:



  • Esquema: appmarket: //
  • Pacote: com.huawei.appmarket


Aqui está um snippet de AppGallery



private void startHuaweiAppGallery() {
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("appmarket://details?id=" + getPackageName()));
    List<ResolveInfo> otherApps = getPackageManager().queryIntentActivities(intent, 0);

    boolean agFound = false;

    for (ResolveInfo app : otherApps) {
        if (app.activityInfo.applicationInfo.packageName.equals("com.huawei.appmarket")) {
            ComponentName psComponent = new ComponentName(app.activityInfo.applicationInfo.packageName, app.activityInfo.name);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED | Intent.FLAG_ACTIVITY_CLEAR_TOP);
            intent.setComponent(psComponent);
            startActivity(intent);

            agFound = true;
            break;
        }
    }

    //Optional, Or copy the Google Play Store URL here (See below)
    if (!agFound) {
        //Your Huawei app ID can be found in the Huawei developer console
        final string HUAWEI_APP_ID = "100864605";

        //ex. https://appgallery.cloud.huawei.com/marketshare/app/C100864605
        intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://appgallery.cloud.huawei.com/marketshare/app/C" + HUAWEI_APP_ID));
        startActivity(intent);
    }
}


6. Como criar o Huawei Android Emulator?



A Huawei fornece aos desenvolvedores da Huawei a depuração em nuvem como um serviço gratuito. Se estiver usando o Huawei SDK, você deve ter uma conta de desenvolvedor Huawei. Basta fazer login no Huawei Developer Console e seguir as instruções .



O recurso de depuração em nuvem é realmente fácil de usar. Ele permite a depuração remota em dispositivos reais. No processo, você pode visualizar informações do dispositivo, baixar e instalar APKs em dispositivos remotos, receber logs de operação e salvar os logs em seu computador local para análise.



7. Como acessar a carga de notificações push HMS?



Para acessar a carga útil, você precisa implementar a classe HmsMessageService e substituir o método onMessageReceived. Você pode acessar a carga útil do objeto RemoteMessage. Para acessar o token, substitua o método onNewToken.



Código Java:



import android.util.Log;

import com.huawei.hms.push.HmsMessageService;
import com.huawei.hms.push.RemoteMessage;

public class HService extends HmsMessageService {

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);

        if (remoteMessage != null) {
            if (!remoteMessage.getData().isEmpty()) {
                Log.d("HMS", "Payload" + remoteMessage.getData());
            }

            if (remoteMessage.getNotification() != null) {
                Log.d("HMS", "Message Notification Body: " + remoteMessage.getNotification().getBody());
            }
        }
    }
}


Código Kotlin:



override fun onMessageReceived(remoteMessage: RemoteMessage?) {
        super.onMessageReceived(remoteMessage)

        if (remoteMessage!!.data.isNotEmpty()) {
            Log.i(TAG, "Message data payload: " + remoteMessage.data)
        }

        if (remoteMessage.notification != null) {
            Log.i(TAG, "Message Notification Body: " + remoteMessage.notification.body)
        }
    }


Certifique-se de registrar seu serviço:



<service
            android:name=".service.HService"
            android:enabled="true"
            android:exported="true"
            android:permission="${applicationId}.permission.PROCESS_PUSH_MSG"
            android:process=":HmsMessageService">
            <intent-filter>
                <action android:name="com.huawei.push.action.MESSAGING_EVENT" />
            </intent-filter>
   </service>


8. Quais ferramentas usar ao desenvolver aplicativos Android para telefones celulares Huawei?



Para o desenvolvimento de aplicativos, você pode usar o Android Studio e outros IDEs, como Eclipse, Intelliji IDEA. Se você já tem um aplicativo que usa GMS, use o HMS Toolkit para converter seu código que funciona com GMS para funcionar com HMS. Deve-se ter em mente que o HMS Toolkit não suporta a conversão de todos os serviços, e antes de utilizá-lo, é melhor esclarecer quais serviços ele pode transferir.



9. Como inicializar os serviços HMS sem agconnect-services.json? 



O HMS ainda não oferece uma única solução de inicialização baseada em código. A inicialização sem um arquivo json é possível ao trabalhar com os seguintes serviços:



  • Push Kit:



<meta-data        
    android:name="com.huawei.hms.client.appid"        
    <!-- Replace value xxx with the actual appid.-->         
    android:value="appid=xxx">         
</meta-data>


  • Kit de mapas:



MapsInitializer.setApiKey("Your API Key");


  • Kit do local:



SearchService searchService = SearchServiceFactory.create(this, "API key");


  • Kit de ML:



MLApplication.getInstance().setApiKey("your ApiKey");


10. O que um sistema de gerenciamento de produto (PMS) pode fazer no HMS In-App Purchase?



A API do Sistema de Gerenciamento de Produto (PMS) permite que você crie e gerencie informações do produto. Através dele você pode:



  • Crie produtos: incluindo assinaturas com renovação automática.

  • Consulta de informações do produto: por exemplo, você pode consultar um produto específico com base na ID do aplicativo e na ID do produto, ou consultar todos os produtos que correspondem aos critérios especificados.

  • Atualizar informações do produto: nome do produto , idioma, preço e status. Você pode trabalhar com um ou vários produtos ao mesmo tempo.

  • Promover produtos: A API permite categorizar campanhas publicitárias por região, definir horários de promoção e preços.



Isso é tudo por agora, se você tiver alguma dúvida sobre como trabalhar com HMS, pergunte nos comentários.



All Articles