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.
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:
- Rozwiąż — zweryfikuj parametry i zażądaj dalszych informacji od użytkownika (jeśli jest to wymagane).
- Potwierdź — ostateczna weryfikacja i weryfikacja, czy żądanie można przetworzyć.
- 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 (tylkoHandle*
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. zConfirm*
metody, ale nie zHandle*
metody).InProgress
— służy do długotrwałych zadań (takich jak operacja sieci/serwera).Success
— odpowiada ze szczegółami pomyślnej operacji (tylko zHandle*
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:
- Znacznik SiriKit w pliku Entitlements.plist.
- Dodaj klucz Privacy — Siri Usage Description (Prywatność — opis użycia Siri) do pliku Info.plist wraz z komunikatem dla Twoich klientów.
- Wywołaj metodę
INPreferences.RequestSiriAuthorization
w aplikacji, aby wyświetlić użytkownikowi monit o zezwolenie na interakcje Siri. - 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:
- Kliknij prawym przyciskiem myszy rozwiązanie i wybierz polecenie Dodaj > nowy projekt....
- Wybierz szablon Rozszerzenia intencji rozszerzeń systemu > iOS>.
- 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 INExtension
klasy , a ponieważ przykład obsługuje listy i intencje notatek, implementuje IINNotebookDomainHandling
ró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 prefiksemIN*
(np.INExtension
), ale nie są to interfejsy. - Wynika to również z tego, że protokoły (które stają się interfejsami w języku C#) kończą się dwoma
I
s, takimi jakIINAddTasksIntentHandling
.
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:
- Przetwarzanie intencji — dane analizowane przez Siri są udostępniane w obiekcie specyficznym
intent
dla typu intencji. Aplikacja mogła zweryfikować, czy dane korzystają z opcjonalnychResolve*
metod. - 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.
- 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"
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:
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.
(w przypadku wdrażania urządzeń) Identyfikator aplikacji ma pobrany profil SiriKit i aprowizację.