Русский
Русский
English
Статистика
Реклама

Huawei mobile services

Знакомство с App Gallery. Создаем аккаунт разработчика

22.09.2020 18:18:39 | Автор: admin


Что происходит, кто виноват и что делать


Недавно Google прекратил сотрудничество с Huawei. Это привело к тому, что Huawei на своих новых девайсах уже не может использовать сервисы Google (магазин приложений, геолокация, карты, пуши, аналитика etc), что для пользователя превращает девайс в кирпич. Если бы это не была китайская компания, то, скорее всего, на этом её бизнес, связанный с Android, просто бы прекратился. Но компания китайская, большая и они пошли по пути импортозамещения, в кратчайшие сроки реализовав функционал, аналогичный Google сервисам.


В этой серии статей мы хотим поделиться своим опытом использования Huawei Mobile Services в уже готовом приложении, использующем Google Mobile Services для аналитики (Firebase Analytics), карт и геолокации. Текста получилось довольно много и о сильно разных сервисах, засим статей будет несколько. Начнём мы с основ регистрации аккаунта разработчика и базовых вещей в коде.


  1. Создаём аккаунт разработчика, подключаем зависимости, подготавливаем код к внедрению. вы тут
  2. Встраиваем Huawei Analytics.
  3. Используем геолокацию от Huawei.
  4. Huawei maps. Используем вместо Google maps для AppGallery.

Если вам интересно узнать технических подробностей, посмотреть код и узнать про подводные камни добро пожаловать под кат!


Что нужно для успешного внедрения


Всё было бы просто, если бы приложение писалось с нуля и не нужно было бы поддерживать как Google так и Huawei. Но мы живём в реальном мире и без сложностей не обойтись. Однако дело сильно упростится, если соблюдён ряд условий.


Но перед перечислением условий надо составить ТЗ. Оно у нас получилось такое:


  1. Нам нужно получить 2 версии APK одну для Google Play, с библиотеками от Google, другую для AppGallery, с библиотеками от Huawei.
  2. В приложении уже используется Firebase Analytics. Надо его заменить на аналог от Huawei.
  3. Есть определение местоположения пользователя. Аналогично заменяем на аналог.
  4. Есть карты. Нужно также заменить на аналог, по максимуму сохранив функционал, т.к. в реализации от Huawei некоторые вещи ещё не сделаны.

А вот что сильно сократит прикладываемые усилия:


  1. Код должен быть написан хорошо. И быть без багов (хотя это само собой разумеется зачем код с багами писать?). Под хорошо будем подразумевать более-менее стандартную архитектуру, мимикрирующую под Clean.
  2. Если код из Google библиотек размазан ровным слоем по всему проекту, то у меня для вас плохие новости. Например у вас может не быть абстракции над аналитикой и/или над полученными от Google координатами. В этом случае придётся её завести, чтобы почистить код от импортов гугловых классов, которые будут недоступны, когда мы уберём их из сборки.
  3. Использование DI. Очень упрощает абстрагирование над аналитикой и геолокацией. Используем интерфейсы, через DI передавая нужную реализацию.
  4. Карты не слишком сильно кастомизированы. В частности, основная сложность будет с абстрагированием над кластеризацией маркеров.

Подготовка к внедрению


Как и в случае с Google, надо зарегистрироваться, создать проект приложения, получить файл конфигурации.


  1. Регистрируемся на https://developer.huawei.com. Тут понадобится паспорт/права + пластиковая карта. День-два вас будут проверять, потом аккаунт заработает. Если вдруг что-то пойдёт не так (забудете что-то указать или укажете неправильно) вам напишут и подробно объяснят. После общения с Google Play всё выглядит очень круто русскоязычная техподдержка отвечает быстро и по делу.
  2. Принимаем всякие соглашения об обработке персональных данных. Внимательно читая, конечно же)
  3. Создаём проект приложения, указывая пакет (он же ApplicationId).
  4. Если вам нужно ещё и встроенные покупки реализовать то надо: а) Заполнить данные банковского счёта б) Распечатать и заполнить заявление о трансграничной передаче персональных данных в КНР в) Отправить скан оного вместе с данными из пункта а г) Отправить заявление из пункта б по почте в Москву. Когда заявление дойдёт вам придёт e-mail и останется только активировать сервис в настройках проекта. На почте бывают накладки возможно, придётся подождать. Я пару недель ждал, потом позвонил ответственному за это в Huawei уверили, что проблему решат. И решили. На русском тоже всё общение очень круто)
  5. Включаем сервис аналитики. В отличие от геолокации и карт, включённых по умолчанию, это нужно сделать вручную.
  6. Добавляем SHA-256 для всех ключей, которыми будет подписано приложение. Т.е. дебажные ключи и релизный ключ.
  7. Скачиваем аналог google-services.json, в случае Huawei называемый agconnect-services.json
  8. Создаём разные flavors для Google и Huawei. Наконец-то можно перейти к коду:

В build.gradle (module app) создаём flavors и указываем, что в папках src/google/kotlin, src/google/res, src/huawei/kotlin, src/huawei/res также находиться будет наш код.


android {  ...  sourceSets {      google.java.srcDirs += 'src/google/kotlin'      google.res.srcDirs += 'src/google/res'      huawei.java.srcDirs += 'src/huawei/kotlin'      huawei.res.srcDirs += 'src/huawei/res'  }  flavorDimensions "store"  productFlavors {      google {          dimension "store"      }      huawei {          dimension "store"      }  }}

Также создаём папки src/huaweiDebug и src/huaweiRelease. В них помещаем наш файл конфигурации agconnect-services.json


И добавляем apply plugin: 'com.huawei.agconnect' в конец build.gradle (module app).


И наконец, добавляем в build.gradle проекта:


buildscript {    ...    repositories {        ...        maven {url 'https://developer.huawei.com/repo/'}    }    dependencies {        ...        classpath 'com.huawei.agconnect:agcp:1.2.1.301'    }}allprojects {    repositories {        ...        maven {url 'https://developer.huawei.com/repo/'}    }}

В следующей части встраиваем аналитику


Теперь мы полностью готовы. У нас есть 2 разных варианта сборки для Huawei и Google. У нас подключены необходимые зависимости. Созданы папки, где будет наш код. Создан аккаунт разработчика и выполнены необходимые действия по созданию проекта приложения. У нас даже какое-то ТЗ есть. И мы уже выполнили первый пункт из ТЗ! Отличный повод на этом статью закончить. И уже в следующей встроить аналитику не от Google, а от Huawei.


Весь код, который есть в этом цикле статей вы можете посмотреть в репозитории на GitHub. Вот ссылка.

Подробнее..

Встраиваем аналитику от Huawei в Android приложение

06.10.2020 18:23:53 | Автор: admin

