了解 SiriKit 概念

本文涵蓋在 Xamarin.iOS 應用程式中使用 SiriKit 所需的重要概念。

iOS 10 的新功能 SiriKit 可讓 Xamarin.iOS 應用程式提供服務,讓用戶能夠使用 Siri 和 iOS 裝置上的 地圖 應用程式存取。 這項功能會使用新的 意圖意圖UI 架構,在一或多個應用程式延伸模組中提供。

SiriKit 可讓 iOS 應用程式使用 Siri 和 iOS 裝置上的 地圖 應用程式,以及新的意圖意圖 UI 架構,為使用者提供可存取的服務。

Siri 適用於網域的概念、相關工作的已知動作群組。 應用程式與 Siri 進行的每個互動都必須屬於其其中一個已知的服務網域,如下所示:

  • 音訊或視訊通話。
  • 預訂車程。
  • 管理鍛煉。
  • 傳訊。
  • 搜尋相片。
  • 傳送或接收付款。

當使用者提出涉及其中一個應用程式延伸模組服務 Siri 的要求時,SiriKit 會將擴充功能傳送一個 Intent 物件,以描述使用者的要求以及任何支持的數據。 然後,應用程式延伸模組會針對指定的意圖產生適當的 Response 對象,詳細說明延伸模組如何處理要求。

意圖和意圖UI延伸模組

Siri 和 地圖 應用程式都會透過兩種不同類型的應用程式延伸模組與應用程式的服務互動:

  • 意圖擴充功能 - 提供 Siri 和 地圖 應用程式的內容,並執行滿足任何支援意圖所需的工作。
  • 意圖 UI 延伸模組 - 提供將針對 Siri 或 地圖 內應用程式內容顯示的自定義 UI。

應用程式必須提供意圖擴充功能以支援 SiriKit,並負責提供 Siri 和 地圖 可以向使用者呈現及處理意圖的資訊。

建立意圖UI擴充功能是選擇性的,因為Siri通常會處理所有用戶互動,而且具有標準、內建的UI,可呈現每個支援網域中的資訊。 藉由提供意圖 UI 延伸模組,應用程式可以使用 意圖 UI 架構來呈現豐富的自定義使用者介面,其中包含應用程式的商標和其他資訊。

Siri 和 地圖 應用程式角色

使用者的口語要求是由 Siri 處理和語意分析,這會將這些要求轉換成意圖延伸模組可以處理的可採取動作的意圖。

地圖 會使用應用程式的意圖延伸模組,在對應介面中顯示資訊,以回應用戶的動作。 例如要求附近的餐廳或取得應用程式的餐廳評論。

Siri 和 地圖 使用標準系統介面來管理所有用戶的互動和顯示結果。 應用程式延伸模組角色主要是提供顯示的數據。 或者,應用程式可以提供意圖UI延伸模組,並呈現自訂UI來增強預設系統介面。

透過 SiriKit 與 SiriKit 互動

本節將概述 SiriKit 如何讓使用者使用 Siri 與應用程式互動。 為了此範例,我們將使用假的 MonkeyChat 應用程式:

The MonkeyChat icon

MonkeyChat 會保留使用者朋友的專屬聯繫人簿,每個聯繫人都與螢幕名稱相關聯(例如 Bobo),並可讓使用者透過螢幕名稱將文字聊天傳送給每個朋友。

用戶有許多方式可以起始與應用程式的互動,因為不同的人員可能會以許多不同的形式提出相同的要求。

例如,如果使用者想要將訊息傳送給其朋友 Bobo,他們可能會與 Siri 進行下列交談:

使用者:Hey Siri,傳送 MonkeyChat 訊息。
Siri:對誰?
使用者:Bobo。
Siri:你想對波波說什麼?
使用者:請傳送更多香蕉。

另一個人可能會使用不同的交談提出相同的要求:

使用者:將訊息傳送給 MonkeyChat 上的 Bobo。
Siri:你想對波波說什麼?
使用者:請傳送更多香蕉。

