Udostępnij za pośrednictwem


Aktualizacje SiriKit w systemie iOS 11

SiriKit został wprowadzony w systemie iOS 10 z wieloma domenami usług (w tym treningami, rezerwacją przejazdów i wykonywaniem połączeń). Zapoznaj się z sekcją SiriKit, aby zapoznać się z pojęciami SiriKit i jak zaimplementować zestaw SiriKit w aplikacji.

Pokaz listy zadań Siri

Zestaw SiriKit w systemie iOS 11 dodaje te nowe i zaktualizowane domeny intencji:

  • Listy i notatki — nowe! Udostępnia interfejs API dla aplikacji do przetwarzania zadań i notatek.
  • Kody wizualne — nowe! Siri może wyświetlać kody QR, aby udostępniać informacje kontaktowe lub uczestniczyć w transakcjach płatności.
  • Płatności — dodano intencje wyszukiwania i transferu dla interakcji z płatnościami.
  • Rezerwacja przejazdów — dodano intencje anulowania przejazdu i opinii.

Inne nowe funkcje to:

  • Alternatywne nazwy aplikacji — udostępnia aliasy, które ułatwiają klientom kierowanie siri do aplikacji, oferując alternatywne nazwy/wymowę.
  • Treningi początkowe — zapewnia możliwość rozpoczęcia treningu w tle.

Poniżej wyjaśniono niektóre z tych funkcji. Aby uzyskać więcej informacji na temat innych, zapoznaj się z dokumentacją SiriKit firmy Apple.

Listy i notatki

Nowa domena list i notatek udostępnia interfejs API dla aplikacji do przetwarzania zadań i notatek za pośrednictwem żądań głosowych Siri.

Zadania

  • Mają tytuł i stan ukończenia.
  • Opcjonalnie dołącz termin ostateczny i lokalizację.

Uwagi

  • Tytuł i pole zawartości.

Zadania i notatki można organizować w grupy.

Jak przetworzyć żądanie SiriKit

Przetwórz żądanie SiriKit, wykonując następujące kroki:

  1. Rozwiąż — zweryfikuj parametry i zażądaj dalszych informacji od użytkownika (jeśli jest to wymagane).
  2. Potwierdź — ostateczna weryfikacja i weryfikacja, czy żądanie można przetworzyć.
  3. Obsługa — wykonywanie operacji (aktualizowanie danych lub wykonywanie operacji sieciowych).

Pierwsze dwa kroki są opcjonalne (choć zalecane), a ostatni krok jest wymagany. Bardziej szczegółowe instrukcje znajdują się w sekcji SiriKit.

Rozwiązywanie i potwierdzanie metod

Te opcjonalne metody umożliwiają kodowi przeprowadzenie walidacji, wybranie wartości domyślnych lub zażądanie dodatkowych informacji od użytkownika.

Na przykład dla interfejsu IINCreateTaskListIntent wymagana metoda to HandleCreateTaskList. Istnieją cztery opcjonalne metody, które zapewniają większą kontrolę nad interakcją Siri:

  • ResolveTitle — weryfikuje tytuł, ustawia domyślny tytuł (jeśli jest to konieczne) lub sygnalizuje, że dane nie są wymagane.
  • ResolveTaskTitles — weryfikuje listę zadań wypowiadanych przez użytkownika.
  • ResolveGroupName — weryfikuje nazwę grupy, wybiera grupę domyślną lub sygnalizuje, że dane nie są wymagane.
  • ConfirmCreateTaskList — sprawdza, czy kod może wykonać żądaną operację, ale nie wykonuje jej (tylko Handle* metody powinny modyfikować dane).

Obsługa intencji

Istnieje sześć intencji w domenie list i notatek, trzy dla zadań i trzy dla notatek. Metody, które należy zaimplementować w celu obsługi tych intencji, to:

  • W przypadku zadań:
    • HandleAddTasks
    • HandleCreateTaskList
    • HandleSetTaskAttribute
  • Uwagi:
    • HandleCreateNote
    • HandleAppendToNote
    • HandleSearchForNotebookItems

Każda metoda ma przekazany określony typ intencji, który zawiera wszystkie informacje, które Siri analizuje z żądania użytkownika (i ewentualnie zaktualizowane w Resolve* metodach i Confirm* ). Aplikacja musi przeanalizować podane dane, a następnie wykonać kilka akcji do przechowywania lub przetwarzania danych w inny sposób i zwrócić wynik, który Siri mówi i wyświetla użytkownikowi.

