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:

  • Account Kit plugins for Cordova
  • Ads Kit plugins for Cordova
  • Analytics Kit plugin for Cordova
  • In-App Purchases Kit plugin for Cordova
  • Location Kit plugin for Cordova
  • Map Kit plugins for Cordova
  • ML Kit plugins for Cordova
  • Push Kit plugin for Cordova
  • Site Kit plugins for Cordova

React Native:

  • Account Kit plugins for React Native
  • Ads Kit plugins for React Native
  • Analytics Kit plugin for React Native
  • Health Kit plugin for React Native
  • In-App Purchases Kit plugin for React Native
  • Location Kit plugin for React Native
  • Map Kit plugin for React Native
  • ML Kit plugins for React Native
  • Push Kit plugin for React Native
  • Site Kit plugins for React Native

Xamarin:

  • Account Kit plugins for Xamarin
  • Ads Kit plugins for Xamarin
  • Analytics Kit plugins for Xamarin
  • Map Kit plugins for Xamarin
  • Location Kit plugins for Xamarin
  • Push Kit plugins for Xamarin
  • Site Kit plugins for Xamarin

Flutter:

  • Account Kit plugins for Flutter
  • Ads Kit plugins for Flutter
  • Analytics Kit plugins for Flutter
  • In-App Purchases Kit plugin for Flutter
  • Location Kit plugins for Flutter
  • Map Kit plugins for Flutter
  • Push Kit plugins for Flutter
  • Site Kit plugins for 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, задавайте их в комментариях.
Источник: https://habr.com/ru/company/huawei/blog/525756/


Интересные статьи

Интересные статьи

В наши дни редакторы кода часто предлагают программистам помощь или справочные сведения, относящиеся к тому, что вводится с клавиатуры. Это может быть всё что угодно — от списка коротких ...
Один из ключевых сценариев работы в CRM это общение с клиентом в удобном для него канале. По почте, по телефону, по SMS или в мессенджере. Особенно выделяется WhatsApp — интеграцию с ...
В 1С Битрикс есть специальные сущности под названием “Информационные блоки, сокращенно (инфоблоки)“, я думаю каждый с ними знаком, но не каждый понимает, что это такое и для чего они нужны
В этом выпуске читайте: США лишили Huawei сервисов Google и обновлений Android; третья по счету авария электромобиля Tesla со смертельным исходом; статистика влияния Zombieload на про...
Практически все коммерческие интернет-ресурсы создаются на уникальных платформах соответствующего типа. Среди них наибольшее распространение получил Битрикс24.