10 вопросов к поддержке HMS по работе с гибридными приложениями, AppGallery и эмулированию телефонов Huawei



    Привет, Хабр! За год количество сервисов в экосистеме Huawei Mobile Services (HMS). выросло с 9 до 31, и у разработчиков стало возникать всё больше вопросов по поддержке гибридных приложений, взаимодействию с AppGallery, использованию отдельных служб и китов. Основные площадки нашего общения с мировым сообществом — это Stackoverflow, Reddit, XDA-Developers и раздел поддержки на портале разработчиков Huawei. Специально для тех, кто интересуется нашей платформой, мы собрали с этих площадок 10 вопросов по работе с Huawei Mobile Services.

    1. Будет ли работать React-native и Firebase SDK на телефонах Huawei без Google Service и без изменений кода? 


    Да, приложение на React-native будет работать без изменений, достаточно отправить APK для загрузки в галерею приложений Huawei. С Firebase SDK будет немного сложнее. Работоспособность приложения зависит от служб, которые вы пытаетесь включить в своё приложение. Так, вход в Google с помощью модуля аутентификации Firebase не будет поддерживаться на телефонах, где нет Google Mobile Services, например на Huawei Mate 30 Pro.

    Если вы хотите использовать один APK как для GMS, так и для HMS, вам необходимо сначала проверять доступность службы.
    Для GMS:

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

    Для HMS:

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

    При попытке использовать Google Login, или Huawei Login, или любые другие сервисы:

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

    2. Каковы реальные скрытые расходы на поддержку дополнительной экосистемы?


    Расходы на поддержку приложения в HMS зависят от того, как вы проектируете систему и какие сервисы требуются в вашем приложении. В среднем время интеграции может варьироваться от нескольких часов до нескольких недель в зависимости от приложения и количества сервисов Google и Firebase в исходном приложении.

    Если в вашем приложении нет интегрированных GMS, то можно загружать его без каких-либо доработок — сервисы Facebook, Yandex и другие будут работать.

    3. Какие гибридные приложения поддерживает HMS? 


    С версии HMS Core 5.0.0 увеличено количество китов, поддерживаемых сторонними платформами:

    Apache Cordova:


    React Native:


    Xamarin:


    Flutter:


    4. Можно ли считать данные с датчика глубины (TOF) на телефонах Huawei?


    Да, это возможно при использовании AR Engine SDK. Huawei AR Engine обеспечивает вывод сетки сцены в реальном времени, и результат включает положения мобильного телефона в пространстве. Трёхмерная сетка текущего вида камеры поддерживает только модели Honor V20 и P30Pro, которые могут получать информацию о глубине, а поддерживаемая сцена сканирования является статической. 

    TOF поддерживается на следующих устройствах:
    • Серия 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

    Для получения данных от TOF нужно использовать класс ARSceneMesh с помощью следующих методов:

    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.

    Есть и другие варианты, как считать глубину. Можно получить объект класса ARFrame и использовать его методы hitTest, acquireDepthImage. Также возвращает обработанную карту глубины метод GetSceneDepth из класса ARSceneMesh. Она точнее, но работает только до 2,5 метра.

    5. Как открыть AppGallery напрямую из приложения?


    AppGallery из приложения открывается так же, как и Google Play Store. Надо учитывать, что  AppGallery использует собственную схему appmarket://:

    • Схема: appmarket://
    • Пакет: com.huawei.appmarket

    Вот фрагмент из галереи приложений 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. Как создать Huawei Android Emulator?


    Huawei предоставляет разработчикам Huawei функцию облачной отладки в качестве бесплатной услуги. Если вы используете SDK Huawei, у вас должна быть учётная запись разработчика Huawei. Просто войдите в консоль разработчика Huawei и следуйте инструкциям.

    Функция облачной отладки действительно проста в использовании. Она позволяет выполнять удалённую отладку на реальных устройствах. В процессе вы можете просматривать информацию об устройстве, загружать и устанавливать APK на удалённые устройства, получать журналы операций и сохранять журналы на локальном компьютере для анализа.

    7. Как получить доступ к payload push-уведомлений HMS?


    Чтобы получить доступ к payload, вам необходимо реализовать класс HmsMessageService и переопределить метод onMessageReceived. Вы можете получить доступ к payload из объекта RemoteMessage. Чтобы получить доступ к токену, переопределите метод onNewToken.

    Код 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());
                }
            }
        }
    }

    Код 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)
            }
        }

    Убедитесь, что вы зарегистрировали свою службу:

    <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. Какие инструменты использовать при разработке приложения Android для мобильного телефона Huawei?


    Для разработки приложений можно использовать как Android Studio, так и другие IDE, такие как Eclipse, Intelliji IDEA. Если у вас уже есть приложение, использующее GMS, используйте HMS Toolkit для преобразования кода, работающего с GMS, для работы с HMS. Необходимо учитывать, что HMS Toolkit поддерживает конвертацию не всех служб, и перед его использованием лучше уточнить, работу каких служб он может перенести.

    9. Как инициализировать службы HMS без agconnect-services.json? 


    Пока HMS не предоставляет единого решения для инициализации на основе кода. Инициализация без json-файла возможна при работе со следующими службами:

    • Push Kit:

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

    • Map Kit:

    MapsInitializer.setApiKey("Your API Key");

    • Site Kit:

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

    • ML Kit:

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

    10. Что может система управления продуктами (PMS) в службе HMS In-App Purchase?


    API системы управления продуктами (PMS) позволяет создавать продукты и управлять информацией о них. Через него можно:

    • Создавать продукты: в том числе с по подписке с автоматическим продлением.
    • Запрашивать информацию о продуктах: например, можно запросить конкретный продукт на основе идентификатора приложения и идентификатора продукта или запросить все продукты, которые соответствуют указанным вами критериям.
    • Обновлять информацию о продуктах: название продукта, язык, цену и статус. Работать можно как с одним, так и с несколькими продуктами одновременно.
    • Продвигать продукты: API позволяет разделять рекламные каомпании по регионам, задавать время продвижения и устанавливать цены.

    На этом пока всё, если у вас есть вопросы по работе с HMS, задавайте их в комментариях.
    Huawei
    Huawei – мировой лидер в области ИКТ

    Комментарии 4

      0
      MapKit для территории России/Украины/Белоруссии на базе чьих данных? Яндекса или свои?
      Пуши — а почему не опубликовать такую же статью но про то как серверную часть править?
      Вот допустим стоит задача с минимальными затратами портировать приложение. Пуши там важная часть функционала, дорабатывать сервер сложно и нужно backend-разработчику дать максимально понятные инструкции.
      0

      Хуавей молодцы. Пилят свой стор, активно его продвигают. Особенно актуально на фоне конфликтов с монополизмом AppStore.

        0

        Мало нам было разных форм факторов телефонов и производителей. Теперь ещё имеем новый набор сервисов для Huawei смартфонов. Боль и страдания андроид разработчиков)

        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

        Самое читаемое