Tətbiq Uzantıları mobil tətbiqin imkanlarını onun əsas interfeysindən kənara çıxaran ayrı icra olunan modullardır: Ana ekranda Today Widget, CallKit vasitəsilə VoIP zənglərin işlənməsi və BroadcastReceiver vasitəsilə sistem hadisələrinə reaksiya. Sistem inteqrasiyaları tətbiqin əməliyyat sistemi ilə dərin səviyyədə qarşılıqlı əlaqədə olmasına imkan verir, adi ekranlar üçün əlçatmaz funksiyaları açır. Apple Developer Sənədlərinə görə, hər bir uzantı təcrid olunmuş prosesdə işləyir və əsas tətbiqdən asılı olmayaraq sistem tərəfindən idarə olunur. Mobil tətbiqdə Tətbiq Uzantıları əsas prosesdə əlçatmaz olan funksiyaları həyata keçirməyə imkan verir.
Əsas Məqamlar
iOS-da Tətbiq Uzantıları iOS 8-də ortaya çıxdı və mobil inkişafda sistem inteqrasiyalarının təməli oldu. Bunlar əsas tətbiq ilə birlikdə qablaşdırılmış, lakin təcrid olunmuş prosesdə işə salınan ayrı ikili fayllardır. Hər uzantının öz Info.plist və NSExtensionPrincipalClass vasitəsilə təyin edilmiş giriş nöqtəsi var. Sistem Tətbiq Uzantılarının həyat dövrünü idarə edir — onlar tapşırığı tamamladıqdan sonra fonda qala bilməzlər.
WidgetKit (iOS 14+) ana ekranda vidjetlər yaratmaq üçün müasir çərçivədir. WidgetKit interfeys təsviri üçün SwiftUI və yeniləmə cədvəllərini təyin etmək üçün TimelineProvider istifadə edir. Vidjetlər üç ölçüdə olur: kiçik (2×2 hücrə), orta (4×2) və böyük (4×4). UICollectionViewController əsaslı köhnə Today Widget hələ də dəstəklənir, lakin Apple WidgetKit-ə keçidi tövsiyə edir. WidgetKit-də Tətbiq Uzantıları animasiya, klaviatura girişi və ya jestləri dəstəkləmir — bunlar dövri yeniləmələrlə statik və ya psevdoanimasiyalı elementlərdir.
Share Extension sistem paylaşma vərəqi vasitəsilə istənilən tətbiqdən sizin tətbiqinizə məzmun göndərməyə imkan verir. Share Extension NSExtensionItem vasitəsilə məlumat alır və interfeys üçün SLComposeServiceViewController istifadə edir. Action Extension məzmunu yerində emal edir — məsələn, başqa tətbiqə keçmədən brauzerdə mətni tərcümə edir. Hər iki növ məhdud vaxtda işi tamamlamalıdır, əks halda sistem uzantını "öldürür". Bu, mobil tətbiqdə Tətbiq Uzantılarının vacib məhdudiyyətidir — fon tapşırıqları uzantı səviyyəsində əlçatmazdır.
iOS-da Sistem İnteqrasiyaları vidjetlərdən çox kənara çıxır: CallKit, PushKit və SiriKit mobil tətbiqin sistem səviyyəsində işləməsinə imkan verir. Bu çərçivələr xüsusi icazələr tələb edir, lakin istifadəçiyə problemsiz təcrübə təqdim edir — CallKit vasitəsilə zənglər adi telefon zəngləri kimi görünür və Siri tətbiqi açmadan sorğuları emal edir.
CallKit üçüncü tərəf tətbiq zənglərini kilitli ekran da daxil olmaqla sistem zəng ekranına inteqrasiya edir. CXProvider tətbiqi VoIP xidməti kimi qeydiyyatdan keçirir və CXCallController zəngləri idarə edir. CallKit avtomatik olaraq təkrarlanan zəngləri bloklayır və arzuolunmaz nömrələri bloklamaq üçün Call Directory Extension-ı dəstəkləyir. CallKit ilə mobil inkişafda sistem inteqrasiyaları səs rabitə tətbiqləri üçün kritikdir — WhatsApp, Skype və Zoom daxil olan zəngləri göstərmək üçün ondan istifadə edir.
PushKit push bildirişlərini istifadəçiyə göstərmədən birbaşa mobil tətbiqə çatdırır. PushKit tətbiqi "öldürülmüş" vəziyyətdən oyadır və PKPushRegistryDelegate vasitəsilə məlumat ötürür. Bu, VoIP tətbiqləri üçün əsas mexanizmdir: PushKit zəng məlumatını çatdırır və CallKit onu göstərir. PushKit adi push bildirişlərindən daha yüksək çatdırılma prioritetinə malikdir və banner göstərmək tələb etmir. Mobil tətbiqlərdə Tətbiq Uzantıları tez-tez səs rabitəsi üçün PushKit-i CallKit ilə birləşdirir.
SiriKit Siri və Qısayollar tətbiqi vasitəsilə sorğuları emal etməyə imkan verir. Intents Extension dəstəklənən niyyətləri qeydiyyatdan keçirən və emal edən ayrı Tətbiq Uzantısıdır. SiriKit 20+ domeni dəstəkləyir: zənglər, mesajlar, ödənişlər, qeydlər, məşqlər. Qısayollar istifadəçiyə avtomatlaşdırmalar yaratmağa imkan verir — məsələn, "Siri vasitəsilə WhatsApp-da mesaj göndər." SiriKit və Qısayollarla sistem inteqrasiyaları istifadəçi tətbiqi açmadan hərəkətləri yerinə yetirdiyi üçün cəlbetməni artırır.
BroadcastReceiver sistem yayım mesajlarına reaksiya verən Android komponentidir. iOS Tətbiq Uzantılarından fərqli olaraq, BroadcastReceiver ayrı ikili fayl tələb etmir — manifestdə və ya Context.registerReceiver vasitəsilə koddə qəbuledicini qeydiyyatdan keçirmək kifayətdir. Android-də sistem inteqrasiyaları tez-tez BroadcastReceiver ilə başlayır: cihazın yüklənməsi zamanı xidmətə başlamaqdan şəbəkə bağlantısına reaksiya verməyə qədər.
IntentFilter BroadcastReceiver-ı müəyyən bir sistem hadisəsinə bağlayır. Tipik hadisələr: BOOT_COMPLETED (cihaz yüklənməsi), CONNECTIVITY_ACTION (şəbəkə dəyişikliyi), BATTERY_LOW (batareyanın az olması), TIME_SET (vaxt dəyişikliyi). Qəbuledici AndroidManifest.xml-də və ya dinamik qeydiyyat üçün Context.registerReceiver vasitəsilə qeydiyyatdan keçirilir. Dinamik qeydiyyat üstünlük təşkil edir — manifestdə icazə tələb etmir və yalnız tətbiq aktiv olduqda işləyir. Android-də Tətbiq Uzantıları bir anlayış olaraq mövcud deyil, lakin BroadcastReceiver oxşar rol oynayır — sistem inteqrasiyaları vasitəsilə tətbiq imkanlarını genişləndirir.
NotificationListenerService bütün sistem bildirişlərini qəbul edən xidmətdir. NotificationListenerService BIND_NOTIFICATION_LISTENER_SERVICE icazəsi və əlçatanlıq parametrləri vasitəsilə giriş tələb edir. AccessibilityService sistem inteqrasiyası üçün daha güclü alətdir: ekran məzmununu oxuya, klikləri simulyasiya edə və hərəkətləri avtomatlaşdıra bilər. Hər iki xidmət parametrlərdə istifadəçi tərəfindən açıq şəkildə aktivləşdirilməyi tələb edir ki, bu da təhlükəsizliyi artırır. AccessibilityService vasitəsilə mobil tətbiqlərdə sistem inteqrasiyaları avtomatik doldurucular, ekran oxuyucuları və əlçatanlıq alətləri üçün istifadə olunur.
class BootReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (intent.action == Intent.ACTION_BOOT_COMPLETED) {
WorkManager.getInstance(context)
.enqueueUniqueWork("post-boot", ...)
}
}
}
Nümunə BOOT_COMPLETED hadisəsi üçün BroadcastReceiver qeydiyyatdan keçirir. WorkManager cihaz yükləndikdən sonra gecikmiş tapşırıqların icrası üçün istifadə olunur — bu Android tətbiqləri üçün standart yanaşmadır.
Android-də App Widget Provider vidjet kontekstində iOS Tətbiq Uzantılarının qarşılığıdır: ana ekranda interaktiv məzmun göstərən komponentdir. WidgetKit-dən fərqli olaraq, Android vidjetləri istifadəçi girişini — klikləri, keçidləri və jestləri qəbul edə bilər. App Widget Provider ölçü və yeniləmə tezliyinin XML təsviri vasitəsilə manifestdə qeydiyyatdan keçirilir.
RemoteViews XML layout vasitəsilə vidjet interfeysini təsvir edir və yalnız məhdud View dəstini dəstəkləyir. RemoteViews xüsusi View-lərə icazə vermir — yalnız standart komponentlər: TextView, ImageView, Button, ProgressBar. AppWidgetProvider vidjet yeniləmələrini, aktivləşdirilməsini və silinməsini idarə edən əsas sinifdir. onUpdate metodu updatePeriodMillis vasitəsilə taymer və ya dəqiq nəzarət üçün WorkManager vasitəsilə çağırılır. Android-də vidjetlərlə sistem inteqrasiyaları ehtiyat tələb edir — çox tez-tez yeniləmə batareyanı tükəndirir.
Glance API XML əvəzinə Kotlin DSL istifadə edərək vidjetlər yaratmaq üçün Jetpack kitabxanasıdır. Glance API RemoteViews-a tərtib olunur və Compose-a bənzər sintaksisi dəstəkləyir: GlanceComposable, Column, Row, Text. Kitabxana mürəkkəb XML kodu problemini həll edir və JUnit vasitəsilə vidjet testinə imkan verir. Glance API hələ bütün RemoteViews funksiyalarını dəstəkləmir — mürəkkəb interaktiv vidjetlər üçün klassik yanaşma daha yaxşıdır. Android-də mobil inkişafda Tətbiq Uzantıları vidjet yaradılmasını və saxlanmasını sadələşdirən Glance API-yə doğru inkişaf edir.
Content Provider vahid ContentResolver interfeysi vasitəsilə tətbiqlər arasında strukturlaşdırılmış məlumat paylaşmaq üçün Android komponentidir. iOS Tətbiq Uzantılarından fərqli olaraq, Content Provider ayrı proses yaratmır — məlumat zəng edən tətbiqin kontekstində sinxron şəkildə tələb olunur. Content Provider Android-də sistem inteqrasiyalarının təməlidir: kontaktlar, media fayllar, təqvim və standart tətbiqlər məlumat dərc etmək üçün ondan istifadə edir.
FileProvider tətbiqlər arasında təhlükəsiz fayl ötürülməsi üçün ContentProvider-ın alt sinifidir. FileProvider Android 7+-da qadağan olan birbaşa file:// yolları əvəzinə müvəqqəti content:// URI-lər yaradır. İstifadə etmək üçün XML konfiqurasiyada files-path və ya external-files-path təyin etmək lazımdır. Android-də mobil inkişafda Tətbiq Uzantıları ayrı bir anlayış olaraq mövcud deyil, lakin FileProvider onların funksiyasını yerinə yetirir — məlumat paylaşma imkanlarını bir tətbiqdən kənara genişləndirir.
iOS-da fayl paylaşma rolunu File Provider Extension yerinə yetirir. File Provider Extension NSFileProviderManager vasitəsilə tətbiqin fayllarını Fayllar tətbiqində dərc edir. FileProvider-dan fərqli olaraq, iOS uzantısı ayrı ikili fayl tələb edir və təcrid olunmuş prosesdə işləyir. File Provider Extension fayl təsviri üçün NSFileProviderItem və qovluq naviqasiyası üçün NSFileProviderEnumerator dəstəkləyir. File Provider Extension vasitəsilə mobil tətbiqlərdə sistem inteqrasiyaları istifadəçiyə tətbiqi açmadan Fayllar tətbiqindən tətbiq fayllarını idarə etməyə imkan verir.
class MyFileProviderExtension: NSFileProviderExtension {
override func item(for identifier: NSFileProviderItemIdentifier) throws -> NSFileProviderItem {
return MyFileProviderItem(identifier: identifier)
}
}
Nümunə Swift-də File Provider Extension-ın minimum tətbiqini göstərir. item(for:) metodu identifikatorla NSFileProviderItem obyektini qaytarır — sistem Fayllar tətbiqində faylları göstərərkən onu çağırır.
Tez-tez Verilən Suallar
Tətbiq Uzantıları tətbiqin funksionallığını onun prosesindən kənara genişləndirən ayrı ikili fayllardır: Today Widget, Share Extension, Action Extension, Keyboard Extension və təcrid olunmuş mühitdə işləyən digər növlər.
CallKit VoIP zənglərini sistem zəng interfeysinə inteqrasiya edir və kilitli ekranda göstərir. PushKit fon push bildirişlərini istifadəçiyə göstərmədən çatdırır — daxil olan zəng haqqında məlumat kimi məlumatları emal etmək üçün tətbiqi oyadır.
BroadcastReceiver sistem yayım mesajlarına reaksiya verən Android komponentidir: cihaz yüklənməsi (BOOT_COMPLETED), şəbəkə bağlantısı (CONNECTIVITY_ACTION), təyyarə rejimi dəyişiklikləri və digər əməliyyat sistemi hadisələri.
Vidjet interfeysi yaratmaq üçün AppWidgetProvider-ı RemoteViews ilə və ya Kotlin DSL yanaşması üçün Glance API (Jetpack) istifadə edin. Vidjet ölçü və yeniləmə tezliyini göstərən XML təsviri vasitəsilə manifestdə qeydiyyatdan keçirilir.
Content Provider ContentResolver vasitəsilə tətbiqlər arasında məlumat paylaşmaq üçün Android komponentidir. Kontaktlara, media fayllara və digər tətbiqlərdən strukturlaşdırılmış məlumatlara giriş üçün istifadə olunur.
Xülasə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.