image


В прошлой статье мы создавали аккаунт разработчика для использования Huawei Mobile Services и подготавливали проект к их использованию. Теперь пора приступить к встраиванию конкретных сервисов.


Вот полный список статей из цикла:


  1. Создаём аккаунт разработчика, подключаем зависимости, подготавливаем код к внедрению. тык
  2. Встраиваем Huawei Analytics. вы тут
  3. Используем геолокацию от Huawei.
  4. Huawei maps. Используем вместо Google maps для AppGallery.

Как должен выглядеть код в уже готовом проекте


Начнём с аналитики. И исходить будем из того, что она у вас спрятана за примерно такой абстракцией:


interface Analytics {    fun send(event: AnalyticsEvent)}interface AnalyticsEvent {    val key: String    val data: Map<String, Any>}fun Map<String, Any>.toBundle() =    Bundle().apply {        forEach { (key, value) ->            when (value) {                is String -> putString(key, value)                is Int -> putInt(key, value)                is Boolean -> putBoolean(key, value)                is Double -> putDouble(key, value)                is Float -> putFloat(key, value)                else -> throw IllegalArgumentException("Unknown data type: ${value::class.simpleName}")            }        }    }open class SimpleEvent(override val key: String) : AnalyticsEvent {    override val data: Map<String, Any> = hashMapOf()    override fun toString(): String = "AnalyticsEvent { key = $key, data = $data }"}open class ParamsEvent(key: String, vararg params: Pair<String, Any>): SimpleEvent(key) {    override val data = params.toMap()}class EventOpenSomeScreen : SimpleEvent("screen_some_screen")

Соответственно, где требуется какое-то событие отправить, вы делаете что-то такое:


@Injectlateinit var analytics: Analytics...analytics.send(EventOpenSomeScreen())

Используем разные реализации аналитики


Если всё вышеописанное верно, то подставлять разные реализации аналитики в разных сборках проще простого.


  1. Указываем, что для huawei flavor-а мы используем одну библиотеку, а для google другую:

dependencies {  huaweiImplementation 'com.huawei.agconnect:agconnect-core:1.3.1.300'  huaweiImplementation 'com.huawei.hms:hianalytics:5.0.0.301'  googleImplementation 'com.google.firebase:firebase-analytics:17.2.3'}

  1. В DI биндим для типа Analytics экземпляр класса AnalyticsImpl. Сам же AnalyticsImpl у нас будет в двух вариантах. Один в папке src/huawei/kotlin/com/example и выглядеть так:

class AnalyticsImpl(context: Context) : Analytics {    private val analytics = HiAnalytics.getInstance(context)    override fun send(event: AnalyticsEvent) {        analytics.onEvent(event.key, event.data.toBundle())    }}

Другой в папке src/google/kotlin/com/example:


class AnalyticsImpl(context: Context) : Analytics {  private val firebaseAnalytics = FirebaseAnalytics.getInstance(context)  override fun send(event: AnalyticsEvent) {      firebaseAnalytics.logEvent(event.key, event.data.toBundle())  }}

Вот собственно и всё с аналитикой. API библиотек очень похожи и никаких проблем не возникает.


Проверяем, что всё работает


Также, очень удобно можно проверить, что Huawei аналитика работает. Для этого надо:


  1. Подсоединить девайс к компьютеру.
  2. Выполнить в консоли adb shell setprop debug.huawei.hms.analytics.app ТУТ_APPLICATION_ID_ВАШЕГО_ПРИЛОЖЕНИЯ
  3. Открыть консоль разработчика в браузере, перейти в AppGallery Connect -> Мои приложения -> Выбрать приложение -> Раздел "Разработка" -> Управление -> Отладка приложения.
  4. Теперь отправленные из приложения события вы будете видеть в реальном времени прямо на сайте.
  5. Чтобы отключить режим отладки выполните adb shell setprop debug.huawei.hms.analytics.app .none.

Вот так режим отладки выглядит в браузере:


image


Дальше геолокация


С аналитикой мы разобрались, в следующей статье покажем как встроить определение геолокации от Huawei в приложение, которое уже использует аналог от Google.


Весь код, который есть в этом цикле статей вы можете посмотреть в репозитории на GitHub. Вот ссылка.

Подробнее..

Как устроен Push Kit от Huawei

28.09.2020 10:23:58 | Автор: admin

Привет, Хабр! В мае прошлого года, оставшись без сервисов и API гугла, мы основательно взялись за работу над своей платформой Huawei Mobile Services. Это наш давний проект, к которому мы вернулись после введения американских санкций. Проблема отрезанных сервисов постепенно сошла на нет. Мы добавили недостающие компоненты: почтовый клиент, свои карты и другие сервисы, и HMS Core набор API, SDK и прочих сервисов для разработки, и улучшения приложений. В этот набор входит Push Kit облачная служба для рассылки уведомлений и не только. Под катом расскажем, как устроен этот инструмент, чем выделяется и как его можно использовать.

Главная функция Push Kit (об остальных поговорим дальше) доставлять на устройство пользователя уведомления от приложений. Этот процесс организован так:

  • сервер приложения подключается к API-интерфейсу Push Kit и загружает туда зашифрованные сообщения;

  • из облака Push Kit сообщения пересылаются на устройство с целевым приложением.

Кроме того, у Push Kit есть множество интересных и полезных фич:

  • Таргетирование рассылки по темам сообщений и другим критериям, в том числе с помощью Huawei Analytics Kit;

  • Отправка пуш-сообщений на основе сценариев одному или нескольким пользователям одновременно, рассылка по расписанию;

  • Отправка пуш-сообщений через консоль в интерфейсе AppGallery Connect.

  • Доступ к серверу Push Kit через HTTPS;

  • Отправка пуш-сообщений пользователям, которые пользуются разными профилями на одном Android-устройстве;

  • Отправка пуш-сообщений на устройства Android/iOS и веб-приложения;

  • Автоматический выбор языка пуш-сообщения в зависимости от языка системы устройства получателя;

  • Кэширование и повторная отправка в случае, если пуш-сообщение не доставлено из-за отсутствия сети.

Что и как можно послать через Push Kit

С помощью Push Kit можно не только доставлять уведомления, но и передавать данные напрямую в приложение. В этом случае на пользовательское устройство приходит послание, которое активирует в программе-адресате определённое действие. Функция может оказаться полезной, например, для соцсетей, когда вы получаете запрос добавиться в друзья или входящие вызовы по VoIP. Кроме того, с её помощью можно загружать в сообщения в мессенджеры, чтобы они уже были внутри, когда вы запустите программу.

Но всё-таки главной задачей является доставка пуш-уведомлений, внешний вид которых настраивается через интерфейс Push Kit. Это может быть обычный текст, текст с большой или маленькой картинкой, с иконкой приложения и т. д. Можно менять размеры элементов и их расположение, выбирать тип звукового сигнала, а также программировать сценарии действия, которые выполняются, когда пользователь открывает уведомление.

Если группа уведомлений от одного приложения в статус-баре свёрнута, по умолчанию в нём будут показаны первые два пуша их количество можно расширить до восьми. Такая группа может содержать до 24 пуш-уведомлений в EMUI 10 и до 49 в EMUI 9. Если сообщений больше, будет виден счётчик оставшихся уведомлений и следующее появится только после удаления одного из отображаемых пушей.

Имя пакета, отправляемого Push Kit, может содержать до 128 байт, а максимальный размер сообщения составляет 4 Кб.

Если у целевого устройства нет проблем с сетью, доставка пушей должна происходить не дольше, чем за 1 секунду. Если же девайс получателя не в сети, Push Kit кеширует сообщение и отправляет его после того, как устройство переходит в онлайн.

Особенности Push Kit

Уведомления через Push Kit приходят быстро и снижают энергопотребление устройства. Операционки большинства мобильных девайсов автоматически закрывают приложения, которые долгое время не проявляют активности. Но чтобы программа могла показывать свои пуши, зачастую ей нужно работать хотя бы в фоне. Так что системе приходится перезапускать нужный ей софт, чтобы вывести пуш на экран.

Push Kit позволяет этого не делать: сообщения попадают в его центр уведомлений (NC), минуя целевые приложения. За это отвечает специальный компонент под названием Push Service. В итоге программа запускается только тогда, когда это предусмотрено сценарием, например после нажатия на уведомление.

Отсюда и высокая скорость доставки: благодаря Push Service пользователь может прочитать сообщение практически сразу после того, как оно попадёт на телефон.

Push Kit предоставляет канал системного уровня, способный одновременно отправлять десятки миллионов сообщений в секунду и десятки миллиардов в день. При этом 99 % пушей доставляются пользователям в течение 10 минут, даже если приложение не запущено. По сути, уведомления не доходят, только если устройство получателя выключено или находится вне сети.

Push Service устанавливается на все мобильные устройства с EMUI, так что на них уведомления отображаются в унифицированном виде.

Служба Центр уведомлений доступна на некоторых устройствах Huawei с EMUI 4 и на всех начиная с EMUI 5. А вот на гаджетах сторонних производителей эта функция недоступна, но если установить на них HMS Core, эти телефоны тоже научатся принимать уведомления, отправленные через Huawei Push Kit. Увы, из-за системных ограничений скорость доставки на телефоны других марок может снизиться.

Push Kit поддерживает основные кроссплатформенные среды разработки мобильных приложений, включая React Native, Cordova, Xamarin и Flutter. Чтобы разрабатывать на одном языке приложение, которое будет работать и на iOS, и на Android, нужно только интегрировать соответствующий пакет подключаемого модуля SDK.

После получения сообщений через Push Kit пользовательские устройства информируют об этом ваш сервер, помогая отслеживать ход рассылки в режиме реального времени. Благодаря этому можно быть в курсе статуса каждого уведомления и иметь возможность оперативно реагировать на неудачную доставку. Например, отправить SMS человеку, до которого не доходят пуши.

Push Kit автоматически показывает пуши на языке, который установлен в устройстве пользователя. Охват Push Kit более 200 стран и регионов, поэтому такая функция будет очень полезна.

Под капотом Push Kit: немного практики

Чтобы воспользоваться сервисом, надо зарегистрировать аккаунт разработчика на сайте Huawei Developers. Кроме этого понадобятся:

  • компьютер на Windows с установленным пакетом Java JDK 1.8, Android Studio и Android SDK;

  • смартфон Huawei с USB-кабелем и установленным HMS Core не ниже 4-й версии.

На схеме показан процесс разработки приложения под Android. iOS и веб-приложения поддерживаются в бета-режиме.

Первым делом:

  • создаём приложение в AppGallery Connect и проект в Android Studio;

  • генерируем криптографический ключ SHA-256;

  • сохраняем файл конфигурации приложения;

  • подключаем к приложению модуль AppGallery Connect;

  • добавляем репозиторий Maven в файл build.gradle.

Подробнее об этих шагах можно почитать здесь, правда, на английском.

Важный момент: чтобы использовать Push Kit для веб-приложений, нужно настроить его через приложение для Android. Кроме того, существуют Quick Apps приложения, не требующие установки, которые можно использовать на мобильных телефонах более 12 крупных производителей в Китае. Все они доступны в AppGallery и поддерживают Push Kit.

Чтобы использовать Push Kit, укажите место для хранения данных вашего проекта. Если его не задать, будут недоступны таргетирование по темам сообщений, рассылка через агент WebPush и работа с iOS.

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

Чтобы уменьшить задержку, есть смысл хранить данные неподалёку от пользователей. Например, если вы в России разрабатываете приложение для жителей из Евросоюза, оптимальным местом для сервера будет Германия.

Интеграция HMS Core SDK

Добавим файл конфигурации вашего приложения в AppGallery Connect.

  1. В AppGallery Connect кликаем My project.

  2. Находим и выбираем приложение, в которое хотим интегрировать HMS Core SDK.

  3. Переходим в Project Setting General information. В App information загружаем файл agconnect-services.json.

  4. Копируем файл agconnect-services.json в корневой каталог приложения нашего проекта Android Studio.

Добавим связи сборки. Для этого открываем файл build.gradle в каталоге приложения.

Прописываем в разделе dependencies:

