Intents Extension, üçüncü taraf uygulamaların Siri sesli komutlarını işlemesine ve SiriKit aracılığıyla sistem hizmetleriyle etkileşime girmesine olanak tanıyan bir iOS uzantısıdır. Uygulama, Intents.intentdefinition içinde kendi intent'lerini tanımlar, INIntentHandler tabanlı işleyicileri uygular ve sesli ifade tanıma için bunları kaydeder. Apple Developer Documentation (2025)'e göre SiriKit, mesajlaşma ve ödemelerden egzersiz ve rezervasyonlara kadar 20'den fazla intent alanını destekler ve iOS 14'ten itibaren IntentsExtension aracılığıyla özel intent desteği eklenmiştir.
Temel Noktalar
Intents Extension, Siri, Shortcuts ve diğer sistem hizmetlerinin standartlaştırılmış INIntentHandler protokolü aracılığıyla uygulama işlevselliğini çağırmasına olanak tanıyan bir uygulama uzantısıdır. Bir kullanıcı “Hey Siri, Messenger X'te mesaj gönder” dediğinde, Siri ilgili uzantıyı etkinleştirir, istek parametrelerini iletir ve seslendirme için sonucu alır.
Diğer uzantı türlerinin aksine, Intents Extension görünür bir arayüz olmadan arka planda çalışır — Siri yanıtı ses veya metin kartıyla görüntüler. Uzantı, isteğe bağlı olarak INUIHostedViewProviding aracılığıyla özel bir kullanıcı arayüzü sağlayabilir ve bu arayüz, onay için bir komut yürütülmeden önce Siri içinde görüntülenir.
Uzantının cihaz ekranına erişimi yoktur ve kendi başına eylem başlatamaz — yalnızca Siri veya Shortcuts'tan gelen bir isteğe yanıt olarak çalışır. Bu, güvenliği sağlar: kullanıcı, uygulamanın sesli komutlarla hangi eylemleri gerçekleştirdiğini her zaman kontrol eder.
SiriKit, iOS 10'da tanıtılan Siri entegrasyonu için Apple'ın framework'üdür. Siri'nin işleyebileceği eylem kategorilerini (mesajlar, telefon görüşmeleri, ödemeler, listeler, hatırlatıcılar, fotoğraflar, egzersizler, rezervasyonlar ve diğerleri) tanımlar. Her alanın sabit bir intent ve yanıt kümesi vardır.
INSendMessageIntent — mesaj gönderme. INStartWorkoutIntent — egzersiz başlatma. INSearchForPhotosIntent — fotoğraf arama. INRequestRideIntent — araç çağırma. Her alan, Siri'nin sesli istekten çıkardığı zorunlu ve isteğe bağlı parametreleri tanımlar. Apple'a göre standart alanlar bir intentdefinition dosyası gerektirmez — ilgili işleyiciyi uygulamak yeterlidir.
Standart alanlara uymayan uygulamalar için iOS 14, özel intent kullanma olanağını sunmuştur. Uygulama, Intents.intentdefinition aracılığıyla kendi komut türlerini ve parametrelerini tanımlar ve Siri, geliştirici tarafından sağlanan örneklere dayanarak ilgili ifadeleri tanımayı öğrenir.
Intents Extension, Info.plist'te IntentsSupported anahtarı aracılığıyla kaydedilir ve uzantının işlediği tüm intent sınıflarını listeler. Siri, bir sesli komutu tanırken uygun uzantıyı seçmek için bu listeyi kullanır. Birden fazla uzantı aynı intent'i destekliyorsa, Siri kullanıcıdan seçim yapmasını ister.
class MessageIntentHandler: NSObject,
INSendMessageIntentHandling {
func handle(
intent: INSendMessageIntent,
completion: @escaping
(INSendMessageIntentResponse) -> Void
) {
let response = INSendMessageIntentResponse(
code: .success, userActivity: nil)
completion(response)
}
}
INIntentHandler, intent işlemenin her aşamasını (parametre çözümleme, onay ve yürütme) yönetmek için yöntemler tanımlayan bir protokoldür. Uzantı, desteklediği her intent türü için bu yöntemleri uygular.
resolve — intent parametrelerinin doğrulanması ve netleştirilmesi. Siri, her parametre için bu yöntemi çağırır. Bir parametre eksik veya hatalıysa, uzantı bir netleştirme talebi döndürür ve Siri kullanıcıya ek bir soru sorar. confirm — niyetin onaylanması. Uzantı, intent'i mevcut bağlamda yürütüp yürütemeyeceğini kontrol eder. handle — işlemin fiilen yürütülmesi ve sonucun döndürülmesi.
Üç aşamalı ayrım, sesli kullanıcı deneyimi için çok önemlidir: bir parametre tanınmazsa, Siri eylemi yürütmez, bunun yerine açıklama ister. Örneğin, kullanıcı “Alex'e mesaj gönder” dediyse ancak kişilerde üç Alex varsa — uzantı, netleştirme talebiyle bir resolve döndürür ve Siri “Hangi Alex?” diye sorar.
INIntentResponse, uzantının intent'i yürüttükten sonra tamamlama işleyicisinde döndürdüğü bir nesnedir. Yanıt, bir sonuç kodu (success, failure, requiresAuthentication, inProgress) ve Siri'nin seslendirmesi için isteğe bağlı veriler içerir. Kod, Siri'nin nasıl yanıt vereceğini belirler: success — sesli onay, failure — hata mesajı, inProgress — uzun süreli işlem göstergesi.
func resolve(
for intent: INSendMessageIntent,
with completion: @escaping
(INStringResolutionResult) -> Void
) {
if let text = intent.content, !text.isEmpty {
completion(.success(with: text))
} else {
completion(.needsValue())
}
}
iOS 14 ile geliştiriciler, standart SiriKit alanlarının dışında özel intent tanımlama yeteneği kazandı. Özel intent'ler, Intents.intentdefinition dosyasında — parametreler ve yanıtlarla yeni komut türlerinin oluşturulduğu Xcode içindeki görsel düzenleyicide — açıklanır.
Her özel intent, INIntent (istek tanımı) ve INIntentResponse (yanıt tanımı) olmak üzere iki bölümden oluşur. INIntent, String, Integer, CurrencyAmount, bulunan nesneler ve diğerleri gibi veri türlerine sahip parametreler içerir. INIntentResponse, sonuçları döndürmek için özellikler ve bir dizi yanıt kodu içerir. Xcode, bu tanıma dayanarak otomatik olarak Swift sınıfları oluşturur.
Apple, özel bir intent'te 5'ten fazla parametre bulunmamasını önerir — aşırı parametreler ses tanımayı bozar ve kullanıcı deneyimini karmaşıklaştırır. Her parametre için, Siri'nin bunları doğru şekilde tanımayı öğrenmesi için Asistan Diyaloğu'nda örnek ifadeler sağlanması önerilir.
Intents.intentdefinition içinde, her intent için örnek cümleler belirtebilirsiniz — kullanıcının intent'i etkinleştirmek için Siri'ye söyleyeceği ifadeler. Örnekler: “Uygulamamda kahve sipariş et”, “Uygulamamdan pizza tarifi bulmasını iste”. Siri, tanıma eğitimi için bu ifadeleri kullanır ve Shortcuts kurulumu sırasında kullanıcıya önerir.
// Intents.intentdefinition (görsel düzenleyici)
Intent: OrderCoffeeIntent
Parameters:
- beverage (String)
- size (String)
- quantity (Integer)
Response:
- orderNumber (String)
- price (CurrencyAmount)
Phrases:
- "Order coffee in MyApp"
- "Get a latte from MyApp"
INUIHostedViewProviding, Intents Extension'ın bir komutu yürütmeden önce Siri içinde özel bir arayüz göstermesine olanak tanıyan bir protokoldür. Örneğin, araç çağırma sırasında uzantı, rota ve ücreti gösteren bir harita görüntüleyebilir ve kullanıcı dokunarak eylemi onaylar.
Protokol, configure(with:for:completion:) yöntemini tanımlar; bu yöntemde uzantı intent'i alır ve Siri'ye gömülmek üzere bir UIViewController döndürür. Kontrolörün boyutu sınırlıdır — maksimum yükseklik 200 punto. Tutar, saat, adres gibi temel bilgileri içeren kompakt kartların kullanılması önerilir.
Özel arayüz isteğe bağlıdır — uzantı INUIHostedViewProviding'i uygulamazsa, Siri intent türü ve uygulama adıyla standart bir kart görüntüler. Çoğu intent için standart kullanıcı arayüzü yeterlidir ve Apple, yalnızca anlamayı gerçekten iyileştirdiğinde — örneğin bir rota göstermek veya ödemeyi onaylamak için — özel arayüz eklenmesini önerir.
Finans veya kişisel verilerle ilgili intent'ler için kimlik doğrulama gereklidir. INIntentResponse, yürütmeden önce Siri'yi Face ID veya Touch ID istemeye zorlayan requiresAuthentication kodunu destekler. Kimlik doğrulamadan sonra uzantı, kimlik doğrulama durumunun kontrol edildiği ayrı bir handle çağrısıyla onay alır.
Apple özellikle vurgular: Intents Extension kendi şifresini veya biyometrik verilerini istememelidir — sistem kimlik doğrulaması kullanılır. Uygulama ve uzantı arasında paylaşılan erişime sahip Keychain'de erişim token'ları depolamak, uzun süreli oturumlar için standart bir uygulamadır.
class IntentViewController: UIViewController {
func configure(
with intent: INIntent,
completion: @escaping
(UIViewController?) -> Void
) {
let cardView = ConfirmationCardView()
let hostingController =
UIHostingController(rootView: cardView)
completion(hostingController)
}
}
Sıkça Sorulan Sorular
Evet, uzantı sesli girdi olmadan Shortcuts uygulamasından intent'leri işleyebilir. Kullanıcı, önerilen eylemlerden bir kısayol oluşturur ve uzantı, Siri'nin katılımı olmadan bunu yürütür.
Özel intent'ler iOS 14 ve sonraki sürümlerde kullanılabilir. iOS 10–13 için yalnızca standart SiriKit alanları kullanılabilir. Özel intent'ler, Intents.intentdefinition ve Swift sınıfı oluşturma gerektirir.
Siri, uzantının yanıtını yaklaşık 15 saniye bekler. Limit aşılırsa, Siri kullanıcıya eylemin tamamlanamadığını bildirir. Uzun süreli işlemler için inProgress yanıt kodunu kullanın.
Ana uygulama ve uzantı arasında bir erişim grubu aracılığıyla paylaşılan erişime sahip Keychain kullanın. App Group shared UserDefaults bir alternatiftir ancak güvenlik açısından Keychain'den daha düşüktür.
Intents Extension mantığı işler — resolve, confirm, handle. Intents UI Extension, INUIHostedViewProviding aracılığıyla Siri içinde görüntülenmek üzere özel bir arayüz sağlar. Her ikisi birlikte çalışabilir.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun