-
使用 App Schemas 打造智能 Siri 体验
利用 App Intents,将你 App 的内容和操作带到 Siri。通过 App Entities 对数据进行建模,使用 App Schemas 实现强大的系统操作,并为依托 Apple 智能的自然语言交互提供支持。探索如何启用语义搜索、跨 App 执行操作,以及利用屏幕感知和内容传输功能打造贴合情境的用户体验。了解一些最佳做法和测试工具,助你构建快速、可靠的 Siri 体验。
章节
- 0:00 - Introduction
- 1:06 - What's new in Siri
- 4:06 - Contributing content with App Entities
- 6:21 - Entity resolution and IndexedEntity
- 9:49 - Making actions available
- 12:03 - Adopting a schema domain in UnicornChat
- 15:39 - Moving content across apps
- 16:00 - Working across apps: onscreen awareness
- 21:09 - Best practices
- 24:18 - Testing your integration
- 26:21 - Next steps
资源
- Integrating your messaging app with Apple Intelligence
- Donating your app’s data and actions to the system
- Making app entities available in Spotlight
- Making actions and content discoverable by Apple Intelligence
- Providing contextual cues to Apple Intelligence and Siri
- Apple Intelligence and Siri AI
- Messages
- App schema domains
相关视频
WWDC26
-
搜索此视频…
-
-
7:59 - Contributing message content to Apple Intelligence
// Contributing message content to Apple Intelligence @AppEntity(schema: .messages.message) struct MessageEntity: IndexedEntity { // The text content of the message @Property(indexingKey: \.textContent) var body: AttributedString? } -
8:36 - An interface that locates entities using arbitrary string input
// An interface that locates entities using arbitrary string input struct ContactQuery: EntityStringQuery { func entities(matching string: String) async throws -> [ContactEntity] { let predicate = #Predicate<Person> { person in person.name.localizedStandardContains(string) } let descriptor = FetchDescriptor<Person>(predicate: predicate) let matches = try modelContext.fetch(descriptor) return matches.map(\.entity) } } -
17:19 - Working across apps - View annotations
// Working across apps - View annotations List { ForEach(messages) { message in MessageRow(message: message) .appEntityIdentifier( EntityIdentifier( for: MessageEntity.self, identifier: message.id ) ) } } -
18:18 - Working across apps - Exporting content to another app
// Working across apps - Exporting content to another app extension ContactEntity: Transferable { static var transferRepresentation: some TransferRepresentation { IntentValueRepresentation( exporting: \.person ) } } -
19:21 - Working across apps - IntentValueQuery
// Working across apps - IntentValueQuery struct ContactEntityQuery: IntentValueQuery { func values(for input: [IntentPerson]) async throws -> [ContactEntity] { let names = input.map(\.displayName) let descriptor = FetchDescriptor<Contact>() let contacts = try model.mainContext.fetch(descriptor) let matches = contacts.filter { contact in names.contains(where: { name in contact.name.localizedStandardContains(name) }) } return matches.map(\.entity) } } -
20:00 - Working across apps - IntentValueRepresentation
// Working across apps - IntentValueRepresentation extension ContactEntity: Transferable { static var transferRepresentation: some TransferRepresentation { IntentValueRepresentation(exporting: \.person, importing: { intentPerson in let contact = Contact(importing: intentPerson) ContactManager.shared.contacts.append(contact) return contact.entity }) } }
-
-
- 0:00 - Introduction
How App Intents bring your app to Siri, made more capable, contextual, and personal by Apple Intelligence in the 27 releases. Previews the agenda: what's new, contributing content, making actions available, working across apps, and best practices.
- 1:06 - What's new in Siri
Siri gains three capabilities built on App Intents: accessing your app's entities, taking action through your intents, and understanding onscreen context. Introduces the UnicornChat sample app used throughout the session.
- 4:06 - Contributing content with App Entities
Model your app's content as App Entities (what a thing is, how it's identified, and which properties matter), then conform them to an App Schema so Siri understands the category of content.
- 6:21 - Entity resolution and IndexedEntity
How Siri resolves spoken references to real entities. Adopt IndexedEntity for semantic search and content Q&A over indexed content, using indexingKey to mark searchable properties, or EntityStringQuery when data can't be indexed ahead of time.
- 9:49 - Making actions available
App Intents expose actions across Shortcuts, Spotlight, and Widgets. Conforming intents to App Schemas, and grouping them into App Schema domains, makes those actions executable by Siri through natural language.
- 12:03 - Adopting a schema domain in UnicornChat
End-to-end walkthrough of adopting the Messages domain's sendMessage schema: mapping schema parameters onto UnicornChat's messaging flow and returning the sent message as an entity, so Siri can send messages without opening the app.
- 15:39 - Moving content across apps
Export entities with Transferable and IntentValueRepresentation so other apps can act on them. On import, use IntentValueQuery to match existing content or IntentValueRepresentation(importing:) to create something new.
- 16:00 - Working across apps: onscreen awareness
Requests that span apps rely on onscreen awareness. Connect views to App Entities, via NSUserActivity for a single primary item or view annotations for multiple visible items, so Siri can resolve references like "this" and "that."
- 21:09 - Best practices
Design for complete Siri conversations by adopting full schema sets. Xcode surfaces missing related schemas (for example draftMessage alongside sendMessage) at build time with Fix-Its.
- 24:18 - Testing your integration
Validate progressively: App Intents Testing for business logic in isolation, then the Shortcuts app for intent shape, Spotlight for content indexing, and finally Siri for the full end-to-end experience.
- 26:21 - Next steps
Model and index entities, adopt the App Schema domains matching your app, enable content transfer with Transferable, and test early with Shortcuts, Spotlight, and Siri.