-
Créez des expériences Siri intelligentes avec App Schemas
Intégrez le contenu et les actions de votre app à Siri avec App Intents. Modélisez vos données à l'aide des App Entities, adoptez des App Schemas pour permettre des actions système puissantes et prenez en charge les interactions en langage naturel alimentées par Apple Intelligence. Découvrez comment activer la recherche sémantique, effectuer des actions à travers différentes apps et créer des expériences contextuelles grâce à la compréhension des éléments affichés à l'écran et du transfert de contenu. Découvrez les bonnes pratiques et les outils de test pour créer des expériences Siri rapides et fiables.
Chapitres
- 0:00 - Introduction
- 1:06 - Nouveautés de Siri
- 4:06 - Ajout de contenu avec les App Entities
- 6:21 - Résolution des entités et IndexedEntity
- 9:49 - Rendre les actions disponibles
- 12:03 - Adoption d’un domaine de schéma dans UnicornChat
- 15:39 - Transférer du contenu entre les apps
- 16:00 - Fonctionnement entre apps : compréhension du contexte à l’écran
- 21:09 - Bonnes pratiques
- 24:18 - Tests de votre intégration
- 26:21 - Étapes suivantes
Ressources
- 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
Vidéos connexes
WWDC26
-
Rechercher dans cette vidéo…
-
-
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 }) } }
-