Pintasan Siri — bagaimana cara menerapkannya?

Diterbitkan: 2020-01-16

Pintasan 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?

Proses pembuatan Pintasan Siri
  1. 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.
  2. 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.
  3. 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 & Intents - contoh pintasan Siri

NSUserActivity — Kami akan membuat pintasan yang memungkinkan kami meluncurkan layar untuk membuat pesanan baru

  1. 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
} 
Proses penerapan pintasan Siri untuk memesan burger

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.

Opsi: Tampilkan Pintasan Terbaru dan Tampilkan Donasi di Layar Terkunci
  1. Buat file definisi maksud. Cara terbaik adalah menambahkannya ke kerangka kerja terpisah di proyek saya, itu akan berada di OrderKit .
Ikon File Definisi Intent SiriKit

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.

Maksud Kustom, parameter, dan jenis pintasan
Definisi pesanan – Buat niat khusus
Definisi pesanan — Tentukan tanggapan
Definisi pesanan — Tentukan tanggapan

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

Ikon Ekstensi Maksud
File -> Baru -> Target… -> Ekstensi Maksud
Seperti inilah seharusnya Keanggotaan Target untuk Order.intentdefinition

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

Membuat UI untuk maksud
Membuat UI untuk Intent kami

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"))
    }
    
} 
Demo Pintasan Siri

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