Kody odpowiedzi

Wymagane Handle* i opcjonalne Confirm* metody wskazują kod odpowiedzi, ustawiając wartość obiektu przekazywanego do procedury obsługi uzupełniania. Odpowiedzi pochodzą z INCreateTaskListIntentResponseCode wyliczenia:

  • Ready — Zwraca wartość w fazie potwierdzenia (tj. z Confirm* metody, ale nie z Handle* metody).
  • InProgress — służy do długotrwałych zadań (takich jak operacja sieci/serwera).
  • Success — odpowiada ze szczegółami pomyślnej operacji (tylko z Handle* metody).
  • Failure — Oznacza, że wystąpił błąd i nie można ukończyć operacji.
  • RequiringAppLaunch — Nie można przetworzyć przez intencję, ale operacja jest możliwa w aplikacji.
  • Unspecified — Nie używaj: dla użytkownika zostanie wyświetlony komunikat o błędzie.

Dowiedz się więcej o tych metodach i odpowiedziach na listach SiriKit firmy Apple i dokumentacji notatek.

Implementowanie list i notatek

Najpierw, aby dodać obsługę SiriKit, wykonaj następujące kroki dla aplikacji systemu iOS:

  1. Znacznik SiriKit w pliku Entitlements.plist.
  2. Dodaj klucz Privacy — Siri Usage Description (Prywatność — opis użycia Siri) do pliku Info.plist wraz z komunikatem dla Twoich klientów.
  3. Wywołaj metodę INPreferences.RequestSiriAuthorization w aplikacji, aby wyświetlić użytkownikowi monit o zezwolenie na interakcje Siri.
  4. Dodaj zestaw SiriKit do identyfikatora aplikacji w portalu dla deweloperów i utwórz ponownie profile aprowizacji, aby uwzględnić nowe uprawnienie.

Następnie dodaj nowy projekt rozszerzenia do aplikacji, aby obsługiwać żądania Siri:

  1. Kliknij prawym przyciskiem myszy rozwiązanie i wybierz polecenie Dodaj > nowy projekt....
  2. Wybierz szablon Rozszerzenia intencji rozszerzeń systemu > iOS>.
  3. Zostaną dodane dwa nowe projekty: Intent i IntentUI. Dostosowywanie interfejsu użytkownika jest opcjonalne, więc przykład zawiera tylko kod w projekcie Intent .

Projekt rozszerzenia to miejsce przetwarzania wszystkich żądań SiriKit. Jako oddzielne rozszerzenie nie ma automatycznego sposobu komunikowania się z główną aplikacją — jest to zwykle rozwiązywane przez zaimplementowanie udostępnionego magazynu plików przy użyciu grup aplikacji.

Konfigurowanie programu IntentHandler

Klasa IntentHandler jest punktem wejścia dla żądań Siri — każda intencja jest przekazywana do GetHandler metody, która zwraca obiekt, który może obsłużyć żądanie.

Poniższy kod przedstawia prostą implementację:

[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!
}

Klasa musi dziedziczyć z INExtensionklasy , a ponieważ przykład obsługuje listy i intencje notatek, implementuje IINNotebookDomainHandlingrównież element .

Uwaga

  • Istnieje konwencja platformy .NET, która umożliwia prefiks interfejsów ze znakiem capital I, do którego platforma Xamarin jest zgodna podczas tworzenia powiązań protokołów z zestawu iOS SDK.
  • Platforma Xamarin zachowuje również nazwy typów z systemu iOS, a firma Apple używa dwóch pierwszych znaków w nazwach typów, aby odzwierciedlić strukturę, do których należy typ.
  • W przypadku Intents platformy typy są poprzedzone prefiksem IN* (np. INExtension), ale nieto interfejsy.
  • Wynika to również z tego, że protokoły (które stają się interfejsami w języku C#) kończą się dwoma Is, takimi jak IINAddTasksIntentHandling.

Obsługa intencji

Każda intencja (Dodaj zadanie, Ustaw atrybut zadania itp.) jest implementowana w jednej metodzie podobnej do przedstawionej poniżej. Metoda powinna wykonywać trzy główne funkcje:

  1. Przetwarzanie intencji — dane analizowane przez Siri są udostępniane w obiekcie specyficznym intent dla typu intencji. Aplikacja mogła zweryfikować, czy dane korzystają z opcjonalnych Resolve* metod.
  2. Zweryfikuj i zaktualizuj magazyn danych — zapisz dane w systemie plików (przy użyciu grup aplikacji, aby główna aplikacja systemu iOS mogła również uzyskać do niego dostęp) lub za pośrednictwem żądania sieciowego.
  3. Podaj odpowiedź — użyj completion programu obsługi, aby wysłać odpowiedź z powrotem do Siri, aby odczytać/wyświetlić użytkownikowi:
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);
}

