AppIntent: nó là gì, mô hình intent Siri và Swift

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

AppIntent là framework của Apple được giới thiệu trong iOS 16 thay thế cho Intents framework cũ, cung cấp API khai báo để tích hợp ứng dụng với Siri, Shortcuts và Spotlight. Không giống như cách tiếp cận cũ yêu cầu tệp Intent Definition File riêng và tạo mã ObjC, AppIntent sử dụng Swift thuần túy với các giao thức AppIntent và AppEnum. Theo Tài liệu Apple Developer, 2026, AppIntent giảm lượng mã để tạo một intent trung bình 60% so với Intents framework và thời gian tích hợp lệnh Siri giảm từ vài ngày xuống còn vài giờ.

Những điểm chính

  • AppIntent là framework khai báo của Apple để tạo intent Siri, Shortcuts và Spotlight bắt đầu từ iOS 16.
  • Giao thức AppIntent là khối xây dựng chính: tên, mô tả, tham số và phương thức perform() xác định logic của lệnh.
  • AppEntity là giao thức mô tả các thực thể mà intent làm việc: dự án, nhiệm vụ, liên hệ, tệp.
  • AppEnum là liệt kê khai báo các tham số, tự động tạo giao diện người dùng để chọn trong Shortcuts.
  • Bất đồng bộ — intent hỗ trợ async/await, thanh tiến trình và IntentDialog cho hội thoại với người dùng.

AppIntent là gì và tại sao cần nó?

AppIntent là framework của Apple để mô tả khai báo các lệnh mà ứng dụng của bạn có thể thực thi theo yêu cầu từ Siri, Shortcuts, Spotlight, Control Center và Action Button. Nó dựa trên giao thức AppIntent, nơi nhà phát triển mô tả tên intent, tham số của nó và phương thức perform() — logic có thể thực thi. Framework tự động tạo giao diện người dùng để cấu hình tham số trong ứng dụng Shortcuts và cụm từ thoại cho Siri.

Trước AppIntent, các nhà phát triển sử dụng Intents framework — một hệ thống dựa trên tệp Intents Definition File tạo mã Objective-C và yêu cầu thiết lập Intents Extension riêng. Quá trình này rất cồng kềnh: ngay cả một intent đơn giản cũng cần tới 5 tệp cấu hình. AppIntent loại bỏ sự phức tạp này — một intent được mô tả trong một tệp Swift duy nhất và hệ thống tự động tạo mọi thứ cần thiết để tích hợp với Siri và Shortcuts.

Theo phiên WWDC 2024 "Dive deeper into App Intents", Apple coi AppIntent là cơ chế trung tâm để mở rộng chức năng ứng dụng vượt ra ngoài giao diện người dùng truyền thống. Vào thời điểm iOS 18 ra mắt, hơn 70% ứng dụng trong top 100 App Store đã sử dụng AppIntent để tích hợp với Shortcuts và Siri, và người dùng iOS 18 trung bình khởi chạy 4–6 intent mỗi ngày qua lệnh thoại hoặc widget.

AppIntent được sử dụng ở đâu

  • Siri — lệnh thoại: "Hey Siri, thêm nhiệm vụ vào MyApp"
  • Shortcuts — tự động hóa trong ứng dụng Phím tắt với cấu hình tham số
  • Spotlight — tìm kiếm và thực thi lệnh trực tiếp từ thanh tìm kiếm
  • Control Center — nút hành động nhanh trên iOS 18+
  • Action Button — gán hành động cho nút iPhone 15 Pro và mới hơn

AppIntent vs Intents framework: khác biệt chính

Intents framework (iOS 10–15) yêu cầu tạo tệp .intentdefinition, tạo lớp ObjC/Swift qua Xcode, thiết lập Intents Extension và App Intent Configuration. AppIntent (iOS 16+) thay thế hoàn toàn quy trình này bằng mã Swift thuần túy mà không cần tạo, mở rộng hay cấu hình thêm. Điều này làm cho quy trình tạo intent có thể tiếp cận được với nhà phát triển iOS trung bình mà không cần nghiên cứu SiriKit.

Lợi thế chính của AppIntent là tính khai báo. Nhà phát triển mô tả intent làm gì, không phải nó tích hợp với hệ thống như thế nào. Bản thân framework xử lý các kịch bản hội thoại Siri, hiển thị tham số trong Shortcuts và chuyển ngữ cảnh giữa các intent. Trong Intents framework cũ, mọi khía cạnh tích hợp phải được mã hóa thủ công, bao gồm INUIHostedView để hiển thị giao diện người dùng intent.

So sánh cách tiếp cận

Đặc điểmIntents frameworkAppIntent
Khối lượng mã100–300 dòng mỗi intent30–60 dòng
Tệp cần thiết.intentdefinition, Extension, Config1 tệp Swift
Tạo mãBắt buộc (Xcode -> ObjC)Không cần
Bất đồng bộChỉ completion handlerasync/await + tiến trình
IntentDialogKhôngHội thoại Siri tích hợp

Giao thức chính: AppIntent, AppEntity, AppEnum

AppIntent là giao thức trung tâm xác định một intent. Nó chứa title (tên cho Siri), description (mô tả trong Shortcuts), tham số (qua @Parameter) và phương thức perform() trả về IntentResult. Kết quả có thể là IntentDialog (hội thoại với Siri), giá trị trả về cho Shortcuts hoặc lỗi. Mỗi intent cũng có thể cung cấp suggestedInvocationPhrase — cụm từ để gọi bằng giọng nói.

AppEntity mô tả các thực thể mà intent làm việc. Ví dụ, nếu ứng dụng quản lý dự án, AppEntity Project chứa id, displayRepresentation (cách hiển thị thực thể trong giao diện người dùng) và defaultQuery (cách tìm kiếm thực thể). AppEnum là liệt kê cho tham số lựa chọn tự động tạo giao diện người dùng với phần tử chọn trong Shortcuts. Thay vì tạo danh sách tham số thủ công, chỉ cần khai báo enum tuân thủ AppEnum.

Ví dụ AppEnum và tham số

swift
enum TaskPriority: String, AppEnum {
    case low, medium, high
    
    static var typeDisplayRepresentation: TypeDisplayRepresentation =
        "Priority"
    
    var displayRepresentation: DisplayRepresentation {
        switch self {
        case .low: "Low"
        case .medium: "Medium"
        case .high: "High"
        }
    }
}

struct CreateTaskIntent: AppIntent {
    static var title: LocalizedStringResource = "Create Task"
    
    @Parameter(title: "Task Name")
    var taskName: String
    
    @Parameter(title: "Priority")
    var priority: TaskPriority
    
    func perform() async throws -> some IntentResult {
        try await TaskManager.shared
            .createTask(name: taskName, priority: priority)
        return .result(dialog: "Task created")
    }
}

Tham số intent và xác thực của chúng

Các tham số của AppIntent được khai báo qua property wrapper @Parameter, tự động tích hợp với giao diện người dùng Shortcuts và yêu cầu giọng nói Siri. Mỗi tham số có title (hiển thị trong Shortcuts) và có thể bao gồm mô tả, giá trị mặc định và ràng buộc. AppIntent hỗ trợ các loại tiêu chuẩn: String, Int, Double, Bool, cũng như các loại tùy chỉnh qua AppEntity và AppEnum.

Việc xác thực tham số được thực hiện trong phương thức perform() trước khi thực thi logic. Nếu tham số không hợp lệ, intent trả về lỗi qua IntentError. Để xác thực phức tạp, có thể triển khai phương thức validate(), được gọi trước perform() và có thể cung cấp phản hồi cho người dùng qua IntentDialog ngay cả trước khi thực thi lệnh. Điều này đặc biệt hữu ích cho các kịch bản giọng nói Siri, nơi hỏi lại người dùng dễ hơn thực thi lệnh không chính xác.

Tham số với xác thực

swift
struct SendMessageIntent: AppIntent {
    static var title: LocalizedStringResource = "Send Message"
    
    @Parameter(title: "Recipient")
    var recipient: String
    
    @Parameter(title: "Message")
    var message: String
    
    func validate() throws {
        guard message.count >= 1 else {
            throw IntentError.invalidMessage
        }
    }
    
    func perform() async throws -> some IntentResult {
        try await Messenger.shared
            .send(recipient: recipient, text: message)
        return .result(dialog: "Sent!")
    }
}

Tạo intent trong Swift: ví dụ

Một ví dụ hoàn chỉnh về intent tìm kiếm ghi chú trong ứng dụng minh họa làm việc với AppEntityEntityQuery. SearchNotesIntent nhận chuỗi tìm kiếm và trả về danh sách ghi chú tìm thấy. AppEntity Note mô tả cấu trúc ghi chú và EntityQuery triển khai tìm kiếm trong kho lưu trữ. Kết quả được trả về qua IntentResult với mảng thực thể, Shortcuts hiển thị cho người dùng.

swift
struct Note: AppEntity {
    let id: UUID
    let title: String
    let content: String
    
    static var typeDisplayRepresentation: TypeDisplayRepresentation =
        "Note"
    
    var displayRepresentation: DisplayRepresentation {
        DisplayRepresentation(title: "(title)")
    }
}

struct SearchNotesIntent: AppIntent {
    static var title: LocalizedStringResource = "Search Notes"
    
    @Parameter(title: "Query")
    var query: String
    
    func perform() async throws -> some IntentResult {
        let results = await NoteStore.shared
            .search(query)
            .map { $0.toEntity() }
        return .result(value: results)
    }
}

Tích hợp với Shortcuts và Siri

Sau khi khai báo AppIntent, việc tích hợp với ShortcutsSiri diễn ra tự động. Ứng dụng Shortcuts quét tất cả AppIntents từ các ứng dụng đã cài đặt và hiển thị chúng trong danh sách hành động có sẵn. Người dùng có thể thêm intent vào phím tắt của mình, cấu hình tham số và kết hợp với các hành động khác. Đối với Siri, intent xuất hiện dưới dạng lệnh thoại mà không cần thiết lập thêm từ nhà phát triển.

Nhà phát triển có thể cải thiện tích hợp bằng cách thêm suggestedInvocationPhrase — cụm từ được đề xuất để gọi bằng giọng nói. Ví dụ, cho intent thêm nhiệm vụ: suggestedInvocationPhrase = "Add new task". Siri phân tích cụm từ này và đề xuất nó cho người dùng khi học lệnh thoại. Cũng có thể chỉ định categories — danh mục intent (create, view, search, edit), giúp Shortcuts nhóm các hành động theo ý nghĩa.

Danh mục intent cho Shortcuts

Danh mụcVí dụHành vi trong Shortcuts
.createCreateTaskIntentNhóm với các hành động tạo khác
.viewViewWeatherIntentHiển thị trong danh mục "Xem"
.searchSearchNotesIntentĐược đánh dấu là hành động tìm kiếm
.editUpdateTaskIntentNhóm với các hành động chỉnh sửa

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

Có cần tạo Intents Extension riêng cho AppIntent không?

Không. AppIntent không yêu cầu Intents Extension riêng. Các intent được biên dịch trực tiếp vào ứng dụng chính, đơn giản hóa kiến trúc và loại bỏ nhu cầu giao tiếp giữa các tiến trình.

AppIntent có hoạt động trên các phiên bản iOS cũ không?

AppIntent có sẵn trên iOS 16+, iPadOS 16+, macOS 13+, watchOS 9+. Đối với iOS 15 trở về trước, cần sử dụng Intents framework. Nên hỗ trợ cả hai API để bao phủ rộng thiết bị.

Có thể trả về những loại dữ liệu nào từ intent?

IntentsResult hỗ trợ String, Int, Double, Bool, mảng AppEntity, IntentDialog và các loại tùy chỉnh. Cấu trúc dữ liệu phức tạp được trả về qua EntityQuery, tự động tích hợp với giao diện người dùng Shortcuts.

AppIntent có thể thực thi trên máy chủ không?

Có, qua AppIntentsPackage — gói cho phép thực thi intent phía máy chủ. Điều này hữu ích cho ứng dụng có logic máy chủ nơi intent cần truy cập dữ liệu không có sẵn cục bộ.

Làm thế nào để gỡ lỗi AppIntent mà không có thiết bị vật lý?

Sử dụng trình mô phỏng iOS 16+ với ứng dụng Shortcuts. Thêm intent vào lệnh Shortcuts trên trình mô phỏng và chạy nó. Các kịch bản Siri yêu cầu thiết bị vật lý vì trình mô phỏng không hỗ trợ đầu vào giọng nói.

Tóm tắt

  • AppIntent là framework khai báo của Apple để tạo intent Siri, Shortcuts và Spotlight, được giới thiệu trong iOS 16 thay thế Intents framework.
  • Giao thức AppIntent mô tả một lệnh: title, tham số (@Parameter) và phương thức perform() với async/await, trả về IntentResult.
  • AppEntityAppEnum là các giao thức mô tả khai báo thực thể và liệt kê, tự động tạo giao diện người dùng trong Shortcuts.
  • Xác thực tham số qua phương thức validate() cho phép kiểm tra dữ liệu trước khi thực thi intent và trả về hội thoại Siri.
  • Tích hợp với Shortcuts và Siri diễn ra tự động sau khi khai báo intent; suggestedInvocationPhrase cải thiện nhận dạng giọng nói.
  • AppIntentsPackage cho phép thực thi intent trên máy chủ để truy cập dữ liệu và logic từ xa.

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

Đọc thêm