dependencies {    implementation fileTree(dir: 'libs', include: ['*.jar'])    implementation 'androidx.appcompat:appcompat:1.0.2'    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'    testImplementation 'junit:junit:4.12'    androidTestImplementation 'androidx.test:runner:1.1.1'    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'    // Add the following line    implementation 'com.huawei.hms:push:5.0.0.300'}

5.0.0.300 заменим на последнюю версию HMS Core Push SDK.

Нажимаем Sync Now, чтобы синхронизировать файл build.gradle.

Если отображается synced successfully, всё прошло хорошо.

Настройка файла Manifest

Чтобы устройства могли получать токен push и сообщения, отправленные сервером Push Kit, нужно изменить файл AndroidManifest.xml. Определяем класс MyPushService, он наследуется от класса HmsMessageService.

<service    android:name=".MyPushService"    android:exported="false">    <intent-filter>        <action android:name="com.huawei.push.action.MESSAGING_EVENT" />    </intent-filter></service>

В этом примере кода нужно только изменить MyPushService в android: name = ". MyPushService" на имя класса, наследуемого от класса HmsMessageService. Всё остальное сохраняем.

Настройка сценариев шифрования

Открываем файл конфигурации обфускации proguard-rules.pro проекта Android Studio. Добавляем параметры, исключающие из этого процесса HMS Core SDK.

-ignorewarnings-keepattributes *Annotation*-keepattributes Exceptions-keepattributes InnerClasses-keepattributes Signature-keepattributes SourceFile,LineNumberTable-keep class com.hianalytics.android.**{*;}-keep class com.huawei.updatesdk.**{*;}-keep class com.huawei.hms.**{*;}

Если мы используем AndResGuard, его надо добавить в список разрешений в файле c конфигурацией обфускации.

"R.string.agc*","R.string.hms*","R.string.connect_server_fail_prompt_toast","R.string.getting_message_fail_prompt_toast","R.string.no_available_network_prompt_toast","R.string.third_app_*","R.string.upsdk_*","R.layout.hms*","R.layout.upsdk_*","R.drawable.upsdk*","R.color.upsdk*","R.dimen.upsdk*","R.style.upsdk*"

Разрабатываем демо

Ниже показан общий код проекта и структура ресурсов.

Открываем наш проект в Android Studio, создаём виджет и разворачиваем TextView в MainActivity, чтобы отобразить токен. Там же, в MainActivity, программируем метод обновления токена в TextView.

public class MainActivity extends AppCompatActivity {    private TextView tvToken;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        tvToken = findViewById(R.id.tv_log);        MyReceiver receiver = new MyReceiver();        IntentFilter filter=new IntentFilter();        filter.addAction("com.huawei.codelabpush.ON_NEW_TOKEN");        MainActivity.this.registerReceiver(receiver,filter);    }    public class MyReceiver extends BroadcastReceiver {        @Override        public void onReceive(Context context, Intent intent) {            if ("com.huawei.codelabpush.ON_NEW_TOKEN".equals(intent.getAction())) {                String token = intent.getStringExtra("token");                tvToken.setText(token);            }        }    }}

Для подачи заявки на токен объявляем <meta-data> в файле AndroidManifest.xml.

<application    <meta-data        android:name="push_kit_auto_init_enabled"        android:value="true" /></application>

Name и value в meta-data копируем без изменений. Push SDK будет подавать заявку на получение токена при запуске приложения.

Токен получается методом onNewToken в thMyPushService*ce class.

MyPushService.java

public class MyPushService extends HmsMessageService {    private static final String TAG = "PushDemoLog";    @Override    public void onNewToken(String token) {        super.onNewToken(token);        Log.i(TAG, "receive token:" + token);        sendTokenToDisplay(token);    }    private void sendTokenToDisplay(String token) {        Intent intent = new Intent("com.huawei.push.codelab.ON_NEW_TOKEN");        intent.putExtra("token", token);        sendBroadcast(intent);    }}

Класс MyPushService наследуется от HmsMessageService. Он, в свою очередь, переопределяет метод для подтверждения онлайн-статуса устройства onNewToken.

Сборка, загрузка и отладка приложения

Подключаем телефон Huawei к компьютеру.

Способ 1. Нажимаем Play (зелёный треугольник), чтобы начать компиляцию и сборку. Устанавливаем APK на телефон.

Способ 2. Используем Android Studio, чтобы упаковать APK.

Затем используем инструмент ADB, чтобы установить APK на телефон для отладки.

adb install D:\WorkSpace\CodeLab\pushdemo1\app\release\app-release.apk

После запуска демо убеждаемся, что телефон подключён к сети. Метод onNewToken вызываетсядлявозврататокенаAFcSAHhhnxdrMCYBxth2QOG9IgY2VydAM61DTThqNux3KBC_hgzQQT*******.

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

Отправка пуш-уведомлений

В интерфейсе Push Kit в AppGallery Connect можно редактировать сообщения и отправлять их на устройства, подключённые к сети. Перед отправкой уведомлений находим приложение по названию. В этом примере имя APK com.huawei.codelabpush. Подробнее можно прочитать здесь.

Если всё прошло удачно, на экране телефона увидим уведомление.

Коммерческие возможности Push Kit

Почти все известные нам российские кейсы связаны с банковскими учреждениями.

Первой отечественной и второй в мире компанией, интегрировавшей наш Push Kit, стала mfms: их решения по доставке пуш-уведомлений используют ВТБ, Альфа-Банк, Сбер и другие финансовые учреждения России.

Например, в ВТБ пушами клиентам сообщают о денежных операциях в реальном времени. Такие уведомления стоят сильно дешевле SMS, а затраты на внедрение минимальны: с SDK, которое предоставляет mfms, не надо интегрировать APNs, FCM и Huawei Push Kit с нуля.

Пуши используются не только для рассылки. На основе Push Kit в mfms разработали фичу, которая позволяет клиентам банков получать уведомления с подтверждением денежных операций. Такие сообщения рассылаются через SDK и заменяют SMS с кодами для оплаты. Более того, mfms научились превращать эти пуши в красивые уведомления на русском языке с брендированным названием, логотипом и категорией магазина, в котором пользователь совершил оплату.

Какие ещё сферы применения можно найти для пуш-уведомлений и как извлечь из Push Kit больше пользы вопросы не такие уж и сложные, но для нас чрезвычайно интересные. Давайте их обсудим в комментариях: ждём ваши идеи, варианты использования платформы или, возможно, предсказания о будущем пуш-уведомлений.

Подробнее..

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

30.10.2020 14:07:40 | Автор: admin


Привет, Хабр! За год количество сервисов в экосистеме 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 consolefinal string HUAWEI_APP_ID = "100864605";//ex. https://appgallery.cloud.huawei.com/marketshare/app/C100864605intent = 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 и следуйте инструкциям: https://developer.huawei.com/consumer/en/doc/development/AppGallery-connect-Guides/agc-clouddebug-realtimedebug.

Функция облачной отладки действительно проста в использовании. Она позволяет выполнять удалённую отладку на реальных устройствах. В процессе вы можете просматривать информацию об устройстве, загружать и устанавливать 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 {@Overridepublic 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)}}

Убедитесь, что вы зарегистрировали свою службу:.
<serviceandroid: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-dataandroid: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 облачная платформа для дебаггинга, сервисы AB- и открытого тестирования

06.11.2020 16:10:59 | Автор: admin

Привет, Хабр! В мобильной экосистеме Huawei есть несколько инструментов для отладки и проверки приложений: можно запускать автоматические тесты в облаке или дистанционно на устройствах Huawei, а также работать с группами пользователей. На облачной платформе DigiX Lab разработчики могут проверять стабильность работы, производительность, уровень энергопотребления и совместимость своих приложений с устройствами нашего бренда в режиме эмулятора. Сервисы A/B- и открытых тестов помогают понять реакцию аудитории и получить обратную связь. Под катом я расскажу о возможностях этих сервисов и о том, как начать в них работать.