另一位使用者可能會提出更短的要求:

使用者:MonkeyChat Bobo 請發送更多香蕉。
Siri:好吧,發送資訊,請發送更多的香蕉到波波在猴子查特。

甚至以不同的語言提出相同的要求:

使用者:MonkeyChat Bobo s'il vous plaît envoyer plus de bananes.
Siri: Oui, envoi message s'il vous plaît envoyer plus de bananes à Bobo sur Monkeychat.

然而,另一位使用者在交談中可能非常詳細:

使用者:嘿,Siri,你能給我一個好處,並啟動 MonkeyChat 應用程式發送一個文字與訊息,請發送更多的香蕉。
Siri:對誰?
使用者:我最好的朋友Bobo。

此外,Siri 可能會以許多方式回應要求,有些方式會根據要求的提出方式:

  • 藉由按住首頁按鈕 - Siri 將提供更多視覺回應,並提供有限的口頭意見反應。
  • 由 「Hey Siri」 - Siri 將更口頭,並提供較少的視覺回應。

Siri 也經過微調,以滿足用戶的輔助功能需求,並根據這些需求進行互動和回應。

無論如何提出要求或 Siri 如何回應要求,Siri 都處理與使用者和應用程式的對話(透過其延伸模組)提供的功能。

當使用者提出 Siri 的口頭要求時,以下是 Siri 將遵循的步驟:

The steps that Siri will follow

  1. 首先,Siri 會取得使用者的 語音 音訊,並將其轉換成文字。
  2. 接下來,文字會轉換成 意圖,這是使用者要求的結構化表示法。
  3. 根據意圖,Siri 會採取 動作 來執行使用者的要求。
  4. 最後,Siri 會根據所採取的動作向用戶呈現 回應 (視覺和口頭)。

應用程式可以參與使用者與 Siri 交談的主要方式有三種:

The three main ways that the app can take part in the users conversation with Siri

  1. 詞彙 - 這是應用程式告訴 Siri 需要知道才能與其互動的字詞的方式。
  2. 應用程式邏輯 - 這些是應用程式會根據指定意圖採取的動作和回應。
  3. 使用者介面 - 這是應用程式可以提供其回應的選擇性自定義使用者介面。

範例

假設有上述資訊,請檢查下列交談如何與 MonkeyChat 應用程式互動:

使用者:嘿,Siri,在 MonkeyChat 上傳送訊息給 Bobo。
Siri:你想對波波說什麼?
使用者:請傳送更多香蕉。

應用程式在交談中採用的第一個角色是協助 Siri 瞭解使用者的語音:

Helping Siri understand the users speech

Siri 在其資料庫中沒有 「Bobo」 的名稱,但應用程式會透過其詞彙與 Siri 共用此資訊。 應用程式也可協助 Siri 辨識 Bobo 是收件者,因為它將其指定為 Siri 作為 連絡人

Siri 知道傳送郵件所需的更多內容,而不只是收件者,因此它會快速檢查應用程式延伸模組,以查看訊息是否需要內容。 由於 MonkeyChat 確實會回答用戶的問題:「 您要對 Bobo 說什麼?

在上述範例中,使用者已回應「 請傳送更多香蕉」,Siri 會將它組合成結構化 意圖

Siri will bundle the user's response into a structured Intent

結構化意圖將包含下列資訊:

  • 網域: 訊息
  • 意圖: sendMessage
  • 收件者: Bobo
  • 內容: 請傳送更多香蕉

每個網域都有一組可在其中執行的已知 動作 ,並根據 [網域] 和 [動作],傳送至應用程式的意圖可能包含零到許多參數。

然後,意圖會傳送至應用程式延伸模組進行處理。 由於處理意圖,應用程式會產生 IntentResponse ,其會與 Intent 搭配使用,並包含描述應用程式使用意圖之用途的參數。

