ทางลัด Siri — จะใช้งานอย่างไร

เผยแพร่แล้ว: 2020-01-16

คำสั่งลัด Siri ซึ่งเป็นคุณสมบัติใหม่ที่นำเสนอใน WWDC ปีที่แล้ว ให้ความสามารถในการใช้งานฟังก์ชันบางอย่างของแอปพลิเคชันในเบื้องหลัง เราไม่จำเป็นต้องเปิดแอปพลิเคชันเพื่อใช้ฟังก์ชันเหล่านี้ในแอปพลิเคชัน เราพูดกับ Siri ได้ง่ายๆ เช่น "Burger Time" และระบบจะรู้ว่าทางลัดนี้กำหนดให้แอปพลิเคชันใดและสั่งเบอร์เกอร์ให้เรา

ทางลัด Siri คืออะไร

  • วิธีที่สะดวกในการทำงานให้สำเร็จจากหน้าจอล็อกหรือพื้นที่ค้นหา
  • คุณสามารถเพิ่มทางลัดไปยัง Siri เพื่อเรียกใช้วลีเสียงบน iOS, HomePod และ watchOS ได้
  • นักพัฒนาเพิ่มปุ่มลัดลงในแอพที่ช่วยให้ Siri เชื่อมต่อกับปุ่มลัดเหล่านี้ได้
  • การใช้โมเดลการเรียนรู้ของเครื่องเพื่อวิเคราะห์ฟังก์ชันทั่วไปที่คุณใช้งานและแนะนำทางลัดโดยอัตโนมัติ
  • iOS 12+

ในบทความนี้ เราจะเน้นการใช้งานคำสั่งลัด ซึ่งเป็นหนึ่งในแอปพลิเคชั่นยอดนิยมของ Siri Shortcuts เราจะสร้างแอปพลิเคชั่นง่าย ๆ ที่จะให้คุณสั่งเบอร์เกอร์

เราจะสร้างทางลัดของ Siri ได้อย่างไร

ขั้นตอนการสร้าง Siri Shortcuts
  1. ในตอนเริ่มต้น เราต้องคิดถึง ฟังก์ชันที่ผู้ใช้ต้องการทำให้ง่ายขึ้นในแอปพลิเคชันของเรา นี่ควรเป็นฟังก์ชันที่ผู้ใช้ดำเนินการบ่อยๆ และต้องการให้ผู้ใช้เข้าสู่แอปพลิเคชันและผ่านเส้นทางยาวเข้าไป ทางลัดจะทำให้เส้นทางนี้สั้นลงเพื่อใช้งานฟังก์ชันต่างๆ
  2. ในขั้นตอนต่อไป คุณต้องบริจาคทางลัด สิ่งนี้หมายความว่า? เราต้อง ส่งข้อมูลไปยังระบบ เกี่ยวกับข้อเท็จจริงที่เราได้สั่งซื้อ เช่น เบอร์เกอร์กับเบคอน เราให้ข้อมูลนี้กับระบบ และต่อมา Siri สามารถแนะนำเราในเวลาที่กำหนดเพื่อทำการสั่งซื้อเฉพาะนี้
  3. สิ่งสุดท้ายที่ต้องทำคือจัดการกับทางลัดนี้ ซึ่งเกิดขึ้นเมื่อ ผู้ใช้บอก Siri ถึงคำสั่งที่กำหนดไว้ก่อนหน้านี้ เช่น "เวลาเบอร์เกอร์" หรือในกรณีที่ผู้ใช้กดทางลัดที่แนะนำโดย Siri บนหน้าจอล็อก

ตกลง บางทีเราจะเขียนโค้ด? ศักยภาพของเราในฐานะนักพัฒนาคืออะไร?

NSUserActivity & Intents - ตัวอย่างของคำสั่งลัด Siri

NSUserActivity — เราจะสร้างทางลัดที่จะให้เราเปิดหน้าจอสำหรับการสั่งซื้อใหม่

  1. เพิ่มคีย์ไปยัง Info.plist
 <key>NSUserActivityTypes</key>
<array>
	<string>com.miquido.SiriShotcutDemo.make-order</string>
</array>

2. บริจาคทางลัดเมื่อผู้ใช้เข้าสู่หน้าจอ

 ให้ orderActivity = NSUserActivity (activityType: "com.miquido.SiriShotcutDemo.make-order")
orderActivity.persistentIdentifier = NSUserActivityPersistentIdentifier ("com.miquido.SiriShotcutDemo.make-order")
orderActivity.isEligibleForSearch = true
orderActivity.isEligibleForPrediction = true
orderActivity.title = "ทำการสั่งซื้อ"
orderActivity.suggestedInvocationPhrase = "เวลาเบอร์เกอร์"

