App Extensions và Tích hợp Hệ thống trong Phát triển Di động: Khái niệm, Loại và Cách Hoạt động

Tác giả: IT Sectr Đã đăng: 2026-06-22 Thời gian đọc: 11 phút

App Extensions là các mô-đun thực thi riêng biệt mở rộng khả năng của ứng dụng di động ra ngoài giao diện chính: Today Widget trên màn hình chính, xử lý cuộc gọi VoIP qua CallKit và phản ứng với sự kiện hệ thống qua BroadcastReceiver. Tích hợp hệ thống cho phép ứng dụng tương tác với hệ điều hành ở cấp độ sâu, mở khóa các chức năng không có sẵn trên các màn hình thông thường. Theo Tài liệu Nhà phát triển Apple, mỗi extension chạy trong một tiến trình cách ly và được hệ thống quản lý độc lập với ứng dụng chính. App Extensions trong ứng dụng di động cho phép triển khai các chức năng không có sẵn trong tiến trình chính.

Các điểm chính

  • App Extensions — các tệp nhị phân riêng biệt trong ứng dụng mở rộng chức năng ra ngoài tiến trình chính
  • CallKit — framework để tích hợp cuộc gọi VoIP vào giao diện cuộc gọi hệ thống iPhone
  • BroadcastReceiver — thành phần Android phản ứng với thông điệp phát sóng hệ thống
  • AppWidgetProvider — lớp cơ sở để tạo widget trên Android với hỗ trợ RemoteViews
  • Content Provider — thành phần Android để chia sẻ dữ liệu giữa các ứng dụng qua ContentResolver

App Extensions trên iOS: widget và extension chia sẻ nội dung

App Extensions trên iOS xuất hiện trong iOS 8 và trở thành nền tảng cho tích hợp hệ thống trong phát triển di động. Đây là các tệp nhị phân riêng biệt được đóng gói cùng với ứng dụng chính nhưng được khởi chạy trong một tiến trình cách ly. Mỗi extension có Info.plist riêng và điểm vào được xác định qua NSExtensionPrincipalClass. Hệ thống quản lý vòng đời của App Extensions — chúng không thể ở lại nền sau khi hoàn thành tác vụ.

WidgetKit và Today Widget

WidgetKit (iOS 14+) là framework hiện đại để tạo widget trên màn hình chính. WidgetKit sử dụng SwiftUI để mô tả giao diện và TimelineProvider để xác định lịch cập nhật. Widget có ba kích thước: nhỏ (2×2 ô), vừa (4×2) và lớn (4×4). Today Widget cũ dựa trên UICollectionViewController vẫn được hỗ trợ, nhưng Apple khuyên nên di chuyển sang WidgetKit. App Extensions trên WidgetKit không hỗ trợ hoạt ảnh, nhập bàn phím hay cử chỉ — chúng là các phần tử tĩnh hoặc giả động với cập nhật định kỳ.

Share Extension và Action Extension

Share Extension cho phép gửi nội dung từ bất kỳ ứng dụng nào đến ứng dụng của bạn qua bảng chia sẻ hệ thống. Share Extension nhận dữ liệu qua NSExtensionItem và sử dụng SLComposeServiceViewController cho giao diện. Action Extension xử lý nội dung tại chỗ — ví dụ: dịch văn bản trong trình duyệt mà không chuyển sang ứng dụng khác. Cả hai loại phải hoàn thành công việc trong thời gian giới hạn, nếu không hệ thống sẽ "giết" extension. Đây là hạn chế quan trọng của App Extensions trong ứng dụng di động — tác vụ nền không khả dụng ở cấp độ extension.

CallKit, PushKit và SiriKit — tích hợp hệ thống cho giọng nói và thông báo

Tích hợp hệ thống trên iOS vượt xa widget: CallKit, PushKit và SiriKit cho phép ứng dụng di động hoạt động ở cấp độ hệ thống. Các framework này yêu cầu entitlements đặc biệt nhưng mang lại trải nghiệm liền mạch cho người dùng — cuộc gọi qua CallKit trông như cuộc gọi điện thoại thông thường và Siri xử lý yêu cầu mà không cần mở ứng dụng.

CallKit — cuộc gọi VoIP trong giao diện hệ thống

CallKit tích hợp cuộc gọi của ứng dụng bên thứ ba vào màn hình cuộc gọi hệ thống, bao gồm cả màn hình khóa. CXProvider đăng ký ứng dụng như một dịch vụ VoIP và CXCallController quản lý cuộc gọi. CallKit tự động chặn cuộc gọi trùng lặp và hỗ trợ Call Directory Extension để chặn số không mong muốn. Tích hợp hệ thống trong phát triển di động với CallKit rất quan trọng đối với ứng dụng liên lạc thoại — WhatsApp, Skype và Zoom sử dụng nó để hiển thị cuộc gọi đến.

PushKit — thông báo push nền

PushKit gửi thông báo push trực tiếp đến ứng dụng di động mà không hiển thị cho người dùng. PushKit đánh thức ứng dụng từ trạng thái "bị giết" và truyền dữ liệu qua delegate PKPushRegistryDelegate. Đây là cơ chế chính cho ứng dụng VoIP: PushKit gửi thông tin cuộc gọi và CallKit hiển thị nó. PushKit có ưu tiên gửi cao hơn thông báo push thông thường và không yêu cầu hiển thị biểu ngữ. App Extensions trong ứng dụng di động thường kết hợp PushKit với CallKit để liên lạc thoại.

SiriKit và Intents Extension

SiriKit cho phép xử lý yêu cầu qua Siri và ứng dụng Phím tắt. Intents Extension là một App Extension riêng biệt đăng ký các ý định được hỗ trợ và xử lý chúng. SiriKit hỗ trợ hơn 20 lĩnh vực: cuộc gọi, tin nhắn, thanh toán, ghi chú, tập luyện. Phím tắt cho phép người dùng tạo tự động hóa — ví dụ: "Gửi tin nhắn trong WhatsApp qua Siri." Tích hợp hệ thống với SiriKit và Phím tắt tăng mức độ tương tác vì người dùng thực hiện hành động mà không cần mở ứng dụng.

BroadcastReceiver và dịch vụ hệ thống trên Android

BroadcastReceiver là thành phần Android phản ứng với thông điệp phát sóng hệ thống. Không giống như App Extensions iOS, BroadcastReceiver không yêu cầu tệp nhị phân riêng — chỉ cần đăng ký bộ thu trong tệp kê khai hoặc trong mã qua Context.registerReceiver. Tích hợp hệ thống trên Android thường bắt đầu với BroadcastReceiver: từ khởi động dịch vụ khi thiết bị khởi động đến phản ứng với kết nối mạng.

IntentFilter cho sự kiện hệ thống

IntentFilter liên kết BroadcastReceiver với một sự kiện hệ thống cụ thể. Các sự kiện điển hình: BOOT_COMPLETED (khởi động thiết bị), CONNECTIVITY_ACTION (thay đổi mạng), BATTERY_LOW (pin yếu), TIME_SET (thay đổi thời gian). Bộ thu được đăng ký trong AndroidManifest.xml hoặc qua Context.registerReceiver để đăng ký động. Đăng ký động được ưu tiên hơn — không yêu cầu quyền trong tệp kê khai và chỉ hoạt động khi ứng dụng đang hoạt động. App Extensions trên Android không tồn tại như một khái niệm, nhưng BroadcastReceiver thực hiện vai trò tương tự — nó mở rộng khả năng của ứng dụng thông qua tích hợp hệ thống.

NotificationListenerService và AccessibilityService

NotificationListenerService là dịch vụ nhận tất cả thông báo hệ thống. NotificationListenerService yêu cầu quyền BIND_NOTIFICATION_LISTENER_SERVICE và truy cập qua cài đặt trợ năng. AccessibilityService là công cụ mạnh mẽ hơn cho tích hợp hệ thống: nó có thể đọc nội dung màn hình, mô phỏng nhấp chuột và tự động hóa hành động. Cả hai dịch vụ đều yêu cầu người dùng bật tường minh trong cài đặt, giúp tăng bảo mật. Tích hợp hệ thống trong ứng dụng di động qua AccessibilityService được sử dụng cho bộ tự động điền, trình đọc màn hình và công cụ trợ năng.

kotlin
class BootReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        if (intent.action == Intent.ACTION_BOOT_COMPLETED) {
            WorkManager.getInstance(context)
                .enqueueUniqueWork("post-boot", ...)
        }
    }
}

Ví dụ đăng ký BroadcastReceiver cho sự kiện BOOT_COMPLETED. WorkManager được sử dụng để thực thi tác vụ trì hoãn sau khi khởi động thiết bị — đây là cách tiếp cận tiêu chuẩn cho ứng dụng Android.

App Widget Provider — tạo widget trên Android

App Widget Provider trên Android là đối tác của App Extensions iOS trong bối cảnh widget: là thành phần hiển thị nội dung tương tác trên màn hình chính. Không giống WidgetKit, widget Android có thể chấp nhận đầu vào của người dùng — nhấp chuột, công tắc và cử chỉ. App Widget Provider được đăng ký trong tệp kê khai qua mô tả XML về kích thước và tần suất cập nhật.

RemoteViews và AppWidgetProvider

RemoteViews mô tả giao diện widget qua bố cục XML và chỉ hỗ trợ một tập hợp View giới hạn. RemoteViews không cho phép View tùy chỉnh — chỉ các thành phần tiêu chuẩn: TextView, ImageView, Button, ProgressBar. AppWidgetProvider là lớp cơ sở xử lý cập nhật, kích hoạt và xóa widget. Phương thức onUpdate được gọi qua bộ hẹn giờ thông qua updatePeriodMillis hoặc qua WorkManager để kiểm soát chính xác. Tích hợp hệ thống với widget trên Android cần thận trọng — cập nhật quá thường xuyên sẽ hao pin.

Glance API (Jetpack) — cách tiếp cận hiện đại

Glance API là thư viện Jetpack để tạo widget bằng Kotlin DSL thay vì XML. Glance API biên dịch thành RemoteViews và hỗ trợ cú pháp giống Compose: GlanceComposable, Column, Row, Text. Thư viện giải quyết vấn đề mã XML phức tạp và cho phép kiểm thử widget qua JUnit. Glance API chưa hỗ trợ tất cả tính năng RemoteViews — đối với widget tương tác phức tạp, cách tiếp cận cổ điển tốt hơn. App Extensions trong phát triển di động trên Android đang tiến hóa theo hướng Glance API, đơn giản hóa việc tạo và bảo trì widget.

Content Provider, FileProvider và chia sẻ dữ liệu giữa các ứng dụng

Content Provider là thành phần Android để chia sẻ dữ liệu có cấu trúc giữa các ứng dụng qua giao diện ContentResolver thống nhất. Không giống App Extensions iOS, Content Provider không tạo tiến trình riêng — dữ liệu được yêu cầu đồng bộ trong ngữ cảnh của ứng dụng gọi. Content Provider là nền tảng của tích hợp hệ thống trên Android: danh bạ, tệp phương tiện, lịch và ứng dụng tiêu chuẩn sử dụng nó để xuất bản dữ liệu.

FileProvider để chia sẻ tệp an toàn

FileProvider là lớp con của ContentProvider để truyền tệp an toàn giữa các ứng dụng. FileProvider tạo URI content:// tạm thời thay vì đường dẫn file:// trực tiếp bị cấm trên Android 7+. Để sử dụng, cần chỉ định files-path hoặc external-files-path trong cấu hình XML. App Extensions trong phát triển di động trên Android không tồn tại như một khái niệm riêng biệt, nhưng FileProvider thực hiện chức năng của chúng — nó mở rộng khả năng chia sẻ dữ liệu ra ngoài một ứng dụng.

Đối tác iOS: File Provider Extension

Trên iOS, vai trò chia sẻ tệp được thực hiện bởi File Provider Extension. File Provider Extension xuất bản tệp của ứng dụng trong ứng dụng Tệp qua NSFileProviderManager. Không giống FileProvider, extension iOS yêu cầu tệp nhị phân riêng và chạy trong tiến trình cách ly. File Provider Extension hỗ trợ NSFileProviderItem để mô tả tệp và NSFileProviderEnumerator để điều hướng thư mục. Tích hợp hệ thống trong ứng dụng di động qua File Provider Extension cho phép người dùng quản lý tệp ứng dụng từ ứng dụng Tệp mà không cần mở nó.

swift
class MyFileProviderExtension: NSFileProviderExtension {
    override func item(for identifier: NSFileProviderItemIdentifier) throws -> NSFileProviderItem {
        return MyFileProviderItem(identifier: identifier)
    }
}

Ví dụ cho thấy triển khai tối thiểu của File Provider Extension trong Swift. Phương thức item(for:) trả về đối tượng NSFileProviderItem theo định danh — hệ thống gọi nó khi hiển thị tệp trong ứng dụng Tệp.

Câu hỏi thường gặp

App Extensions trên iOS là gì?

App Extensions là các tệp nhị phân riêng biệt mở rộng chức năng ứng dụng ra ngoài tiến trình của nó: Today Widget, Share Extension, Action Extension, Keyboard Extension và các loại khác chạy trong môi trường cách ly.

CallKit khác PushKit như thế nào?

CallKit tích hợp cuộc gọi VoIP vào giao diện cuộc gọi hệ thống với hiển thị trên màn hình khóa. PushKit gửi thông báo push nền mà không hiển thị cho người dùng — nó đánh thức ứng dụng để xử lý dữ liệu, như thông tin về cuộc gọi đến.

BroadcastReceiver trên Android là gì?

BroadcastReceiver là thành phần Android phản ứng với thông điệp phát sóng hệ thống: khởi động thiết bị (BOOT_COMPLETED), kết nối mạng (CONNECTIVITY_ACTION), thay đổi chế độ máy bay và các sự kiện hệ điều hành khác.

Làm thế nào để tạo widget trên Android?

Sử dụng AppWidgetProvider với RemoteViews để tạo giao diện widget hoặc Glance API (Jetpack) cho cách tiếp cận Kotlin DSL. Widget được đăng ký trong tệp kê khai qua mô tả XML chỉ định kích thước và tần suất cập nhật.

Content Provider dùng để làm gì?

Content Provider là thành phần Android để chia sẻ dữ liệu giữa các ứng dụng qua ContentResolver. Nó được sử dụng để truy cập danh bạ, tệp phương tiện và bất kỳ dữ liệu có cấu trúc nào từ các ứng dụng khác.

Tổng kết

  • App Extensions — nền tảng của tích hợp hệ thống trên iOS: widget, chia sẻ, xử lý nội dung và extension bàn phím trong các tiến trình cách ly
  • CallKit và PushKit — cặp framework cho cuộc gọi VoIP: PushKit gửi dữ liệu, CallKit hiển thị giao diện cuộc gọi
  • BroadcastReceiver — đối tác Android của App Extensions để phản ứng với sự kiện hệ thống mà không cần tệp nhị phân riêng
  • AppWidgetProvider — thành phần cho widget trên Android với hỗ trợ RemoteViews và Glance API
  • Content Provider và FileProvider — cơ chế chia sẻ dữ liệu giữa các ứng dụng trên Android qua ContentResolver
  • File Provider Extension — đối tác iOS của FileProvider để xuất bản tệp trong ứng dụng Tệp từ tiến trình cách ly
  • Tích hợp hệ thống trong phát triển di động hợp nhất App Extensions, BroadcastReceiver, CallKit và Content Provider thành một hệ sinh thái duy nhất

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án