Из чего состоит DigiX Lab

DigiX Lab лаборатория в среде Huawei Developer. В него входят 2 сервиса: тестирования и отладки.

Сервис облачного тестирования позволяет протестировать совместимость, стабильность, производительность и энергопотребление приложения с помощью эмуляторов устройств. После проведения тестов разработчик получает результаты в виде подробного отчёта. Благодаря этому он может обнаружить любые проблемы с приложением:сбои, неожиданные закрытия, повышенное энергопотребление, ошибки и др.

Сервис облачной отладки (дебаггинга) позволяет выявить проблемы с работой приложений на конкретных устройствах. После подтверждения личности можно 24 часа работать бесплатно с любыми реальными устройствами на одну модель предоставляется до 2 часов работы. Когда 24 часа истекут, можно подать заявку на продление работы на 4 или 8 часов. Число заявок не ограничивается.

Как начать работать с DigiX Lab?

Зарегистрироваться в сервисе DigiX Lab может как корпоративный, так и индивидуальный разработчик. Индивидуальному разработчику необходимо будет загрузить документ, удостоверяющий личность, и дождаться его проверки. Корпоративному разработчику для проверки данных понадобится предоставить лицензию на ведение коммерческой деятельности, номер DUNS (девятизначный международно признанный идентификатор компаний), адрес компании.

Корпоративные разработчики получают доступ к большему количеству разделов, например к службе платежей, Huawei Ability Gallery, AppTouch, платному продвижению и подаркам, управлению комментариями, AppAdvisor, HiAI, HMS Core Ads Kit. У индивидуальных разработчиков доступа в эти разделы не будет.

Типы облачных тестов

В DigiX Lab можно запускать 4 вида тестов: на совместимость, стабильность работы, производительность и энергопотребление.

Тестирование совместимости займёт около 60 минут. Тест предоставит данные о первой и повторной установке приложения, его удалении и возникающих при этом сбоях и ошибках, например отсутствии ответа (ANR) или неожиданном закрытии приложения.

Этот режим позволяет отфильтровать устройства по моделям и версиям операционной системы. Можно выбрать как одну, так и несколько моделей.

Тестирование стабильности позволит отследить сбои в работе приложения, например инциденты с зависанием отсутствием ответа (ANR), сбоями платформы native crash и утечкой ресурсов. Из данных обо всех инцидентах система сформирует отчёт. Если количество сбоев будет больше 10, то тестирование прошло неуспешно. Длительность теста вы можете регулировать на своё усмотрение.

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

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

Тестирование производительности займёт около 60 минут. Тест предоставляет данные о производительности приложения, такие как загрузка процессора, использование памяти, энергопотребление, использование трафика и др., а также позволяет провести глубокий анализ с целью выявления проблем производительности приложения. Для тестирования производительности также можно выбрать одно или несколько устройств.

Тестирование энергопотребления займёт около 100 минут. Тест предоставляет данные о потребляемой мощности и демонстрирует использование ресурсов, например длительность блокировки (wakelock), использование экрана, использование Wi-Fi и аудио, а также выявляет закономерности поведения.

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

Как запустить тесты и посмотреть их результаты

После подтверждения аккаунта вам откроется доступ к облачным сервисам тестирования. В DigiX Lab доступно более 2 000 моделей устройств, и эта библиотека постоянно пополняется. Автоматическое тестирование ведётся на эмуляторах мобильных телефонов Huawei.

Чтобы провести тестирование, необходимо загрузить APK, выбрать модели устройств и версию операционной системы. Количество устройств для запуска теста неограниченно, но мы рекомендуем выбирать до 9 моделей. Иначе своей очереди придётся ждать слишком долго. Помните, что для теста стабильности можно выбрать только одно устройство.

Иногда ожидание задачи может занять слишком много времени. Это означает, что одну из выбранных моделей использует слишком много разработчиков одновременно. Также система может заблокировать тест это означает, что выбранное устройствоудалено. В этом случае необходимо выбрать другое устройство и запустить тест заново.

Краткую версию отчёта можно посмотреть без скачивания. Такой отчёт содержит данные о проценте прохождения, распределении ошибок и подробные данные тестирования.

Локализация ошибок с помощью сервиса дебаггинга

Сервис дебаггинга позволяет подобрать подходящие под запрос модели гаджетов для проверки работы приложения в режиме реального времени. Вы получаете доступ к реальным устройствам бренда и можете протестировать работу своего приложения на любом из них.

Этот сервис позволяет выбрать устройство, на котором будет проходить тестирование, и версию операционной системы, EMUI и длительность отладки: 30 минут, 1 час или 2 часа. Одновременно с одного Huawei ID дебаггинг можно проводить на 2 реальных устройствах. В любой момент отладки можно просмотреть подробную информацию об устройстве, на котором проводите дебаггинг.

На дебаггинг одного устройства вам даётся 2 часа. Всего каждый пользователь получает 24 часа бесплатного использования сервиса. Когда у пользователя остаётся менее 2 часов, он может подать заявку на продление на 4 или 8 часов. Количество таких заявок не ограничивается. Отчёты в журнале можно фильтровать по типу, а данные можно смотреть онлайн или экспортировать.

Проверка реакции аудитории с помощью А/B-тестов

Сервис А/B-тестов позволяет проводить тесты на 2 разных группах пользователей, которые получают разные варианты тестируемого продукта и отмечают свою реакцию. Его можно использовать для запуска нескольких тестов под разные аудитории или сравнения реакции пользователей на варианты дизайна, контента, функциональности.

Для того чтобы запустить A/B-тесты, необходимо сначала интегрировать Huawei Analytics Kit, затем в AppGallery Connect найти нужный проект и на странице с конфигураций A/B-тестов создать эксперимент. В нём необходимо указать условия, продолжительность и ключевые показатели тестирования и предоставить сервису доступ к службам (удалённой настройки, Push Kit и Analytics Kit), необходимым для его проведения.

Данные эксперимента и содержание отчёта зависят от выбранных вами индикаторов отслеживания. Обычно данные отчёта можно просмотреть уже на следующий день после публикации эксперимента. Но если в качестве индикатора отслеживания выбраны ежедневная продолжительность взаимодействия или уровень удержания через 15 или более дней, то для создания отчётов потребуется больше времени.

Открытое тестирование на группах пользователей

Этот сервис работает пока в бета-режиме. Он позволяет предоставить доступ к своему приложению первой тестовой группе пользователей и получить обратную связь. Чтобы запустить открытое тестирование, необходимо отправить электронное письмо на адрес agconnect@huawei.com для заявки.

После того как вашу заявку утвердят, вы сможете создать список тестовых пользователей в AppGallery Connect, настроить его, загрузить пакет приложения и разослать приглашения выбранным пользователям. После того как пользователь согласится принять участие в открытом тестировании, он сможет загрузить тестовую версию вашего приложения в AppGallery. После этого пользователь сможет напрямую сообщать вам о проблемах, обнаруженных в приложении.

На этом пока всё. Если у вас есть вопросы по тестированию и отладке приложений на платформе HMS, задавайте в комментариях.

Подробнее..

Кошелёк в смартфоне и оплата без интернета как работает система платежей в экосистеме Huawei

14.12.2020 18:12:07 | Автор: admin


Привет, Хабр! В экосистеме Huawei Mobile Services хранение пользовательских карт и работа с платежами осуществляется приложением Huawei Wallet. Оно превращает смартфон в кошелёк: хранит не только карты, но и билеты, страховые полисы и ключи доступа. Под катом я расскажу, как можно использовать его возможности в своих приложениях и сервисах, какие у нас есть партнёрские программы и как работает система платежей Huawei Pay.

Кошелёк как канал взаимодействия с пользователями


Huawei Wallet приложение из экосистемы Huawei для хранения банковских и дисконтных карт, билетов, проездных и других подобных объектов. Отправить пользователю дисконтную карту или пропуск можно с помощью ссылки, в СМС или в письме на электронном ящике. Также Huawei Wallet может определить, какие партнёрские приложения установлены, и добавить карты из них.

Компания, выпустившая карту, может управлять её характеристиками (например, продлевать дату окончания или увеличивать номинал) и отправлять пользователям информационные сообщения. Таким образом можно:

  • информировать клиентов об акциях и предложениях;

  • сообщать владельцам билетов о задержке или отмене рейсов;
  • использовать объект в Huawei Wallet в качестве билета на мероприятие;
  • передать в Huawei Wallet NFC-ключ от системы контроля доступом (но в России эта функция пока не получила широкого распространения).

Интеграция своих продуктов в Huawei Wallet


Для партнёров Huawei доступна сквозная интеграция. Например, банки могут отправлять в Huawei Wallet кредитные и дебетовые карты при их открытии, а магазины добавить карту лояльности при скачивании приложения на телефон HUAWEI.

Так как в интеграции с платёжной системой Huawei есть много нюансов и технических деталей, заявка на неё требует предварительной консультации с техподдержкой бренда. Если у вас уже есть приложение в AppGallery, то после консультации можно подать заявку в разделе Мои проекты в AppGallery Connect. Выберите нужный проект и в его настройках перейдите в Earning > Wallet Kit в меню навигации справа и подайте заявку на услугу Wallet Kit.




Введите параметры: элемент, тип, название, идентификатор сервиса, URL-адрес обратного вызова, открытый ключ.



Затем нужно будет настроить параметры NFC, в том числе идентификатор приложения (AID), URL-адрес обратного вызова, параметры синхронизации, ключ внешней аутентификации и определение параметра файла.



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

После того как заявка на услугу Wallet Kit будет одобрена, предстоит интеграция и проверка приложения. Проверка приложения полностью автоматизирована. Вам нужно будет ввести информацию о приложении и загрузить APK. Затем система просканирует его и предоставит вам отчёт.

Образец кода клиента API-интерфейсов Huawei Wallet Kit можно посмотреть по ссылке. А по этой ссылке можно загрузить последний SDK.

Платежи через Huawei Wallet



В Huawei Wallet покупки и онлайн-платежи проходят через систему Huawei Pay. Для пользователей она повышает безопасность при транзакциях: сервис не использует номер банковской карты, а вместо него передаёт номер карты устройства или токен. Этот номер присваивается каждой добавленной банковской карте и различается на разных устройствах. Благодаря этому номера банковских карт не передаются продавцу и хранятся только на устройствах, а не на серверах Huawei Pay. Кроме того, Huawei Pay не сохраняет информацию о транзакции, которую можно связать с плательщиком.

Чтобы совершить платёж, пользователю не нужно снимать блокировку с устройства, а бесконтактная оплата возможна даже без подключения к интернету. Huawei Pay использует технологию аппаратного шифрования SE и требует верифицировать каждую транзакцию независимо от суммы. Работать с Huawei Pay может любой банк, который выпускает карты платёжной системы UnionPay. В России с ней уже работает, Газпромбанк, Россельхозбанк и Восточный банк. Уже в следующем году мы доработаем SDK и добавим оплату через Huawei Pay в свои веб-сервисы.

Ещё одной полезной функцией Huawei Pay является возможность принимать платежи при помощи QR-кодов. Данная функциональность превращает смартфон в POS-терминал: позволяет получать оплату за покупки при помощи QR-кода. Чтобы начать принимать оплату, юридическое лицо должно зарегистрироваться в приложении.

Будущее Huawei Pay в России


Одним из вариантов сотрудничества российских банков с Huawei являются партнёрские программы, которые мы предоставляем на основе платёжной карты UnionPay. Например, есть программа бонусов для держателей карт UnionPay Газпромбанка и Россельхозбанка.

Уже до конца года будет доступна полная функциональность по оплате в приложениях и веб-сервисах с помощью Huawei Pay. Также в планах на следующий год у нас запустить проект виртуального магазина банковских карт. Пользователь будет получать индивидуальные предложения банков по дебетовым и кредитным картам, которые можно будет использовать в Huawei Pay. Можно будет выбрать оптимальное предложение и отправить заявку на карту онлайн. Часть информации для заявки подтянется из Huawei ID пользователя, остальные данные анкеты нужно будет дополнить.

Ещё мы хотим дать российским пользователям возможность использовать предустановленную виртуальную карту на смартфоне. Это будет базовая карта платёжной системы, а заявку на неё также можно будет подать онлайн через Huawei Wallet.

На этом пока всё. Если у вас возникли вопросы по платежам и работе с картой в нашей экосистеме задавайте их в комментариях.
Подробнее..

Жизнь без AppStore и Google Play работаем с Huawei Mobile Services и AppGallery

07.04.2021 16:22:59 | Автор: admin

С конца 2019 Huawei поставляет Android-смартфоны без сервисов Google, в том числе без привычного всем магазина приложений Google Play. В качестве альтернативы китайская компания предлагает собственные разработки Huawei Mobile Services (HMS), а также магазин AppGallery. В этом тексте я разработчик Технократии Алина Саетова расскажу, как с этим жить и работать.

В статье мы рассмотрим:

  • начало работы c Huawei-системой

  • внедрение Huawei Mobile Services в приложение

  • отладка и тестирование на удаленных устройствах Huawei

  • публикация в AppGallery

Видеоверсию статьи смотрите здесь на канале Технократии.

С чего начать?

