Telegram으로 스티커를 가져오기 위한 Flutter 플러그인
8185 단어 telegramopensourceflutter
주어진: Android 및 iOS 앱용 스티커 가져오기 메커니즘.
작업: 이 메커니즘을 사용하는 Android 또는 iOS 앱을 작성합니다.
기간은 매우 제한적이며 마감일은 7월 4일입니다. 객관적으로 이렇게 짧은 시간에 앱을 작성할 시간이 없습니다. 저는 이 콘테스트에서 Flutter 개발자를 돕고 기본 SDK와 함께 작동하는 플러그인을 작성하기로 결정했습니다. 이 기사는 그것에 대해 설명합니다.
Telegram이 어떤 종류의 가져오기 메커니즘을 제공하는지 봅시다.
기계적 인조 인간
공식 저장소는 here 입니다. 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/*");
어려움은 타사 응용 프로그램이 모든 파일에 액세스할 수 있도록 권한을 부여해야 한다는 것입니다(원시 디렉터리의 경우는 고려하지 않음). 응용 프로그램 간의 파일 공유에 대한 자세한 내용은 official documentation 에서 확인할 수 있습니다.
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 파일을 추가합니다.
<?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.webp
iOS
공식 저장소는 here 입니다. Telegram은 iOS용 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());
}
}
뉘앙스는 스티커 파일을 읽는 데 있습니다.
cache/telegram_stickers_import
폴더(또는 직접 설정한 폴더)에 복사해야 합니다. 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);
}
결론
Telegram이 iOS 전용 SDK를 만든 것이 이상하고 Android 개발자는 항상 그렇듯이 레인 댄스를 해야 합니다.
my plugin 을 이용하시면 기쁠 것입니다.
풀 리퀘스트를 기다리고 있습니다.
챠오!
Reference
이 문제에 관하여(Telegram으로 스티커를 가져오기 위한 Flutter 플러그인), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/otopba/flutter-plugin-for-importing-stickers-into-telegram-43a9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)