SiriKit Aktualizace v iOSu 11

SiriKit byl představen v iOSu 10 s celou řadou servisních domén (včetně cvičení, rezervace jízdy a volání). Informace o konceptech SiriKitu a o tom, jak implementovat SiriKit ve vaší aplikaci, najdete v části SiriKit.

Siri task list demo

SiriKit v iOSu 11 přidá tyto nové a aktualizované domény záměru:

  • Seznamy a poznámky – nové! Poskytuje rozhraní API pro aplikace pro zpracování úloh a poznámek.
  • Vizuální kódy – nové! Siri může zobrazit kódy QR pro sdílení kontaktních údajů nebo účast v platebních transakcích.
  • Platby – Přidali jsme záměry vyhledávání a přenosu pro interakce s platbami.
  • Rezervace jízdy – Přidali jsme záměry zrušit jízdu a zpětnou vazbu.

Mezi další nové funkce patří:

  • Alternativní názvy aplikací – Poskytuje aliasy, které zákazníkům pomůžou informovat Siri, aby se na vaši aplikaci zaměřovali tak, že nabízejí alternativní názvy a výslovnost.
  • Zahájení cvičení – Poskytuje schopnost začít cvičení na pozadí.

Některé z těchto funkcí jsou vysvětlené níže. Další podrobnosti o ostatních najdete v dokumentaci k SiriKitu společnosti Apple.

Seznamy a poznámky

Nové seznamy a doména poznámek poskytují rozhraní API pro zpracování úkolů a poznámek prostřednictvím hlasových požadavků Siri.

Úlohy

  • Má název a stav dokončení.
  • Volitelně můžete zahrnout konečný termín a umístění.

Poznámky

  • Mít název a pole obsahu.

Úkoly i poznámky je možné uspořádat do skupin. Zbytek této části popisuje, jak implementovat tuto novou doménu pomocí SiriKitu pomocí příkladu TasksNotes SiriKit.

Postup zpracování žádosti SiriKitu

Žádost SiriKitu můžete zpracovat pomocí následujícího postupu:

  1. Řešení – Ověření parametrů a vyžádání dalších informací od uživatele (v případě potřeby)
  2. Potvrzení – konečné ověření a ověření, že žádost lze zpracovat.
  3. Popisovač – provedení operace (aktualizace dat nebo provádění síťových operací)

První dva kroky jsou volitelné (i když se doporučuje) a je potřeba provést poslední krok. Podrobnější pokyny najdete v části SiriKit.

Řešení a potvrzení metod

Tyto volitelné metody umožňují vašemu kódu provádět ověřování, vybírat výchozí hodnoty nebo požadovat další informace od uživatele.

Například pro IINCreateTaskListIntent rozhraní je HandleCreateTaskListpožadovaná metoda . Existují čtyři volitelné metody, které poskytují větší kontrolu nad interakcí Siri:

  • ResolveTitle – Ověří název, nastaví výchozí název (pokud je to vhodné) nebo signály, že data nejsou povinná.
  • ResolveTaskTitles – Ověří seznam úkolů mluvených uživatelem.
  • ResolveGroupName – Ověří název skupiny, zvolí výchozí skupinu nebo signály, že data nejsou povinná.
  • ConfirmCreateTaskList – Ověří, že váš kód může provést požadovanou operaci, ale neprovádí ji (pouze Handle* metody by měly upravovat data).

Zpracování záměru

V seznamech a doméně poznámek je šest záměrů, tři pro úkoly a tři pro poznámky. Metody, které je nutné implementovat pro zpracování těchto záměrů, jsou:

  • Pro úkoly:
    • HandleAddTasks
    • HandleCreateTaskList
    • HandleSetTaskAttribute
  • Poznámky:
    • HandleCreateNote
    • HandleAppendToNote
    • HandleSearchForNotebookItems

Každá metoda má předaný konkrétní typ záměru, který obsahuje všechny informace, které Siri parsovala z požadavku uživatele (a případně i v Resolve*Confirm* metodách). Vaše aplikace musí analyzovat zadaná data, pak provést určité akce pro ukládání nebo jinak zpracovávat data a vrátit výsledek, který Siri mluví a zobrazuje uživateli.

Kódy odpovědí

Požadované Handle* a volitelné Confirm* metody označují kód odpovědi nastavením hodnoty objektu, který předají obslužné rutině dokončení. Odpovědi pocházejí z výčtu INCreateTaskListIntentResponseCode :

  • Ready – Vrátí během potvrzovací fáze (tj. z Confirm* metody, ale ne z Handle* metody).
  • InProgress – Používá se pro dlouhotrvající úlohy (například pro provoz sítě nebo serveru).
  • Success – Odpoví podrobnostmi o úspěšné operaci (pouze z Handle* metody).
  • Failure – Znamená, že došlo k chybě a operaci nebylo možné dokončit.
  • RequiringAppLaunch – Záměr nemůže zpracovat, ale operace je v aplikaci možná.
  • Unspecified – Nepoužívejte: uživateli se zobrazí chybová zpráva.

Další informace o těchto metodách a odpovědích najdete v dokumentace k sadě SiriKit společnosti Apple.

Implementace seznamů a poznámek

Příklad TasksNotes SiriKit byl vytvořen pomocí následujícího postupu pro přidání podpory SiriKitu do prázdné aplikace pro iOS.

Nejprve přidejte podporu SiriKitu podle těchto kroků pro vaši aplikaci pro iOS:

  1. Zaškrtněte SiriKit v entitlements.plist.
  2. Přidejte klíč Pro ochranu osobních údajů – Popis použití Siri do souboru Info.plist spolu se zprávou pro vaše zákazníky.
  3. Zavolejte metodu INPreferences.RequestSiriAuthorization v aplikaci, aby se uživateli zobrazila výzva, aby povolil interakci Siri.
  4. Přidejte SiriKit k ID vaší aplikace na portálu pro vývojáře a znovu vytvořte zřizovací profily, aby zahrnovaly nový nárok.

Pak do aplikace přidejte nový projekt rozšíření pro zpracování požadavků Siri:

  1. Klikněte pravým tlačítkem na řešení a zvolte Přidat > nový projekt....
  2. Zvolte šablonu rozšíření záměrů rozšíření > pro iOS>.
  3. Přidají se dva nové projekty: Záměr a IntentUI. Přizpůsobení uživatelského rozhraní je volitelné, takže ukázka zahrnuje pouze kód v projektu Intent .

Projekt rozšíření je místo, kde se budou zpracovávat všechny požadavky SiriKitu. Jako samostatné rozšíření nemá automaticky žádný způsob komunikace s hlavní aplikací – obvykle se to řeší implementací sdíleného úložiště souborů pomocí skupin aplikací.

Konfigurace obslužné rutiny záměru

Třída IntentHandler je vstupním bodem pro požadavky Siri – každému záměru GetHandler se předá metoda, která vrátí objekt, který může požadavek zpracovat.

Následující kód ukazuje jednoduchou implementaci:

[Register("IntentHandler")]
public partial class IntentHandler : INExtension, IINNotebookDomainHandling
{
  protected IntentHandler(IntPtr handle) : base(handle)
  {}
  public override NSObject GetHandler(INIntent intent)
  {
    // This is the default implementation.  If you want different objects to handle different intents,
    // you can override this and return the handler you want for that particular intent.
    return this;
  }
  // add intent handlers here!
}

Třída musí dědit z INExtension, a protože ukázka bude zpracovávat seznamy a poznámky záměry, implementuje IINNotebookDomainHandlingtaké .

Poznámka:

  • V .NET existuje konvence pro rozhraní, která mají mít předponu kapitál I, který Xamarin dodržuje při vytváření vazeb protokolů ze sady iOS SDK.
  • Xamarin také zachovává názvy typů z iOSu a Apple používá první dva znaky v názvech typů k vyjádření architektury, do které typ patří.
  • Pro architekturu Intents mají typy předponu IN* (např. INExtension), ale nejsou to rozhraní.
  • Dále následuje, že protokoly (které se stanou rozhraními v jazyce C#) končí dvěma Is, například IINAddTasksIntentHandling.

Zpracování záměrů

Každý záměr (Přidat úkol, Nastavit atribut úkolu atd.) se implementuje v jedné metodě podobné tomu, které je znázorněno níže. Metoda by měla provádět tři hlavní funkce:

  1. Zpracovat záměr – Data analyzovaná Sirim jsou k dispozici v objektu intent specifickém pro typ záměru. Vaše aplikace možná ověřila, že data používají volitelné Resolve* metody.
  2. Ověřte a aktualizujte úložiště dat – Uložte data do systému souborů (pomocí skupin aplikací, aby k němu hlavní aplikace pro iOS měl také přístup) nebo prostřednictvím síťové žádosti.
  3. Zadejte odpověď – pomocí completion obslužné rutiny odešlete odpověď zpět do Siri pro čtení a zobrazení uživateli:
public void HandleCreateTaskList(INCreateTaskListIntent intent, Action<INCreateTaskListIntentResponse> completion)
{
  var list = TaskList.FromIntent(intent);
  // TODO: have to create the list and tasks... in your app data store
  var response = new INCreateTaskListIntentResponse(INCreateTaskListIntentResponseCode.Success, null)
  {
    CreatedTaskList = list
  };
  completion(response);
}

Všimněte si, že null se jako druhý parametr předá odpověď – jedná se o parametr aktivity uživatele a pokud není zadán, použije se výchozí hodnota. Pokud vaše aplikace pro iOS podporuje tento typ aktivity prostřednictvím NSUserActivityTypes klíče v souboru Info.plist, můžete nastavit vlastní typ aktivity. Tento případ pak můžete zpracovat při otevření aplikace a provádět konkrétní operace (například otevření příslušného kontroleru zobrazení a načtení dat z operace Siri).

Příklad také pevně zakóduje Success výsledek, ale v reálných scénářích by se mělo přidat správné hlášení chyb.

Testovací fráze

V ukázkové aplikaci by měly fungovat následující testovací fráze:

  • "Vytvořit seznam potravin s jablky, banány a hrušněmi v TasksNotes"
  • "Přidání úkolu WWDC v TasksNotes"
  • "Přidání úkolu WWDC do seznamu trénování v TasksNotes"
  • "Mark attend WWDC as complete in TasksNotes"
  • "V TasksNotes mi připomíná, že si koupím iphone, když se vrátím domů"
  • "Mark buy i Telefon as completed in TasksNotes"
  • "Připomeňte mi, abych odešel domů v 8:00 v TasksNotes"

Create a new list exampleSet task as complete example

Poznámka:

Simulátor iOS 11 podporuje testování pomocí Siri (na rozdíl od předchozích verzí).

Pokud testujete na skutečných zařízeních, nezapomeňte nakonfigurovat ID aplikace a zřizovací profily pro podporu SiriKitu.

Alternativní názvy

Tato nová funkce pro iOS 11 znamená, že můžete pro aplikaci nakonfigurovat alternativní názvy, které uživatelům pomůžou správně ho aktivovat pomocí Siri. Do souboru Info.plist projektu aplikace pro iOS přidejte následující klíče:

Info.plist showing alternative app name keys and values

S nastavenými názvy alternativních aplikací budou pro ukázkovou aplikaci fungovat také následující fráze (které se ve skutečnosti nazývají TasksNotes):

  • "Make a potravin list with apples, bananas, and pears in MonkeyNotes"
  • "Přidání úkolu WWDC v MonkeyTodo"

Řešení problému

Některé chyby, se kterými se můžete setkat při spuštění ukázky nebo přidání SiriKitu do vlastních aplikací:

NSInternalInconsistencyException

Objective-C vyvolaná výjimka. Název: NSInternalInconsistencyException Reason: Použití třídy <INPreferences: 0x60400082ff00> z aplikace vyžaduje nárok com.apple.developer.siri. Povolili jste v projektu Xcode funkci Siri?

  • SiriKit je zaškrtnutý v souboru Entitlements.plist.

  • V sadě Project Options > Build iOS Bundle Signing se konfiguruje entitlements.plist>.

    Project options showing Entitlements correctly set

  • (pro nasazení zařízení) ID aplikace má povolený a zřizovací profil SiriKit stažený.