Чтобы взаимодействовать с Huawei-системой, нужно завести Huawei ID. Это аналог google-аккаунта, с помощью которого предоставляется доступ к сервисам системы. Далее нужно зарегистрировать аккаунт разработчика: индивидуальный или корпоративный.

  • Индивидуальному разработчику нужно ввести свои ФИО, адрес, телефон, почту. В отличие от регистрации аккаунта разработчика в Google Play, нужны также сканы паспорта и банковской карты. Да-да, документы требуются для удостоверения личности. Huawei обещает удалить их после регистрации.

  • Для регистрации корпоративного аккаунта требуются данные компании, либо DUNS number (международный идентификатор юридических лиц), либо бизнес лицензия.

Ждем одобрения аккаунта. За 1-2 дня Huawei обещают проверить наши данные. После этого можно подключать приложение к HMS. Для этого заходим в консоль AppGallery Connect.

  1. Создаем проект, а в нем добавляем приложение

Обращаем внимание, что для приложения, в котором используются HMS, название пакета должно оканчиваться на .huawei.

2.Помещаем конфигурационный файл agconnect-services.json в корневую папку приложения. Также сохраняем хэш SHA-256. Он потребуется для аутентификации приложения, когда оно попытается получить доступ к службам HMS Core.

Примечание. Для того, чтобы получить SHA-256, можно выполнить команду в терминале, подставив необходимые данные из вашего keystore:

keytool -list -v -keystore <keystore path> -alias <key alias> -storepass <store password> -keypass <key password>

Для работы некоторых сервисов нужно указать место хранения данных:

3.Добавляем зависимости в проект Android Studio.В build.gradle на уровне проекта:

buildscript {      repositories {          google()          jcenter()          maven { url 'https://developer.huawei.com/repo/' }      }      dependencies {      ....        classpath 'com.huawei.agconnect:agcp:1.4.2.301'     }  }allprojects {      repositories {          google()          jcenter()          maven {url 'https://developer.huawei.com/repo/'}      }  }

В build.gradle в модуле app:

apply plugin: 'com.android.application'apply plugin: 'kotlin-android'apply plugin: 'kotlin-android-extensions'apply plugin: 'kotlin-kapt'...apply plugin: 'com.huawei.agconnect'android {...}dependencies {...implementation "com.huawei.agconnect:agconnect-core:1.4.1.300...}

4.Для предотвращения обфускации AppGallery Connect сервисов, Huawei рекомендует прописать следующие правила в файле proguard-rules.pro на уровне модуля app:

  • Для ProGuard:

-ignorewarnings -keep class com.huawei.agconnect.**{*;}
  • Для DexGuard:

-ignorewarnings-keep class com.huawei.agconnect.** {*;} -keepresourcexmlelements ** -keepresources */*

Первоначальная настройка проекта с Huawei Mobile Services завершена.

Внедряем HMS сервисы в проект

Почти на каждый сервис Google у Huawei есть альтернатива:

  • Push Kit. Отправка пуш-уведомлений пользователям.

  • Auth Service. В дополнение к привычным способам аутентификации здесь присутствует вход по Huawei ID.

  • Crash Service. Cервис для отслеживания крашей приложения.

  • Cloud Storage, Cloud DB. Хранение различных файлов и база данных.

  • Location Kit. Получение местоположения пользователя.

  • Analytics Kit. Анализ статистических данных приложения.

  • In-App Purchases. Совершение покупок в приложении.

  • Cloud Testing, Cloud Debugging. Тестирование приложений на удаленных устройствах Huawei.

Этот список можно продолжать долго у Huawei довольно обширный перечень сервисов. Как же подключить их в наш проект?

Прежде всего, нам нужно определиться, как мы будем внедрять сервисы. Есть несколько вариантов:

  • Полностью заменяем GMS сервисы на HMS сервисы

  • Делаем комбинацию GMS и HMS сервисов в одном проекте

В этом деле нам пригодится плагин HMS Toolkit. Он поможет интегрировать HMS Core с минимальными затратами и высокой эффективностью. К сожалению, HMS Toolkit поддерживает конвертацию не всех сервисов, и лучше заранее уточнить, сможет ли он перенести работу ваших.

Нам нужен инструмент Convertor. Он проанализирует проект на наличие GMS сервисов и покажет места, где требуется заменить код с GMS на HMS.

  1. В меню выбираем HMS > Convertor > New Conversion:

2.В появившемся окошке указываем директорию, где создастся бэкап проекта до конвертации.

3.Здесь плагин представляет результаты анализа проекта: какие GMS сервисы у нас содержатся и какие из них конвертируемые. Также нам предлагается проверить sdk version для соответствия требованиям HMS.

На этом шаге мы должны выбрать стратегию конвертации:

  • Add HMS API. На основе существующих в проекте GMS APIs генерируется XMS adapter (как дополнительный модуль в проекте). Он представляет собой прослойку между нашим кодом и непосредственно вызовом сервисов. Это такие Extension-классы, в которых лежит код, поддерживающий HMS и GMS сервисы одновременно. В runtime определяется поддерживаемый девайсом вид сервисов и вызываются соответствующие методы.

  • To HMS API полностью заменяются GMS APIs на HMS APIs.

4.После анализа проекта, мы видим список мест в коде, где необходима конвертация.

По клику на каждый пункт произойдет навигация в файл, где будет предложена конвертация:

Если был выбран способ Add HMS API, мы можем посмотреть на сгенерированный xms адаптер. Вот так, например, выглядит метод из класса ExtensionUser:

А вот размер xms адаптер модуля при использовании лишь одного API с аутентификацией пользователя:

По итогу, APK нашего приложения увеличивается (old size - это APK приложения с only GMS, new size - APK с GMS и HMS одновременно):

Не сказать, что разница велика, но если в приложении будет использоваться несколько API?

Подводные камни

В политике Google Play есть замечание:

Any existing app that is currently using an alternative billing system will need to remove it to comply with this update. For those apps, we are offering an extended grace period until September 30, 2021 to make any required changes. New apps submitted after January 20, 2021 will need to be in compliance.

Что это значит для нас? Теперь, если приложение одновременно поддерживает HMS и GMS сервисы, и в нем есть In-App Purchases, то Google Play не допустит его публикации, а существующим приложениям придется удалить этот функционал.В итоге, если был выбран первый способ конвертации (Add HMS API), мы имеем:

  • Большое количество сгенерированных классов.

  • Увеличенный размер APK приложения.

  • Невозможность публикации приложения в Google Play, если в нем есть In-App Purchases.

  • Неполную поддержку одновременной работы HMS & GMS для некоторых сервисов.

Решение: Более привлекательным вариантом кажется второй способ конвертации простая замена GMS APIs на HMS APIs. Но вместе с этим используем product flavors, чтобы получать сборки приложения отдельно для Google Play и AppGallery.

Product Flavors

Создадим два product flavor - hms и gms:

  • Общий код будет располагаться в директории main/

  • Укажем sourceSets в файлах build.gradle модулей (только там, где необходимо разделение на hms и gms)

  • Код с GMS имплементацией будет в папке gms/, а с HMS соответственно в hms/

  • У hms flavora указываем applicationIdSuffix = .huawei

  • Если же нет необходимости заводить целые файлы отдельно для каждого flavora, то можно проверять текущий flavor через BuildConfig.FLAVOR

android {        flavorDimensions 'services'    productFlavors {        hms {            dimension 'services'            applicationIdSuffix '.huawei'        }        gms {            dimension 'services'        }    }}

По умолчанию, Android Studio заводит sourceSet main, в котором содержатся общие файлы с кодом. Создаем папки для каждого flavora:

New -> Folder -> Выбираем нужный тип папки:

Затем в build.gradle того модуля, где мы создали папку, должен автоматически вставиться следующий код (например, если мы выбрали hms):

android {        productFlavors {        ...    }    sourceSets {        hms {            java {                srcDirs 'src/hms/java'            }            ...        }    }}

Теперь Gradle будет включать в сборку файлы, соответствующие выбранному flavorу. Важно, чтобы файлы в этих директориях имели одинаковое название и лежали в пакетах с одним и тем же названием.

Пример. Мы используем Auth API. У нас будет абстракция интерфейс AuthRepository, хранящийся в main/, а его имплементации для разных сервисов лежат в gms/ и hms/ директориях тогда в сборку, например, для HMS, попадет именно имплементация с huawei сервисами.

Если проект многомодульный, то в каждом модуле необходимо прописать flavorы и при необходимости source sets. Код с flavorами можно вынести в отдельный файл.

Создадем .gradle файл в корневой папке проекта, назовем его flavors.gradle:

ext.flavorConfig = {    flavorDimensions 'services'    productFlavors {        hms {            dimension 'services'            ext.mApplicationIdSuffix = '.huawei'        }        gms {            dimension 'services'        }    }    productFlavors.all { flavor ->        if (flavor.hasProperty('mApplicationIdSuffix') && isApplicationProject()) {            flavor.applicationIdSuffix = flavor.mApplicationIdSuffix        }    }}def isApplicationProject() {    return     project.android.class.simpleName.startsWith('BaseAppModuleExtension')}

Помимо самих flavorов, в экстеншене flavorConfig лежит код с циклом по flavorам там будет определяться app модуль, которому присваивается applicationIdSuffix.

Затем в каждом модуле прописываем следующее:

apply from: "../flavors.gradle"android {    buildTypes {        ...    }    ...    with flavorConfig}

Для использования подходящих плагинов во время процесса компиляции можем добавлять такие if-else конструкции:

apply plugin: 'kotlin-kapt'...if(getGradle().getStartParameter().getTaskNames().toString().toLowerCase().contains("hms")) {    apply plugin: 'com.huawei.agconnect'} else {    apply plugin: 'com.google.gms.google-services'    apply plugin: 'com.google.firebase.crashlytics'}...

Для каждого flavorа мы можем включать dependencies, необходимые только ему. Перед implementation прописываем его название:

// FirebasegmsImplementation platform('com.google.firebase:firebase-bom:26.1.0')gmsImplementation 'com.google.firebase:firebase-crashlytics-ktx'gmsImplementation 'com.google.firebase:firebase-analytics-ktx'// Huawei serviceshmsImplementation 'com.huawei.agconnect:agconnect-core:1.4.2.300'hmsImplementation 'com.huawei.hms:push:5.0.4.302'hmsImplementation 'com.huawei.hms:hwid:5.0.3.301'

Тестируем и отлаживаем приложение

После того, как мы внедрили Huawei сервисы в приложение, нам нужно протестировать его работоспособность.

У Huawei есть облачная платформа DigiX Lab, в которой представлены 2 сервиса.

С помощью сервиса облачного тестирования проверяем совместимость, стабильность, производительность и энергопотребление приложения на удаленных устройствах Huawei. Краткое описание тестов можно увидеть на картинке.

По окончании каждого теста доступен подробный отчет. Можно узнать о сбоях, ANR, утечках ресурсов, также увидеть загрузку процессора, использование памяти и многое другое. Плюсом будут доступны скриншоты, которые снимаются во время тестирования и журналы Logcat.

Тесты можно запускать либо с помощью плагина в Android Studio:

Либо в консоли AppGallery, выгрузив туда свой APK:

Служба облачной отладки решает проблему отсутствия реальных устройств Huawei. Предоставляется список удаленных устройств, а разовый сеанс работы до 2 часов. Сервис дает 24 часа работы бесплатно после подтверждения личности. Можно подавать заявки на продление срока действия неограниченное количество раз. Отладка также доступна из Android Studio и консоли.

Публикуем приложение в AppGallery

После внедрения сервисов и успешного тестирования приложения, мы готовы публиковаться в AppGallery.

1.Переходим в AppGallery Connect и заполняем данные:

2.Грузим иконку приложения и скриншоты. Есть возможность прикрепить видео.

3.Указываем страны/регионы для публикации и грузим APK приложения. Кроме того, нужно загрузить подпись приложения.

4.Отмечаем способ покупок в приложении и рейтинг.

5.Грузим политику конфиденциальности (обязательно) и предоставляем данные тестового аккаунта, если это необходимо. Указываем дату публикации.

6.Нажимаем кнопочку Отправить на проверку и ждем! Проверка по регламенту занимает около 3-5 дней.

Основные причины отказа в публикации

  1. Политика конфиденциальности не соответствует стандарту

    • Отсутствует ссылка на политику конфиденциальности.

    • Ссылка на политику конфиденциальности недоступна.

    • Ссылка на политику конфиденциальности ведет на официальный сайт компании, на котором нет ссылки на политику конфиденциальности.

  2. Указанный статус Гонконга и Макао не соответствует стандарту.Гонконг и Макао не могут быть указаны как страны на странице выбора региона. Китай очень трепетно относится к этому. Пример:

3.Приведены ссылки на сторонние магазины приложений

Функция для оценки и написания отзыва в приложении содержит ссылку на сторонние магазины приложений без ссылки на AppGallery

Итоги

Huawei выстроили удобный процесс адаптации приложения под свои сервисы. Максимально безболезненный переход к HMS, тестирование и отладка на удаленных устройствах, а также знакомый процесс публикации приложения значительно облегчат жизнь разработчику. И пока что в AppGallery не такая серьезная конкуренция как в других магазинах приложений, самое время присоединяться к Huawei сообществу.

Полезные ссылки

Подписывайтесь на наш Telegram-канал Голос Технократии, где мы пишем о новостях из мира ИТ и высказываем свое мнение о важных событиях.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru