[Open source, Разработка мобильных приложений, Flutter] Flutter плагин для импорта стикеров в телеграм
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Недавно Telegram анонсировал новый конкурс:
Сообщение от https://t.me/ContestBot Дано: механизм импорта стикеров для Android и iOS приложений.Задача: написать Android или iOS приложение, использующее этот механизм.Сроки очень ограничены, дедлайн 4‑го июля. Объективно, написать приложение за столь короткий я не успеваю. Решил хотя бы помочь Flutter разработчикам в этом конкурсе и написать плагин для работы с нативными SDK. Об этом и будет статья.Для начала разберемся что за механизм импорта предлагает нам Telegram?AndroidОфициальный репозиторий находится тут. Никакого SDK нет. Для импорта стикеров нужно просто отправить Intent с набором параметров. Что может быть проще?
Intent intent = new Intent(CREATE_STICKER_PACK_ACTION);
intent.putExtra(Intent.EXTRA_STREAM, stickers);
intent.putExtra(CREATE_STICKER_PACK_IMPORTER_EXTRA, getPackageName());
intent.putExtra(CREATE_STICKER_PACK_EMOJIS_EXTRA, emojis);
intent.setType("image/*");
Сложность заключается в том, что для того чтобы стороннее приложение имело доступ к какому-либо вашему файлу нужно это разрешение выдать (не рассматриваем случай raw директории). Подробнее об обмене файлами между приложениями можно почитать в официальной документации.Чтобы организовать доступ к вашим файлам следует использовать FileProvider. По сути, мы описываем к каким директориям хотим предоставить доступ, а также имя, которое спрячет настоящий путь до файлов.Для простоты я прописал одну папку в директории с кешом. В случае, если вы захотите использовать какую-то другую свою папку, вам будет необходимо настроить манифест:
...
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
...
и добавить xml файл c описанием доступных путей:
<?xml version="1.0" encoding="utf-8"?>
<paths>
<cache-path path="telegram_stickers_import/" name="telegram_stickers_import" />
</paths>
При таком использовании путь:/data/user/0/com.otopba.telegram_stickers_import_example/cache/telegram_stickers_import/sticker1.webpПревращается в:content://com.otopba.telegram_stickers_import_example.provider/telegram_stickers_import/sticker1.webpiOSОфициальный репозиторий находится тут. Для iOS Telegram предоставляет SDK и даже сделал валидацию данных с человеческими ошибками.Для работы вам нужно добавить несколько строчек в Info.plist:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>tg</string>
</array>
Как использовать плагинКак и ожидалось, плагин получился максимально простым: один метод, в который нужно передать ваш стикерсет для импорта:
class TelegramStickersImport {
/// Folder inside cache directory for store your stickers
static const androidImportFolderName = "telegram_stickers_import";
static const MethodChannel _channel = MethodChannel(
'telegram_stickers_import',
);
/// Method for import sticker set
static Future<String?> import(StickerSet stickerSet) async {
return _channel.invokeMethod('import', stickerSet.toMap());
}
}
Нюанс заключается в чтении файлов стикеров:
- для работы Android приложения вам понадобится копировать файлы ваших стикеров в папку cache/telegram_stickers_import (или ту, что вы настроите себе сами);
- для работы iOS приложения вам нужно будет считывать содержимое стикеров в Uint8List
StickerData({this.path, this.bytes});
/// Android factory
factory StickerData.android(String path) {
return StickerData(path: path);
}
/// iOS factory
factory StickerData.iOS(Uint8List bytes) {
return StickerData(bytes: bytes);
}
ЗаключениеСтранно конечно, что телеграм сделал SDK только для iOS, а Android разработчикам как всегда достаются танцы с бубном.Буду рад если вы воспользуетесь плагином.Жду пул реквестовЧао!
===========
Источник:
habr.com
===========
Похожие новости:
- [Законодательство в IT, Социальные сети и сообщества, IT-компании] Роскомнадзор отправил в суд 10 протоколов — по 3 на Google и Telegram и по 2 на Facebook и Twitter
- [Open source, Исследования и прогнозы в IT, Гаджеты, Смартфоны] Android окукливается (ver 2) и сообществу плевать на это
- [Open source, Разработка под Linux, Софт] Вышел Linux 5.13 с поддержкой M1, ноутбуков Microsoft Surface и улучшениями RISC-V
- [Open source, JavaScript, Node.JS, Дизайн мобильных приложений, TypeScript] Все, что вы хотели знать про Qwik — новый фреймворк от создателя Angular
- [Разработка мобильных приложений, Дизайн мобильных приложений, Дизайн игр] Wild Horizon. А вы точно издатель?
- [Python, MongoDB, Голосовые интерфейсы] Голосовой дневник на python с распознаванием голоса и сохранением в Mongo DB
- [Dart, Flutter] gRPC + Dart, Сервис + Клиент, напишем? Часть 3
- [Мессенджеры, Дизайн мобильных приложений, Дизайн, Софт, Видеоконференцсвязь] В Telegram добавили групповые видеозвонки и анимированные фоны
- [Информационная безопасность, Open source, Разработка под Android, Управление сообществом, Смартфоны] Android окукливается и сообщество потворствует этому
- [Разработка мобильных приложений, Разработка под Android, Kotlin] Пишем свой профайлер для анализа производительности приложения на Android
Теги для поиска: #_open_source, #_razrabotka_mobilnyh_prilozhenij (Разработка мобильных приложений), #_flutter, #_flutter, #_telegram, #_open_source, #_razrabotka_mobilnyh_prilozhenij (
Разработка мобильных приложений
), #_flutter
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 19:15
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Недавно Telegram анонсировал новый конкурс: Сообщение от https://t.me/ContestBot Дано: механизм импорта стикеров для Android и iOS приложений.Задача: написать Android или iOS приложение, использующее этот механизм.Сроки очень ограничены, дедлайн 4‑го июля. Объективно, написать приложение за столь короткий я не успеваю. Решил хотя бы помочь Flutter разработчикам в этом конкурсе и написать плагин для работы с нативными SDK. Об этом и будет статья.Для начала разберемся что за механизм импорта предлагает нам Telegram?AndroidОфициальный репозиторий находится тут. Никакого SDK нет. Для импорта стикеров нужно просто отправить Intent с набором параметров. Что может быть проще? Intent intent = new Intent(CREATE_STICKER_PACK_ACTION);
intent.putExtra(Intent.EXTRA_STREAM, stickers); intent.putExtra(CREATE_STICKER_PACK_IMPORTER_EXTRA, getPackageName()); intent.putExtra(CREATE_STICKER_PACK_EMOJIS_EXTRA, emojis); intent.setType("image/*"); ...
<provider android:name="androidx.core.content.FileProvider" android:authorities="${applicationId}.provider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/filepaths" /> </provider> ... <?xml version="1.0" encoding="utf-8"?>
<paths> <cache-path path="telegram_stickers_import/" name="telegram_stickers_import" /> </paths> <key>LSApplicationQueriesSchemes</key>
<array> <string>tg</string> </array> class TelegramStickersImport {
/// Folder inside cache directory for store your stickers static const androidImportFolderName = "telegram_stickers_import"; static const MethodChannel _channel = MethodChannel( 'telegram_stickers_import', ); /// Method for import sticker set static Future<String?> import(StickerSet stickerSet) async { return _channel.invokeMethod('import', stickerSet.toMap()); } }
StickerData({this.path, this.bytes});
/// Android factory factory StickerData.android(String path) { return StickerData(path: path); } /// iOS factory factory StickerData.iOS(Uint8List bytes) { return StickerData(bytes: bytes); } =========== Источник: habr.com =========== Похожие новости:
Разработка мобильных приложений ), #_flutter |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 19:15
Часовой пояс: UTC + 5