每個 IntentResponse 也會包含 回應碼 ,告知 Siri 應用程式是否能夠完成要求。 某些網域也有非常特定的錯誤響應碼,也可以傳送。

最後,IntentResponse 將包含 NSUserActivity (例如那些用來支援交接的人員)。 NSUserActivity如果回應要求他們離開 Siri 環境,並輸入應用程式來完成,則會用來啟動應用程式。

Siri 會自動建置適當的 NSUserActivity 來啟動應用程式,並在使用者離開 Siri 環境中的地方取貨。 不過,如果需要,應用程式可以提供自己的 NSUserActivity 自定義資訊。

在應用程式處理意圖並傳回 Siri 的回應之後,它會向使用者呈現結果(口頭和視覺方式):

The results presented to the user both verbally and visually

Siri 針對應用程式可用的每個網域,都有數個內建回應使用者介面。 不過,由於 MonkeyChat 已提供選擇性的意圖 UI 延伸模組,因此會用來在上述範例中向用戶呈現交談的結果。

意圖生命週期

在處理意圖時,應用程式延伸模組需要執行三個主要工作:

The Intent Lifecycle

  1. 應用程式必須 解析 事件上的每個參數。 因此,應用程式會呼叫 Resolve 多次(每個參數一次),有時在同一個參數上呼叫多次,直到應用程式與使用者同意所要求的項目為止。
  2. 應用程式必須 確認 它可以處理要求的意圖,並告訴 Siri 預期的結果。
  3. 最後,應用程式必須 處理 意圖,並執行步驟以達成要求的結果。

解決階段

[解決] 階段可協助 Siri 了解使用者所提供的值,並確保用戶實際代表的是應用程式處理意圖時會發生什麼。

此階段也提供一個機會,讓應用程式在與使用者交談期間影響 Siri 的行為。 若要這樣做,應用程式會提供 解決回應。 Siri 了解的數據類型有一些預先定義的回應。

應用程式最常見的解析回應將會是 Success,這表示應用程式會比對來自參數的特定數據片段(例如使用者螢幕名稱)與它所知道的資訊片段。

有時候應用程式需要確認指定的要求符合它知道的正確資訊片段。 在這些情況下,它會傳送 ConfirmationRequired 回應來詢問是或沒有問題給使用者,例如 「傳送訊息給 Bobo The Great?」

在某些情況下,應用程式可能需要使用者從簡短的選項清單中挑選。 在此案例中,應用程式會提供 區分 回應,其中包含使用者從中選擇的兩到十個選項清單,例如:

Who do you want to message?

* Bobo the Great
* Bobo Jr.
* Little Bobo

Siri 會透過口頭或與 Siri UI 互動來處理使用者進行選取,並將結果傳回應用程式。

在其他情況下,應用程式可能沒有足夠的資訊來解析 參數,或可能有太多相符專案,無法使用釐清來解析 (例如 80 位名稱為 Bobo 的使用者)。 在此情況下,應用程式會傳送 NeedsMoreDetails 回應,Siri 將會提示使用者更具體。

如果使用者未提供處理意圖所需的值,它可以傳送 NeedsValue 回應,讓使用者提示使用者輸入值。

如果應用程式不支援使用者針對特定參數提供的值,它可以傳送 UnsupportedWithReason 回應,以提供不支援該值的原因。 Siri 接著會提示使用者輸入全新的值,並給予他們必要原因。

最後, 使用 NotRequired 回應告訴 Siri 應用程式不需要指定參數的值。 如果用戶還是提供一個,則 Siri 只會忽略它。

確認階段

確認階段有兩個用途:

  • 若要告訴 Siri 處理意圖的預期結果,讓 Siri 可以告訴用戶會發生什麼事。
  • 提供機會檢查任何必要的狀態,應用程式可能需要完成使用者提出的要求,例如在銀行有足夠的錢來提出要求的付款。

應用程式會提供 來自確認步驟的意圖回應 ,應該填入應用程式可用的資訊,讓 Siri 能夠有效地與用戶通訊。

根據網域和動作類型,Siri 可能會提示用戶確認,例如在傳送付款或預約車程之前。

句柄階段

句柄階段是使用意圖最重要的部分,因為它是應用程式執行其要求來執行要求以完成使用者要求的位置。

就像在確認階段中所做的一樣,應用程式必須盡可能提供有關結果的資訊,以便 Siri 能夠將此與使用者產生關聯。 有時候,此資訊會以可視化方式呈現,或者其他時候 Siri 只會將它回復給使用者。

有時候應用程式可能需要額外的時間來處理指定的要求,例如網路通話延遲,或實時人員需要滿足要求(例如完成訂單,或將汽車開到使用者的位置)。 當 Siri 正在等候應用程式回應時,它會向用戶顯示等候 UI,告知他們應用程式正在處理要求。

在理想情況下,應用程式最多應在兩到三秒內提供 Siri 的回應。 如果應用程式知道指定的回應需要較長的時間來處理,它必須傳送 InProgress 回應碼給 Siri。 Siri 接著會通知使用者應用程式正在背景處理要求,即使他們離開 Siri 環境,仍會繼續執行此動作。

將 SiriKit 新增至應用程式

在 iOS 10 中使用 SiriKit,Apple 已建立兩個新的延伸模組點:

  • 意圖擴充 功能 - 提供 Siri 應用程式的內容,並執行滿足任何支援意圖所需的工作。
  • 意圖 UI 延伸模組 - 提供將針對 Siri 內應用程式內容顯示的自訂 UI。

另外還有一個 API,可為 Siri 提供單字和片語,以下列形式協助辨識:

  • 應用程式詞彙 - 應用程式每個使用者通用的字詞和片語。
  • 使用者詞彙 - 特定應用程式使用者唯一的字詞和片語。

意圖延伸模組

意圖延伸模組負責處理應用程式與 Siri 之間的主要互動,如下所示:

The Intents Extension

意圖延伸模組可以支援一或多個意圖,由開發人員決定他們想要在應用程式中實作 SiriKit 的方式。 開發人員也可以為每個需要處理的意圖新增個別意圖延伸模組。 也就是說,Apple 要求開發人員限制意圖延伸模組的數目,讓 Siri 不會針對應用程式開啟多個進程,這需要更多的記憶體和時間來處理。

開發人員也應該注意,當 Siri 處於作用中狀態時,意圖延伸模組將會在背景中執行。 這可讓 Siri 主動與使用者進行交談,同時仍與擴充功能通訊,以處理要求的相關信息。

隱私權和安全性考量

Apple 已採取大量措施,以確保使用者私用資訊在使用 Siri 時是安全的,因此,有數個互動需要使用者登入 iOS 裝置。 例如,當要求乘坐或付款時。

此外,應用程式可能會想要限制登入裝置的使用者的特定行為。 在這些情況下,應用程式可以要求限制 鎖定 行為。 這是透過檔案中的設定來完成。Info.plist

本機驗證架構適用於意圖延伸模組,因此應用程式可以要求使用者提供其他驗證資訊,即使裝置已解除鎖定也一樣。

最後,Apple Pay 適用於意圖延伸模組,因此應用程式可以使用 Apple Pay 完成交易,而內建的 Apple Pay 工作表會顯示在 Siri 介面上方。

此外,Apple 想要確保使用者在傳送資訊給第三方應用程式時知道,因此,使用者在 提出要求時必須 指出應用程式的特定名稱(如應用程式套件組合顯示名稱中所指定)。

Apple 設計 Siri 與使用者進行自然流暢的對話,因此,應用程式套件組合名稱可用於語音的許多部分,無論它自然適合使用者的要求。

使用者將會執行的其中一個常見動作是「動詞化」應用程式的名稱,換句話說,取得應用程式名稱,並在要求中使用它作為動詞。 例如, “MonkeyChat Bobo 那些是偉大的香蕉”。

意圖UI延伸模組

意圖UI延伸模組提供將應用程式的UI和品牌帶入Siri體驗的機會,並讓用戶感覺已連線到應用程式。 透過此延伸模組,應用程式可以將品牌和視覺效果和其他資訊帶入文字記錄中。

Example Intents UI Extension output

意圖UI延伸模組一律會傳回 UIViewController ,而且應用程式可以在檢視控制器內新增它喜歡的任何專案,例如顯示超出初始回應的其他資訊。 意圖UI也可以以長時間執行事件的狀態來更新使用者,例如乘坐共用汽車到達其位置所花費的時間長度。

意圖UI延伸模組一律會與其他Siri內容一起顯示,例如UI頂端的應用程式圖示和名稱,或根據意圖、按鈕(例如傳送或取消)可能會顯示在底部。

在某些情況下,應用程式可以取代 Siri 預設向使用者顯示的資訊,例如傳訊或地圖,應用程式可以使用針對應用程式量身訂做的預設體驗來取代預設體驗。

重要

雖然可以新增互動式元素,例如 UIButtonsUITextFields 的意圖UI延伸模組 UIViewController,但這些是絕對禁止的,因為非互動式的意圖UI,而且使用者將無法與其互動。

應用程式完全選擇性地提供意圖UI延伸模組,因為Siri包含每個意圖類型的預設UI集合。 此外,意圖UI介面僅適用於Apple認為對用戶有説明的特定意圖。

新增 SiriKit 詞彙

實作 SiriKit 的最後一個部分位於應用程式內,方法是提供所需的詞彙。 許多應用程式都有唯一方式向使用者描述資訊,以及使用者將提供資訊給應用程式的唯一方式。

因此,Siri 需要應用程式的協助,才能瞭解應用程式特有的單字和片語。 其中一些片語會是應用程式的一部分,讓每位使用者都能知道並瞭解這些片語。 然而,其他人對應用程式的指定使用者而言是獨一無二的。

應用程式特定詞彙

應用程式特定詞彙會定義所有應用程式用戶都會知道的特定單字和片語,例如車輛類型或鍛煉名稱。 因為這些是應用程式的一部分,所以會在檔案中 AppIntentVocabulary.plist 定義為主要應用程式套件組合的一部分。 此外,這些單字和片語應該當地語系化。

詞彙 AppIntentVocabulary.plist 檔案有數個部分:

  • 範例應用程式使用 - 這些為使用者可以對應用程式提出的要求提供一組常見的使用案例。 例如: “使用 MonkeyFit 開始鍛煉。
  • 參數 ─ 這些會提供應用程式特定的一組非標準參數類型。 例如,MonkeyFit 應用程式的訓練名稱。 這些包含:
    • 片語 - 允許應用程式定義應用程式的唯一字詞。 例如:MonkeyFit 應用程式的 “Bananarific” 鍛煉類型。
    • 發音 - 為 Siri 提供發音提示,做為指定片語的簡單拼字。 例如,“ba nana ri fic”。
    • 範例 - 提供在應用程式中使用指定片語的範例。 例如, 「在 MonkeyFit 中啟動香蕉」

如需詳細資訊,請參閱Apple的應用程式 詞彙檔案格式參考

使用者特定詞彙

使用者特定詞彙會提供應用程式個別使用者特有的單字或片語。 這些會在運行時間從主要應用程式(而非應用程式延伸模組)提供,做為以使用者最顯著使用量優先順序排序的已排序字詞集,且清單開頭最重要的詞彙。

看看上述的 MonkeyChat 應用程式範例。 MonkeyChat 會保留所有用戶聯繫人的清單,它會透過使用者特定詞彙傳送給 Siri。 它也會保留使用者已傳送訊息的 10 個最近聯繫人清單,並針對每個使用者保留一組 [我的最愛] 連絡人。 在此範例中,我的最愛聯繫人應該是使用者特定詞彙的開頭,後面接著最近的聯繫人,然後是使用者的其餘聯繫人。

使用者特定字彙支援下列型態的資訊:

  • 聯繫人名稱。
  • 鍛煉名稱。
  • 相簿名稱。
  • Photo 關鍵詞。

如果應用程式依賴 iOS 通訊簿,應用程式就不需要採取任何動作,因為 Siri 已經提供這項資訊。 如果應用程式有自己的唯一聯繫人資料庫,應用程式只需要提供聯繫人名稱。

設計詞彙時,只提供使用者知道和關心的必要值。 避免提供電話號碼或電子郵件地址等資訊。

當使用者特定的詞彙變更時,應用程式也需要及時更新 Siri。 用戶習慣於從 Siri 要求資訊,其已新增至其 iOS 裝置的瞬間。 例如,如果使用者在應用程式中新增聯繫人,只要使用者儲存該資訊,就會將該資訊傳送給 Siri。

更重要的是,應用程式 必須 立即刪除 Siri 詞彙中的資訊,因為如果使用者刪除了一段資訊,但 Siri 在數小時或數天后仍會辨識該資訊,使用者可能會感到不安。

重要

如果使用者選擇重設應用程式,或註銷,應用程式應該從 Siri 移除所有使用者特定詞彙。

SiriKit 許可權

SiriKit 的最後一個部分是以許可權為中心。 就像使用 iOS 的其他功能(例如相片、相機 或聯繫人),用戶必須授與應用程式與 Siri 交談的明確許可權。

應用程式能夠提供字串,定義它將提供給 Siri 的資訊,並提供使用者應授與此存取權的原因。

Apple 建議應用程式在用戶升級至 iOS 10 之後,第一次開啟應用程式時,應向使用者要求許可權以使用 Siri。 這可讓使用者知道 Siri 整合,而且可以在他們提出第一個要求之前預先核准的使用方式。

SiriKit 和 地圖

SiriKit 是 iOS 不可或缺的一部分,並利用新增至 iOS 10 的較大意圖架構。 意圖架構的設計目的是要與系統的其他部分共用通用和共用動作和意圖。

意圖架構不只是 Siri 整合,並提供其他功能,例如連絡人整合,讓應用程式可以成為特定聯繫人的默認電話語音或傳訊應用程式。 意圖也提供與 CallKit 的深入整合,為使用者提供最佳的 VOIP 體驗。

iOS 10 中的 地圖 應用程式新增了騎車共用等功能,讓使用者可以直接在 地圖 UI 內預訂車程。 SiriKit 提供具有 地圖 的通用延伸點,因此在 Siri 與 地圖 之間可以共用車程共用(和其他)意圖。

這表示如果應用程式已採用 SiriKit 擴充功能,它也會免費取得 地圖 整合。

設計絕佳的 Siri 體驗

將應用程式整合到 Siri 時設計絕佳的用戶體驗,與設計絕佳的應用程式使用者介面不同。 與使用者直接在螢幕上與應用程式互動的正常情況不同,使用 Siri 時,在完全看不到任何視覺介面時有許多次。 例如,當用戶開始使用 「Hey Siri」 的交談時。

Siri 如何協助開發人員

設計應用程式與 Siri 的互動時,應用程式將會建置 對話介面,這表示內容衍生自 Siri 代表應用程式與使用者進行的對話。

如果沒有視覺參考,用戶必須追蹤其頭部中呈現的資訊。 因此,Siri 會提供達到使用者所希望完成之工作所需的基本資訊。

交談介面是由交談期間使用者和 Siri 的問題和回應所塑造。 因此,請務必思考 Siri 在設計此介面時如何提出問題並做出回應。

以下列建立訊息的使用者範例為例,Siri 可能會回答「準備好傳送?」的問題。 使用者可以以許多不同的方式回應,例如 「傳送它」「取消」 或甚至與這個問題完全無關的專案。 無論對話如何播放,Siri 都會處理應用程式的相關信息,並只會在應用程式可用時傳送相關信息。

使用者可以使用數種不同的方式來起始與 Siri 的交談:

  • 按下 [首頁] 按鈕來挑選裝置。 在此情況下,Siri 將呈現更多的視覺介面和較少的口頭回應。
  • “嘿,Siri” ,開始無手交談。 在這種情況下,Siri 將不那麼視覺和更口頭。
  • 使用輔助功能,例如啟用藍牙的助聽器,UI 將針對有特殊需求的使用者量身打造。
  • 使用 Car Play,使用者需要將注意力集中在駕駛上,將注意力保持在最低水準。

開發人員如何協助 Siri

將應用程式與 Siri 整合時,開發人員需要經常測試此整合,並確保他們透過盡可能以許多不同的方式要求相同的資訊或工作來提出許多不同的要求。

由於兩個人都認為一樣,因此開發人員必須儘可能獲得許多不同的 Beta 測試人員,以協助微調 Siri 整合。 使用者可能會要求資訊,或以開發人員從未過的方式提出要求,而這項微調有助於確保最廣泛的使用者群組在 Siri 中使用應用程式時有絕佳的體驗。

在不同的情況和環境中測試。 以各種可能的方式起始與 Siri 的對話,以確保這些交談保持流暢和自然。 在使用者更有可能使用應用程式的位置進行測試,就像在擁擠的健身房一樣。

請確定應用程式會提供 Siri 必須正確呈現要求和結果給使用者的所有資訊。 當在免手的情況下使用 Siri 時,尤其如此。

Siri 設計指導方針

請記得 Siri 代表應用程式與使用者進行交談。 開發人員想要確定此交談會盡可能保持流暢且自然。

如同任何重要對話,開發人員必須確定下列事項:

  • 應用程式已準備好進行交談。
  • 應用程式會接聽用戶嘗試完成的工作。
  • 應用程式會在適當的時間詢問適當的問題。
  • 應用程式會以使用者正在搜尋的信息回應要求。

準備交談

首先要記住的是,應用程式的使用者不會完全像開發人員一樣。 它們可能來自不同的背景、不同語言,或在使用應用程式時有特殊需求。

此外,由於開發人員設計及建置應用程式,因此他們對應用程式及其一般使用者不會擁有的內部工作和功能有深入、深入的深入瞭解。 因此,開發人員可能會要求 Siri 的要求與一般使用者不同。

這就是為什麼必須盡可能讓許多不同的人透過 Siri 與應用程式互動。 使用者可能會透過 Siri 提出應用程式的要求,開發人員從未想過或以開發人員未考慮的方式提出。

確定應用程式是良好的接聽程式

開發人員需要確保應用程式是很好的接聽程式,並取得符合使用者期望的交談細節。 但也可能未提供應用程式完成所要求工作所需的所有資訊。

應用程式有數種方式可以處理這種情況:

  • 挑選遺漏值的 [良好預設值] - 例如,如果未指定要從何處挑選,則騎乘共用應用程式可能會預設為使用者的目前位置。
  • 進行教育猜測 - 使用應用程式在使用者上收集的特定資訊,應用程式或許能夠對遺漏的信息進行並接受教育的猜測,例如從使用者的連絡資訊填入遺漏的行動電話號碼。 然而,應該小心避免壞驚喜,如挑選最昂貴的選項等。
  • 提示輸入詳細資訊 - 應用程式可以有 Siri 提示使用者輸入遺漏的值。 不過,這裡的關鍵是讓交談保持簡單,並指向這一點。 如果用戶必須回答數個問題以達成其要求,使用者很快就會感到沮喪。
  • 處理錯誤信息優雅 - 使用者可能會提供應用程式未預期或無法在指定內容中處理的值。 請確定應用程式會以清楚且容易更正的方式,將這種情況與使用者建立關聯。

