Pintasan Siri — bagaimana cara menerapkannya?
Diterbitkan: 2020-01-16Pintasan Siri, fitur baru yang disajikan di WWDC tahun lalu, menawarkan kemampuan untuk menjalankan fungsi tertentu dari aplikasi di latar belakang. Kita tidak perlu menyalakan aplikasi untuk menggunakan fungsi-fungsi ini dalam aplikasi, kita cukup mengatakan kepada Siri, misalnya "Burger Time" dan sistem mengetahui aplikasi mana yang diberikan pintasan ini dan memesan burger untuk kita.
Apa itu Pintasan Siri?
- Cara mudah untuk menyelesaikan tugas dari layar kunci atau area pencarian.
- Pintasan juga dapat ditambahkan ke Siri untuk dijalankan dengan frasa suara di iOS, HomePod, dan watchOS.
- Pengembang menambahkan kait pintasan ke dalam aplikasi mereka yang memungkinkan Siri terhubung ke pintasan ini.
- Menggunakan model pembelajaran mesin dari perilaku Anda untuk menganalisis fungsi umum yang Anda lakukan dan menyarankan pintasan secara otomatis.
- iOS 12+
Pada artikel ini, kami akan fokus pada implementasi pintasan pesanan, salah satu aplikasi Pintasan Siri yang paling populer. Kami akan membuat aplikasi sederhana yang memungkinkan Anda memesan burger
Bagaimana kita bisa membuat pintasan Siri?

- Pada awalnya, kita harus memikirkan fungsionalitas yang benar-benar ingin dipermudah oleh pengguna dalam aplikasi kita . Ini harus menjadi fungsi yang sering dilakukan pengguna dan mengharuskan pengguna untuk memasuki aplikasi dan melewati jalur panjang di dalamnya. Pintasan akan memungkinkan pemendekan jalur ini untuk menjalankan fungsionalitas.
- Pada langkah selanjutnya, Anda perlu menyumbangkan pintasan. Apa artinya ini? Kami harus menyampaikan informasi ke sistem tentang fakta bahwa kami telah memesan, misalnya satu burger dengan bacon. Kami memberikan informasi ini ke sistem dan nanti Siri dapat menyarankan kami pada waktu tertentu untuk membuat pesanan khusus ini.
- Hal terakhir yang harus dilakukan adalah menangani pintasan ini, yang terjadi saat pengguna memberi tahu Siri perintah yang ditentukan sebelumnya , misalnya "Waktu burger", atau jika pengguna menekan pintasan yang disarankan oleh Siri di layar kunci.
Ok, mungkin kita akan menulis beberapa kode? Apa kemungkinan kita sebagai pengembang?

NSUserActivity — Kami akan membuat pintasan yang memungkinkan kami meluncurkan layar untuk membuat pesanan baru
- Tambahkan kunci ke Info.plist
<key>NSUserActivityTypes</key> <array> <string>com.miquido.SiriShotcutDemo.make-order</string> </array>
2. Sumbangkan pintasan saat pengguna memasuki layar
biarkan orderActivity = NSUserActivity(activityType: "com.miquido.SiriShotcutDemo.make-order") orderActivity.persistentIdentifier = NSUserActivityPersistentIdentifier("com.miquido.SiriShotcutDemo.make-order") orderActivity.isEligibleForSearch = true orderActivity.isEligibleForPrediction = true orderActivity.title = "Buat pesanan" orderActivity.suggestedInvocationPhrase = "Waktu burger" biarkan atribut = CSSearchableItemAttributeSet(itemContentType: kUTTypeItem sebagai String) atribut.contentDescription = "Burger lezat !" atribut.thumbnailData = UIImage(bernama: "logo")?.pngData() orderActivity.contentAttributeSet = atribut userActivity = orderActivity
3. Di AppDelegate
, Anda harus menerapkan delegasi continueUserActivity
yang, setelah mendapatkan tipe khusus ini, akan dialihkan ke layar yang diberikan
aplikasi func(_ aplikasi: Aplikasi UIA, lanjutkan aktivitas pengguna: NSUserActivity, restorasiHandler: @escaping ([UIUserActivityRestoreing]?) -> Void) -> Bool { if userActivity.activityType == "com.miquido.SiriShotcutDemo.make-order" { // menangani aplikasi yang terbuka di layar pesanan kembali benar } kembali salah }

Maksud — Kami akan menerapkan pintasan untuk membuat pesanan
Kiat pro sebelum implementasi:
Niat muncul ketika pengguna melakukan sesuatu secara sistematis. Namun, ketika Anda ingin menguji fungsi ini agar Anda selalu mendapatkan saran dari Siri, Anda harus mengaktifkan dua opsi — “ Tampilkan Pintasan Terbaru ” dan “ Tampilkan Donasi di Layar Kunci ” di Pengaturan -> Pengembang.

- Buat file definisi maksud. Cara terbaik adalah menambahkannya ke kerangka kerja terpisah di proyek saya, itu akan berada di
OrderKit
.

2. Pilih kategori, dalam hal ini “Pesanan”. Dalam file ini kita harus memilih parameter yang akan kita berikan ke sistem dan membuat kombinasi dari parameter tersebut.


3. Buat target baru dengan ekstensi untuk niat, pilih "Sertakan Ekstensi UI" saat Anda membuatnya.



Order.intentdefinition
4. Buat UI untuk maksud di file MainInterface.storyboard
.

5. Konfigurasikan status ready
dan success
di IntentViewController
.
func configureView(untuk parameter: Set<INParameter>, interaksi: INInteraksi, interaktifPerilaku: INUIInteractiveBehavior, konteks: INUIHostedViewContext, penyelesaian: @escaping (Bool, Set<INParameter>, CGSize) -> Void) { penjaga biarkan maksud = interaksi. maksud sebagai? PesanIntent lain { selesai (salah, Set(), .zero) kembali } if interaction.intentHandlingStatus == .ready { pengaturan (dengan: maksud) waitTime.isHidden = true penyelesaian (benar, parameter, ukuran yang diinginkan) } else jika interaction.intentHandlingStatus == .success, biarkan response = interaction.intentResponse sebagai? PesanIntentResponse { pengaturan (dengan: maksud) waitTime.isHidden = false jika biarkan waitTimeText = response.waitTime { waitTime.text = "Pesanan akan siap dalam \(waitTimeText) menit" } semuanyaIsOkLabel.text = "Ketuk untuk menampilkan pesanan " penyelesaian (benar, parameter, ukuran yang diinginkan) } selesai (salah, parameter, .zero) } pengaturan fungsi pribadi (dengan maksud: OrderIntent) { burgerNameLabel.text = intent.burgerName jika biarkan kuantitas = maksud.kuantitas?.stringValue { kuantitasLabel.text = "\(jumlah) pcs." } jika biarkan penambahan = maksud.tambahan { tambahanLabel.text = tambahan.elemen.toString } }
6. Setelah membuat UI, kita bisa masuk ke donasi niat kita. Dalam hal ini, yang terbaik adalah menyumbangkan niat ketika melakukan pemesanan. Kami menyediakan semua informasi ke sistem yang sebelumnya kami definisikan dalam file Order.intentdefinition
, yaitu nama burger, jumlah dan penambahan, dan frasa yang diusulkan yang ditampilkan jika kami ingin segera menambahkan pintasan ini ke Siri saat melakukan pemesanan .
private func donateInteraction(untuk pesanan: Pesanan) { biarkan interaksi = INInteraction(intent: order.intent, response: nil) interaksi.donasi { (kesalahan) di jika kesalahan != nihil { // menangani kesalahan } kalau tidak { print("Interaksi berhasil disumbangkan") } } }
Perintah ekstensi publik { var maksud: OrderIntent { biarkan orderIntent = OrderIntent() orderIntent.burgerName = nama jika misalkan intValue = Int(jumlah) { orderIntent.quantity = NSNumber(nilai: intValue) } orderIntent.suggestedInvocationPhrase = "Waktu burger" orderIntent.additions = penambahan.peta { option -> INObject di kembalikan INObject(pengidentifikasi: option.rawValue, tampilan: option.rawValue) } kembali pesananIntent } }
7. Sekarang kita dapat menangani situasi apa yang akan terjadi jika pengguna mendapat saran pintasan dan mengkliknya dan jika pengguna memanggil pintasan dengan Siri.
OrderIntentHandler kelas publik: NSObject, OrderIntentHandling { konfirmasi fungsi publik (maksud: OrderIntent, selesai: @escaping (OrderIntentResponse) -> Void) { selesai(OrderIntentResponse(kode: OrderIntentResponseCode.ready, userActivity: nil)) } pegangan fungsi publik (maksud: OrderIntent, selesai: @escaping (OrderIntentResponse) -> Void) { guard let burgerName = intent.burgerName else { selesai(OrderIntentResponse(kode: .failure, userActivity: nil)) kembali } Defaults.save(order: Order(from: intent)) selesai(OrderIntentResponse.success(burgerName: burgerName, waitTime: "5")) } }

Itu saja, semuanya berfungsi
Anda dapat memeriksa seluruh proyek di GitHub saya di sini
Sumber:
- 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