Siri Kısayolları — nasıl uygulanır?
Yayınlanan: 2020-01-16Geçen yılki WWDC'de sunulan yeni bir özellik olan Siri kısayolları, uygulamanın belirli işlevlerini arka planda gerçekleştirme yeteneği sunar. Uygulamada bu işlevleri kullanabilmek için uygulamayı açmamıza gerek yok, Siri'ye kısaca “Burger Time” diyebiliriz ve sistem bu kısayolun hangi uygulamaya atandığını biliyor ve bizim için bir burger sipariş ediyor.
Siri Kısayolları nedir?
- Kilit ekranından veya arama alanından görevleri tamamlamanın uygun bir yolu.
- iOS, HomePod ve watchOS'ta sesli bir ifadeyle çalıştırmak için Siri'ye kısayollar da eklenebilir.
- Geliştiriciler, uygulamalarına Siri'nin bu kısayollara bağlanmasını sağlayan kısayol kancaları ekler.
- Gerçekleştirdiğiniz ortak işlevleri analiz etmek ve otomatik olarak kısayol önermek için davranışınızın makine öğrenimi modellerini kullanma.
- iOS 12+
Bu yazımızda, Siri Kısayollarının en popüler uygulamalarından biri olan sipariş kısayolunun uygulanmasına odaklanacağız. Hamburger sipariş etmenizi sağlayacak basit bir uygulama oluşturacağız.
Siri kısayollarını nasıl oluşturabiliriz?

- En başta, kullanıcının uygulamamızda gerçekten kolaylaştırmak istediği işlevselliği düşünmeliyiz. Bu, kullanıcının sıklıkla gerçekleştirdiği ve kullanıcının uygulamaya girmesini ve içinde uzun bir yol geçmesini gerektiren bir işlevsellik olmalıdır. Kısayollar, işlevi gerçekleştirmek için bu yolun kısaltılmasını sağlar.
- Bir sonraki adımda, bir kısayol bağışlamanız gerekir. Ne anlama geliyor? Örneğin pastırmalı burger gibi sipariş verdiğimizle ilgili bilgileri sisteme iletmeliyiz. Bu bilgiyi sisteme sağlarız ve daha sonra Siri, bu özel siparişi vermemiz için belirli bir zamanda bize önerebilir.
- Yapılması gereken en son şey , kullanıcı Siri'ye daha önce tanımlanan komutu , örneğin “Burger time” söylediğinde veya kullanıcının kilit ekranında Siri tarafından önerilen kısayola basması durumunda gerçekleşen bu kısayolu ele almaktır.
Tamam, belki biraz kod yazarız? Geliştiriciler olarak olanaklarımız nelerdir?

NSUserActivity — Yeni bir sipariş vermek için ekranı başlatmamıza izin verecek bir kısayol oluşturacağız
- Anahtarı Info.plist'e ekleyin
<key>NSUserActivityTypes</key> <dizi> <string>com.miquido.SiriShotcutDemo.make-order</string> </dizi>
2. Kullanıcı ekrana girdiğinde kısayolu bağışlayın
let orderActivity = NSUserActivity(activityType: "com.miquido.SiriShotcutDemo.make-order") orderActivity.persistentIdentifier = NSUserActivityPersistentIdentifier("com.miquido.SiriShotcutDemo.make-order") orderActivity.isEligibleForSearch = doğru orderActivity.isEligibleForPrediction = doğru orderActivity.title = "Sipariş verin" orderActivity.suggestedInvocationPhrase = "Burger zamanı" let nitelikleri = CSSearchableItemAttributeSet(itemContentType: kUTTypeItem as String) öznitelikler.contentDescription = "Lezzetli hamburgerler !" öznitelikler.thumbnailData = UIImage(adlandırılmış: "logo")?.pngData() orderActivity.contentAttributeSet = nitelikler userActivity = orderActivity
3. AppDelegate
'de, bu belirli türü aldıktan sonra verilen ekrana yönlendirilecek olan continueUserActivity
temsilcisini uygulamanız gerekir.
func uygulaması(_ uygulama: UIA uygulaması, userActivity'ye devam et: NSUserActivity, restoreHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { if userActivity.activityType == "com.miquido.SiriShotcutDemo.make-order" { // açık uygulamayı sipariş ekranında işle doğru dön } yanlış döndür }

Amaçlar - Sipariş vermek için bir kısayol uygulayacağız
Uygulamadan önce profesyonel ipucu:
Kullanıcı sistematik olarak bir şey yaptığında niyetler ortaya çıkar. Ancak, Siri'den her zaman bir öneri alabilmek için bu işlevi test etmek istediğinizde, Ayarlar -> Geliştirici'de " Son Kısayolları Görüntüle " ve " Bağışları Kilit Ekranında Görüntüle " olmak üzere iki seçeneği etkinleştirmelisiniz.

- Bir amaç tanım dosyası oluşturun. En iyi yol, onu projemde ayrı bir çerçeveye eklemek,
OrderKit
içinde olacak.

2. Bir kategori seçin, bu durumda “Sipariş”. Bu dosyada sisteme ileteceğimiz parametreleri seçip bu parametrelerin kombinasyonlarını oluşturmalıyız.


3. Niyetler için bir uzantı ile yeni bir hedef oluşturun, oluştururken “UI Uzantısını Dahil Et”i seçin.



Order.intentdefinition
için Hedef Üyelik böyle görünmelidir 4. MainInterface.storyboard
dosyasında amaç için bir UI oluşturun.

5. IntentViewController
ready
ve success
durumunu yapılandırın.
func configureView(parametreler için: Set<INParameter>, etkileşim: INInteraction, etkileşimliBehavior: INUIInteractiveBehavior, bağlam: INUIHostedViewContext, tamamlama: @escaping (Bool, Set<INParameter>, CGSize) -> Void) { bekçi izin niyeti = etkileşim.intent olarak? OrderIntent başka { tamamlama(yanlış, Set(), .sıfır) dönüş } if interact.intentHandlingStatus == .ready { kurulum (ile: niyet) waitTime.isHidden = doğru tamamlama(doğru, parametreler, istenenBoyut) } else if interact.intentHandlingStatus == .success, izin ver yanıt = etkileşim.intentResponse olarak? OrderIntentResponse { kurulum (ile: niyet) waitTime.isHidden = yanlış izin verirseniz waitTimeText = answer.waitTime { waitTime.text = "Sipariş \(waitTimeText) dakika içinde hazır olacak" } EverythingIsOkLabel.text = "Siparişleri göstermek için dokunun" tamamlama(doğru, parametreler, istenenBoyut) } tamamlama(yanlış, parametreler, .sıfır) } özel işlev kurulumu (niyetle: OrderIntent) { burgerNameLabel.text = niyet.burgerName nicelik = niyet.quantity?.stringValue { miktarLabel.text = "\(miktar) adet." } eklemeler izin verirse = amaç. eklemeler { addsLabel.text = adds.elements.toString } }
6. UI'yi oluşturduktan sonra niyetimizin bağışına gidebiliriz. Bu durumda, sipariş verirken niyetleri bağışlamak en iyisidir. Order.intentdefinition
dosyasında daha önce tanımladığımız tüm bilgileri yani hamburger adı, miktarı ve eklemeleri ile sipariş verirken bu kısayolu hemen Siri'ye eklemek istediğimizde görüntülenen önerilen ifadeyi sağlıyoruz. .
private func donateInteraction(sipariş için: Sipariş) { let etkileşim = INInteraction(intent: order.intent, yanıt: nil) etkileşim.donate { (hata) içinde if hata != nil { // işleme hatası } başka { print("Başarıyla Bağışlanan Etkileşim") } } }
genel uzatma Siparişi { var aim: OrderIntent { orderIntent = OrderIntent() olsun orderIntent.burgerName = ad if let intValue = Int(miktar) { orderIntent.quantity = NSNumber(değer: intValue) } orderIntent.suggestedInvocationPhrase = "Burger zamanı" orderIntent.additions = adds.map { seçenek -> INObject in iade INObject(tanımlayıcı: seçenek.rawValue, ekran: seçenek.rawValue) } iade emriNiyet } }
7. Artık kullanıcının kısayol önerisi alıp üzerine tıklaması durumunda ve kullanıcının kısayolu Siri ile araması durumunda ne olacağını durumu ele alabiliriz.
public class OrderIntentHandler: NSObject, OrderIntentHandling { public func onay(niyet: OrderIntent, tamamlama: @escaping (OrderIntentResponse) -> Void) { tamamlama(OrderIntentResponse(kod: OrderIntentResponseCode.ready, userActivity: nil)) } public func tanıtıcısı(niyet: OrderIntent, tamamlama: @escaping (OrderIntentResponse) -> Void) { bekçi izin burgerName = aim.burgerName başka { tamamlama(OrderIntentResponse(kod: .failure, userActivity: nil)) dönüş } Defaults.save(sipariş: Sipariş(den: niyet)) tamamlama(OrderIntentResponse.success(burgerName: burgerName, waitTime: "5")) } }

Hepsi bu, her şey çalışıyor
Tüm projeyi GitHub'ımda buradan kontrol edebilirsiniz.
Kaynaklar:
- https://developer.apple.com/videos/play/wwdc2018/211/
- https://developer.apple.com/videos/play/wwdc2018/214/
- https://developer.apple.com/documentation/sirikit/donating_shortcuts
- https://developer.apple.com/design/human-interface-guidelines/sirikit/overview/siri-shortcuts/
- https://www.raywenderlich.com/6462-siri-shortcuts-tutorial-in-ios-12