ให้แอตทริบิวต์ = CSSearchableItemAttributeSet (itemContentType: kUTTypeItem เป็นสตริง)
attributes.contentDescription = "เบอร์เกอร์แสนอร่อย !"
attributes.thumbnailData = UIImage (ชื่อ: "โลโก้")?.pngData ()
orderActivity.contentAttributeSet = แอตทริบิวต์
userActivity = สั่งซื้อกิจกรรม

3. ใน AppDelegate คุณต้องใช้ ผู้รับ continueUserActivity สิทธิ์ ContinueUserActivity ซึ่งหลังจากได้รับประเภทนี้แล้วจะเปลี่ยนเส้นทางไปยังหน้าจอที่กำหนด

 แอปพลิเคชัน func (_ แอปพลิเคชัน: UIApplication,
                 ดำเนินการต่อ userActivity: NSUserActivity,
                 restoreHandler: @escaping ([UIUserActivityRestoring]?) -> โมฆะ) -> Bool {
    ถ้า userActivity.activityType == "com.miquido.SiriShotcutDemo.make-order" {
        // จัดการแอปที่เปิดอยู่บนหน้าจอคำสั่งซื้อ
        คืนความจริง
    } 
    คืนค่าเท็จ
} 
ขั้นตอนการใช้คำสั่งลัด Siri เพื่อสั่งเบอร์เกอร์

ความตั้งใจ — เราจะใช้ทางลัดเพื่อสร้างคำสั่งซื้อ

เคล็ดลับ Pro ก่อนนำไปใช้:
ความตั้งใจปรากฏขึ้นเมื่อผู้ใช้ทำบางสิ่งอย่างเป็นระบบ อย่างไรก็ตาม เมื่อคุณต้องการทดสอบฟังก์ชันนี้เพื่อรับคำแนะนำจาก Siri เสมอ คุณต้องเปิดใช้งานสองตัวเลือก — “ แสดงทางลัดล่าสุด ” และ “ แสดงการบริจาคบนหน้าจอล็อค ” ในการตั้งค่า -> นักพัฒนา

ตัวเลือก: แสดงทางลัดล่าสุดและแสดงการบริจาคบนหน้าจอล็อค
  1. สร้างไฟล์คำจำกัดความความตั้งใจ วิธีที่ดีที่สุดคือเพิ่มลงในเฟรมเวิร์กแยกต่างหากในโครงการของฉัน ซึ่งจะอยู่ใน OrderKit
ไอคอนไฟล์คำจำกัดความของ SiriKit Intent

2. เลือกหมวดหมู่ ในกรณีนี้คือ “คำสั่งซื้อ” ในไฟล์นี้ เราต้องเลือกพารามิเตอร์ที่เราจะส่งผ่านไปยังระบบและสร้างชุดค่าผสมของพารามิเตอร์เหล่านี้

ความตั้งใจที่กำหนดเอง พารามิเตอร์ และประเภททางลัด
คำจำกัดความของคำสั่งซื้อ – สร้างความตั้งใจที่กำหนดเอง
คำจำกัดความของคำสั่งซื้อ — กำหนดคำตอบ
คำจำกัดความของคำสั่งซื้อ — กำหนดคำตอบ

3. สร้างเป้าหมายใหม่ด้วยส่วนขยายสำหรับความตั้งใจ เลือก "รวมส่วนขยาย UI" เมื่อคุณสร้าง

ไอคอนส่วนขยายเจตนา
ไฟล์ -> ใหม่ -> เป้าหมาย… -> ส่วนขยายเจตนา
นี่คือลักษณะของ Target Membership สำหรับ Order.intentdefinition

4. สร้าง UI สำหรับความตั้งใจในไฟล์ MainInterface.storyboard

การสร้าง UI สำหรับเจตนา
การสร้าง UI สำหรับความตั้งใจของเรา

5. กำหนดค่าสถานะความ ready และ success ใน IntentViewController

 func configureView (สำหรับพารามิเตอร์: Set<INParameter>,
                       ของการโต้ตอบ: INInteraction,
                       พฤติกรรมโต้ตอบ: INUIInteractiveBehavior,
                       บริบท: INUIHostedViewContext,
                       เสร็จสิ้น: @escaping (Bool, Set<INParameter>, CGSize) -> โมฆะ) {
        
    ยามให้เจตนา = ปฏิสัมพันธ์ เจตนาเป็น? OrderIntent อื่น {
        เสร็จสิ้น (เท็จ, ตั้งค่า (), .zero)
        กลับ
    }
    ถ้า Interaction.intentHandlingStatus == .ready {
        การตั้งค่า (ด้วย: เจตนา)
        waitTime.isHidden = true
        เสร็จสิ้น (จริง, พารามิเตอร์, ขนาดที่ต้องการ)
    } อื่น ๆ ถ้า Interaction.intentHandlingStatus == .success
        ให้การตอบกลับ = Interaction.intentResponse as? OrderIntentResponse {
        การตั้งค่า (ด้วย: เจตนา)
        waitTime.isHidden = false
        ถ้าให้ waitTimeText = response.waitTime {
            waitTime.text = "คำสั่งซื้อจะพร้อมใน \(waitTimeText) นาที"
        }
        everythingIsOkLabel.text = "แตะเพื่อแสดงคำสั่งซื้อ"
        เสร็จสิ้น (จริง, พารามิเตอร์, ขนาดที่ต้องการ)
    }

    เสร็จสิ้น (เท็จ, พารามิเตอร์, .zero)
}