當應用程式顯示有問題的單一值時,處理此動作的慣用方式是讓 Siri 要求使用者確認。 例如, 「您的意思是波波偉大的嗎?」,他們可以使用簡單的是或沒有答案來回復。

如果單一值有數個可能的選項可能正確,則解構是慣用的處理方法。 在此情況下,Siri 最多可以提示用戶選擇十個選項。 例如:

Who do you want to send the message to?

* Bobo the Great!
* Bobo Jr.
* Little Bobo

如果仍然有問題,請讓 Siri 提示使用者提供一個全新的、更具體的給定值答案。

要求最終確認

在應用程式實際執行工作以完成使用者的要求之前,Siri 會檢查應用程式延伸模組,以確保一切都已就緒。 例如,使用者在其帳戶中有足夠的錢來支付要求的付款嗎?

此外,應用程式需要確保它提供 Siri 的所有可能資訊,以便向用戶呈現它,並確認即將執行的工作符合其期望。

使用者確認要求並執行應用程式之後,應用程式必須再次確定已將所有結果提供給 Siri,以便將結果與用戶產生關聯。

回應要求

Siri 針對它瞭解的每個網域和動作,都有數個內建的使用者介面。 不過,在適當的情況下,應用程式可以提供自定義意圖 UI 延伸模組,藉由呈現應用程式的商標和 UI 或要求中所提供的更多資訊來豐富用戶體驗。

也就是說,設計 Siri 的自定義介面時,應該使用克制。 一般而言,使用者想要儘快完成特定工作,而且不想以不必要的資訊多載。

也應該小心,以確保自定義UI在使用者可能擁有或使用裝置的所有不同iOS裝置和方向中看起來和響應正確。

適當時,請使用 SiriKit API 來隱藏預設 Siri UI 中已存在的任何備援資訊。 然而,確保應用程式仍在提供資訊給 Siri,以便它可以在無手的情況下口頭呈現它。

在某些情況下,Siri 會啟動應用程式以履行使用者的要求,例如顯示使用者所要求的相片。 在這些情況下,不要對使用者感到驚訝。 顯示預期的資訊,而不需要中繼步驟或進一步的互動。 永遠不要顯示資訊或執行使用者不預期的工作。

拋光設計

Apple 建議進行幾個步驟來改進對話式介面的設計。 首先,是向 Siri 提供清楚、簡潔的詞彙和使用案例範例。

使用者探索應用程式的其中一種方式是起始與 Siri 的交談,並詢問 「你能做什麼? Siri 會顯示其可執行的數種不同動作,包括開發人員的應用程式,以及透過其 plist 檔案提供的範例主圖使用案例。

如何撰寫良好的範例使用案例:

  • 請確定範例包含應用程式名稱。
  • 讓範例保持簡短且指向點。
  • 針對應用程式支援的每個意圖,提供多個範例。
  • 根據應用程式最常見的使用案例,排定意圖和其中範例的優先順序。
  • 請確定應用程式提供本地化的範例。
  • 請確定指定的每個範例在應用程式中如預期般運作。
  • 請避免在範例中處理 Siri,因此請勿包含如 “Hey Siri...” 之類的 文字。
  • 避免任何不必要的愉快,例如“請”“謝謝”。

請花一點時間探索和實驗應用程式如何塑造 Siri 代表使用者進行的對話。 請務必在整個過程中與一般使用者交談,因為他們與應用程式的互動和期望可能會隨著時間而改變。

請務必記得在不同情況下測試應用程式,以及叫用與 Siri 交談的所有不同方法。 在真實世界的位置中測試使用者可能會使用應用程式,遠離辦公室和辦公桌。

努力讓與 Siri 交談(代表應用程式)流暢、自然和“感覺正確”。

摘要

本文涵蓋使用 SiriKit 所需的重要概念,並顯示它可以與 Xamarin.iOS 應用程式互動,以提供使用者可在 iOS 裝置上使用 Siri 和 地圖 應用程式存取的服務。