Zwróć uwagę, że null parametr jest przekazywany jako drugi parametr do odpowiedzi — jest to parametr aktywności użytkownika, a jeśli nie zostanie podany, zostanie użyta wartość domyślna. Niestandardowy typ działania można ustawić tak długo, jak aplikacja systemu iOS obsługuje ją za pośrednictwem NSUserActivityTypes klucza w pliku Info.plist. Następnie możesz obsłużyć ten przypadek po otwarciu aplikacji i wykonać określone operacje (takie jak otwieranie odpowiedniego kontrolera widoku i ładowanie danych z operacji Siri).

Przykład koduje Success również wynik na stałe, ale w rzeczywistych scenariuszach należy dodać odpowiednie raportowanie błędów.

Frazy testowe

Następujące frazy testowe powinny działać w przykładowej aplikacji:

  • "Utwórz listę artykułów spożywczych z jabłkami, bananami i gruszkami w TasksNotes"
  • "Dodaj zadanie WWDC w zadaniaNotes"
  • "Dodaj zadanie WWDC do listy szkoleniowej w taskNotes"
  • "Oznacz udział w WWDC jako ukończone w zadaniaNotes"
  • "W ZadaniaNotes przypomnieć mi, aby kupić telefon iPhone, gdy dostanę się do domu"
  • "Oznacz zakup telefonu iPhone jako ukończonego w programie TasksNotes"
  • "Przypomnij mi, aby opuścić dom o 8 rano w TasksNotes"

Tworzenie nowego przykładu listy Ustawianie zadania jako kompletnego przykładu

Uwaga

Symulator systemu iOS 11 obsługuje testowanie za pomocą Siri (w przeciwieństwie do wcześniejszych wersji).

W przypadku testowania na rzeczywistych urządzeniach nie zapomnij skonfigurować identyfikatora aplikacji i profilów aprowizacji na potrzeby obsługi zestawu SiriKit.

Alternatywne nazwy

Ta nowa funkcja systemu iOS 11 oznacza, że można skonfigurować alternatywne nazwy aplikacji, aby ułatwić użytkownikom poprawne wyzwalanie jej za pomocą Siri. Dodaj następujące klucze do pliku Info.plist projektu aplikacji systemu iOS:

Plik Info.plist przedstawiający alternatywne klucze i wartości nazw aplikacji

Po ustawieniu alternatywnych nazw aplikacji następujące frazy będą również działać dla przykładowej aplikacji (która jest faktycznie nazwana TasksNotes):

  • "Zrób listę artykułów spożywczych z jabłkami, bananami i gruszkami w MonkeyNotes"
  • "Dodaj zadanie WWDC w MonkeyTodo"

Rozwiązywanie problemów

Niektóre błędy, które mogą wystąpić podczas uruchamiania przykładu lub dodawania zestawu SiriKit do własnych aplikacji:

NSInternalInconsistencyException

Objective-C Wyjątek. Nazwa: NSInternalInconsistencyException Reason: Use of the class <INPreferences: 0x60400082ff00> from an app wymaga uprawnienia com.apple.developer.siri. Czy włączono funkcję Siri w projekcie Xcode?

  • SiriKit jest zaznaczony w pliku Entitlements.plist.

  • Plik Entitlements.plist jest skonfigurowany w obszarze Opcje > projektu Kompilowanie > podpisywania pakietu systemu iOS.

    Opcje projektu pokazujące poprawnie ustawione uprawnienia

  • (w przypadku wdrażania urządzeń) Identyfikator aplikacji ma pobrany profil SiriKit i aprowizację.