Siri 終於可以派上用場了?快來看看 Siri Shortcut 的新功能吧!

Siri 終於可以派上用場了?快來看看 Siri Shortcut 的新功能吧!
Siri 終於可以派上用場了?快來看看 Siri Shortcut 的新功能吧!
In:

今年在聖荷西舉辦的 WWDC 2018 大會上,Apple 發佈了令人期待已久的功能 Siri Shortcut,它使開發者能夠在自己的應用程式當中延伸及增強 Siri 的功能。在這之前,SiriKit SDK 整體的功能非常有限,隨著 Siri Shortcut 的出現,開發者能夠延伸 Siri 的功能,並建構客製化語音指令來呼叫應用程式。

Siri Shortcut 的歷史

Siri Shortcut 的核心其實是自動化,實際上 Siri Shortcut 是從 WWDC 前學者建構的自動化應用程式 Workflow 演變而來。Apple 在 2017 年收購了 Workflow,而不尋常的地方是,在收購之後 Apple 依然把 Workflow 保留在 App Store 上。

workflow-app

Shortcut 讓你能夠將應用程式的功能公開予 Siri。

今日,Apple 新的 Siri Shortcut 應用程式很大部分是從 Workflow 移植過來的,但是,區分 Voice Shortcut 與 Shortcut App 是很重要的。雖然 Shortcut App 允許使用者為日常生活中常見的任務建立 Voice Shortcut,但是 Siri Shortcut 能夠直接讓開發者在自己原生的應用程式中延伸 Siri 的功能。

在撰寫本文時,Shortcut 應用程式無法在 iOS 12 Beta 2 Build 版本中進行測試。取而代之,我們將在我們建構的客製化應用程式中探索 Siri Shortcut 的實用性。

範例專案

備註: 本教學假設讀者已經對 NSUserActivity API 有一定程度的瞭解;若你還不瞭解,請從這裡閱讀我們之前的教學文章。

在本教學中,我們將會探索如何在一個簡單的專案中加入 Siri Shortcut,讓使用者能夠透過像是 “Say Hi” 的片語來啟用我們的應用程式並呈現 UIAlertView。

這個應用程式的目的是提供一個簡單的概覽,來讓你瞭解如何將 Siri Shortcut 整合到應用程式之中,同時也不會造成大型專案的混亂。看完本教學後,你應該能夠紮實掌握 Siri Shortcut 背後的例子與技術,並瞭解如何將它們整合到你的應用程式之中!

在新專案中定義你的 Shortcut

在我們開始任何新專案前,應該要先花點時間設定基本專案架構。首先,確認你有 iOS 12、macOS Mojave 和 Xcode 10 的最新開發者預覽版本。如果你沒有這些工具,你將沒辦法執行本教學中的程式碼,因為 Siri Shortcut 是在 iOS 12 與 Xcode 10 才引入的新 API。若你已經註冊了 Apple 開發者帳號,你可以在開發者網站下載。

啟動 Xcode 並創建一個新的 Single View 應用程式,以 SiriShortcut 為專案名稱(或是其他你喜歡的名稱),我們以 com.appcoda 為組織識別字 (Organization Identifer),當然你可以隨意選擇其他名稱,完成後,按 create 來載入你的 Xcode 專案。

首先,切換到你 Xcode 專案中的 Project Settings 頁面,選擇 Capabilities 並向下滑動,確認你如下圖所示啟用了 Siri,這將允許我們在應用程式中使用 Siri SDK,並將 Entitlement 檔案加入專案之中。

一旦啟用了 Siri,Xcode 將會把一個 .entitlements 文件加入到你的專案之中。接下來,我們切換到專案裡建置設定的 General 分頁,滑到頁面底部並選擇 Linked Frameworks and Libraries,請確定你已點選 +按鈕來添加框架。搜索 Intents.framework 並選擇,然後按 Add 按鈕,這將允許我們在應用程式中使用新的 Intents 框架。

最後,切換到你的 Info.plist 檔案並加入含有 Key-value pair 的 NSUserActivityTypes 字典,第一個項目的值應該包含了 bundle identifier 與附加動作像如 “sayHi”。

配置 Shortcut (Donating a Shortcut)

要創建 Shortcut,你要先定義 Shortcut 然後配置它。

現在我們的專案都已經定義了 Shortcut,是時候開始寫程式碼了!為了讓使用者可以透過 Siri 使用我們的 Shortcut,我們利用了一個名為「配置 Shortcut」的過程。

根據 Apple 官方開發者文件的說明:

每當使用者在你的應用程式中執行動作時,你都應該配置一個 Shortcut。 舉例來說,如果使用者可以使用你的應用程式從一間餐廳訂購湯,請在使用者下訂單後為訂購湯的動作配置 Shortcut。但也不要為使用者尚未完成的操作配置 Shortcut,換而言之,如果用戶從未下過湯的訂單,那麼就不應該為訂購湯的操作配置 Shortcut。

很明顯地,配置應該只能在有意義、能增強應用程式整體功能性的情況下使用。

好,讓我們回到程式碼上!