การตั้งค่า func ส่วนตัว (โดยมีเจตนา: OrderIntent) {
    burgerNameLabel.text = เจตนา.burgerName
    ถ้าให้ปริมาณ = ความตั้งใจ ปริมาณ?.stringValue {
        quantityLabel.text = "\(จำนวน) ชิ้น"
    }
    ถ้าให้เพิ่มเติม = เจตนาเพิ่มเติม {
        addedsLabel.text = addeds.elements.toString
    }
}

6. หลังจากสร้าง UI แล้ว เราก็สามารถไปบริจาคตามความตั้งใจของเราได้ ในกรณีนี้ เป็นการดีที่สุดที่จะบริจาคตามความตั้งใจเมื่อทำการสั่งซื้อ เราให้ข้อมูลทั้งหมดไปยังระบบที่เรากำหนดไว้ก่อนหน้านี้ในไฟล์ Order.intentdefinition เช่น ชื่อเบอร์เกอร์ จำนวนและส่วนเพิ่มเติม และวลีที่เสนอจะแสดงในกรณีที่เราต้องการเพิ่มทางลัดนี้ไปยัง Siri ทันทีเมื่อทำการสั่งซื้อ .

 บริจาค func ส่วนตัวโต้ตอบ (สำหรับการสั่งซื้อ: สั่งซื้อ) {
    ให้การโต้ตอบ = INInteraction (เจตนา: order.intent ตอบกลับ: ไม่มี)
    
    ปฏิสัมพันธ์บริจาค { (ข้อผิดพลาด) ใน
        ถ้าเกิดข้อผิดพลาด != ไม่มี {
            // จัดการข้อผิดพลาด
        } อื่น {
            print("บริจาคสำเร็จแล้ว")
        }
    }
} 
 คำสั่งขยายเวลาสาธารณะ {
    
    เจตนา var: OrderIntent {
        ให้ orderIntent = OrderIntent ()
        orderIntent.burgerName = ชื่อ
        ถ้าให้ intValue = Int (ปริมาณ) {
            orderIntent.quantity = NSNumber (ค่า: intValue)
        }
        orderIntent.suggestedInvocationPhrase = "เวลาเบอร์เกอร์"
        
        orderIntent.additions = added.map { ตัวเลือก -> INObject ใน
            ส่งคืน INObject (ตัวระบุ: option.rawValue,
                            แสดง: option.rawValue)
        }
        ส่งคืนคำสั่งเจตนา
    }
    
}

7. ตอนนี้ เราสามารถจัดการกับสถานการณ์ว่าจะเกิดอะไรขึ้นในกรณีที่ผู้ใช้ได้รับคำแนะนำของคำสั่งลัดและคลิกที่มัน และในกรณีที่ผู้ใช้เรียกคำสั่งลัดโดย Siri

 OrderIntentHandler คลาสสาธารณะ: NSObject, OrderIntentHandling {
    
    ยืนยัน func สาธารณะ (เจตนา: OrderIntent,
                        เสร็จสิ้น: @escaping (OrderIntentResponse) -> โมฆะ) {
        เสร็จสิ้น (OrderIntentResponse (รหัส: OrderIntentResponseCode.ready, userActivity: ไม่มี))
    }
    
    จัดการ func สาธารณะ (เจตนา: OrderIntent, 
                       เสร็จสิ้น: @escaping (OrderIntentResponse) -> โมฆะ) {
        guard ให้ burgerName = เจตนา.burgerName อื่น {
            เสร็จสิ้น (OrderIntentResponse(รหัส: .failure, userActivity: null))
            กลับ
        }
        
        Defaults.save(คำสั่ง: คำสั่ง(จาก: เจตนา))
        เสร็จสิ้น (OrderIntentResponse.success(burgerName: burgerName, waitTime: "5"))
    }
    
} 
Siri Shortcut Demo

แค่นั้นทุกอย่างก็ใช้การได้

คุณสามารถตรวจสอบโครงการทั้งหมดบน GitHub ของฉันได้ที่นี่

ที่มา:

  • 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