切換到你的 ViewController.swift 檔案,在 viewDidLoad 方法之後,創建一個新的 setupIntents 方法,這方法將會包含我們的 Siri Shortcut 程式碼。

 func setupIntents() {
        let activity = NSUserActivity(activityType: "com.AppCoda.SiriSortcuts.sayHi") // 1
        activity.title = "Say Hi" // 2
        activity.userInfo = ["speech" : "hi"] // 3
        activity.isEligibleForSearch = true // 4
        activity.isEligibleForPrediction = true // 5
        activity.persistentIdentifier = NSUserActivityPersistentIdentifier(rawValue: "com.AppCoda.SiriSortcuts.sayHi") // 6
        view.userActivity = activity // 7
        activity.becomeCurrent() // 8
    }

讓我們來看看這段程式碼。

  • 在第一行程式碼,我們設置了 NSUserActivity 的實例,並指定 activityType 參數為 Info.plist 檔案裡所定義的識別字。
  • 在第二行,我們定義了 Activity title(這會出現於 Setting 和 Spotlight 的搜尋內,如果你對 NSUserActivity、以及 Spotlight 如何把 Activity 編入索引不熟悉,建議你可以參考我們關於這主題的教學文章
  • 在第三行裡,我們加入了 userInfo 字典,根據 Apple 所說,userInfo 字典「包含了應用程式特定狀態訊息,讓一個 Activity 可以在另一台設備上繼續」。
  • 接下來,我們設定 .isEligibleForSearch 屬性為 true,並在下一行啟用 isEligibleForPrediction.。這兩個屬性允許 iOS 搜尋及建議我們設備上的 NSUserActivity。
  • 下一步,設定 persistentIdentifier 屬性為 NSUserActivityPersistentIdentifier 的實例,並指定 rawValue 屬性為先前所設定的識別字。
  • 最後,指定這個視圖的 userActivity 屬性為剛創建好的 activity,並呼叫 becomeCurrent() 方法來啟用我們的 Activity。

創建一個 sayHi() 方法,然後將下列程式碼貼上,這段程式碼設定了基本的 UIAlertController 來顯示訊息。

 public func sayHi() {
        let alert = UIAlertController(title: "Hi There!", message: "Hey there! Glad to see you got this working!", preferredStyle: UIAlertController.Style.alert)
        alert.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler: nil))
        self.present(alert, animated: true, completion: nil)
    }

雖然上述的方法非常基礎,但已足夠描述 Siri Shortcut 是如何運作。請留意這是ㄧ個 public 函數,因為我們需要在此視圖控制器以外的範圍使用它。

公開 Activity

現在你已經設定好 ViewController.swift 裡的基礎功能,切換到 AppDelegate.swift 檔案,並如下所示加入 application(_:continueUserActivity:restorationHandler) 函數。

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
    let viewController = window?.rootViewController as! ViewController
  viewController.sayHi()
  return true
}

這段程式碼公開了我們在程式委派中新創建的 Activity,並在應用程式尚未開啟的情況下,允許 Siri 能對此 Activity 採取動作以啟動應用程式。

好的,讓我們來嘗試一下吧!切換到設定頁面中並選擇 Siri,你應該會看到一個叫做 “Say Hi” 的新 Shortcut。按下 + 按鈕來加入新 Shortcut,然後依著下文的螢幕截圖來創建一個客制化語音指令來呼叫這個 Shortcut。

當你完成後,啟用 Siri 並說出你的語音指令!

siri shortcut-1

siri shortcut-2

siri shortcut-3

siri shortcut-4

siri shortcut-5

總結

如你所見,在專案中使用 NSUserActivity 來延伸 Siri Shortcut 的強大功能其實相當簡單。在本教學中,我們設定了一個基本的應用程式來延伸這項技術,如你所見,這其中還有無限的可能性,而開發者肯定會用更有創意而獨特的方式來發揮這項技術的功能。下次再會!

譯者簡介:HengJay,iOS 初學者,閒暇之餘習慣透過線上 MOOC 資源學習新的技術,喜歡 Swift 平易近人的語法也喜歡狗狗,目前參與生醫領域相關應用的 App 開發,希望分享文章的同時也能持續精進自己的基礎。

LinkedIn: https://www.linkedin.com/in/hengjiewang/
Facebook: https://www.facebook.com/hengjie.wang

原文Introduction to Create ML: How to Train Your Own Machine Learning Model in Xcode 10

作者
Gregg Mojica
軟體工程師及Gradology公司的資訊科技總監。在繁忙的工作以外,他享受於寫作、攝影和分享所見所聞。Gregg熱衷程式開發,曾在app store發佈數個apps,客戶包括美國康奈爾大學、各式地方企業和初創公司。可以在推特或LinkedIn聯絡Gregg。
評論
很好! 你已成功註冊。
歡迎回來! 你已成功登入。
你已成功訂閱 AppCoda 中文版 電子報。
你的連結已失效。
成功! 請檢查你的電子郵件以獲取用於登入的連結。
好! 你的付費資料已更新。
你的付費方式並未更新。