proaktywne sugestie dotyczące systemu watchOS na platformie Xamarin
W tym artykule pokazano, jak używać proaktywnych sugestii w aplikacji systemu watchOS 3 w celu umożliwienia systemowi proaktywnego prezentowania przydatnych informacji automatycznie użytkownikowi.
Nowe, aby obejrzeć systemOS 3, proaktywne sugestie prezentują wiadomości umożliwiające użytkownikom angażowanie się w aplikację platformy Xamarin.iOS przez proaktywne prezentowanie przydatnych informacji automatycznie użytkownikowi w odpowiednim czasie.
Informacje o proaktywnych sugestiach
Nowość w systemie watchOS 3 zawiera MapItem
właściwość, NSUserActivity
która umożliwia aplikacji udostępnianie informacji o lokalizacji, które mogą być używane w innych kontekstach. Jeśli na przykład aplikacja wyświetla recenzje hotelowe i udostępnia lokalizacjęMapItem
, jeśli użytkownik przełączył się na aplikację Mapy, lokalizacja hotelu, który był po prostu oglądany, będzie dostępna.
Aplikacja udostępnia tę funkcję systemowi przy użyciu kolekcji technologii, takich jak NSUserActivity
, MapKit, Odtwarzacz multimedialny i UIKit. Ponadto dzięki udostępnieniu proaktywnej obsługi sugestii dla aplikacji jest coraz głębsza integracja Siri bezpłatnie.
Sugestie oparte na lokalizacji
Nowość dla systemu watchOS 3, klasa zawiera MapItem
właściwość, NSUserActivity
która umożliwia deweloperowi udostępnianie informacji o lokalizacji, które mogą być używane w innych kontekstach. Jeśli na przykład aplikacja wyświetla recenzje restauracji, deweloper może ustawić MapItem
właściwość na lokalizację restauracji, którą użytkownik wyświetla w aplikacji. Jeśli użytkownik przełączy się do aplikacji Mapy, lokalizacja restauracji będzie automatycznie dostępna.
Jeśli aplikacja obsługuje wyszukiwanie aplikacji, może użyć nowych składników CSSearchableItemAttributesSet
adresu klasy, aby określić lokalizacje, które użytkownik może chcieć odwiedzić. MapItem
Ustawiając właściwość, pozostałe właściwości są wypełniane automatycznie.
Oprócz ustawienia Latitude
właściwości i Longitude
składnika adresu zaleca się, aby aplikacja dostarczała NamedLocation
właściwości i PhoneNumbers
, aby Siri mogła zainicjować wywołanie lokalizacji.
Kontekstowe przypomnienia Siri
Umożliwia użytkownikowi szybkie przypomnienie o wyświetlaniu zawartości, która jest obecnie wyświetlana w aplikacji w późniejszym terminie. Jeśli na przykład przeglądali recenzję restauracji w aplikacji, mogą wywołać Siri i powiedzieć : "Przypomnij mi o tym, gdy dostanę się do domu". Siri wygeneruje przypomnienie za pomocą linku do przeglądu w aplikacji.
Implementowanie proaktywnych sugestii
Dodanie obsługi proaktywnych sugestii do aplikacji platformy Xamarin.iOS jest zwykle tak proste, jak zaimplementowanie kilku interfejsów API lub rozszerzenie kilku interfejsów API, które aplikacja może już implementować.
Proaktywne sugestie działają z aplikacjami na trzy główne sposoby:
NSUserActivity
— Pomaga systemowi zrozumieć, jakie informacje aktualnie pracuje użytkownik na ekranie.- Sugestie dotyczące lokalizacji — jeśli aplikacja oferuje lub korzysta z informacji opartych na lokalizacji, to rozszerzenie interfejsu API oferuje nowe sposoby udostępniania tych informacji w aplikacjach.
Funkcja ta jest obsługiwana w aplikacji, implementując następujące elementy:
- Kontekstowe przypomnienia Siri — w systemie iOS 10 został rozszerzony,
NSUserActivity
aby umożliwić Siri szybkie przypomnienie o wyświetlaniu zawartości, która jest obecnie wyświetlana w aplikacji w późniejszym terminie. - Sugestie dotyczące lokalizacji — system iOS 10 rozszerza
NSUserActivity
możliwości przechwytywania lokalizacji wyświetlanych wewnątrz aplikacji i promowania ich w wielu miejscach w całym systemie. - Kontekstowe żądania -
NSUserActivity
Siri zawierają kontekst informacji przedstawionych w aplikacji siri, dzięki czemu użytkownik może uzyskać wskazówki lub umieścić wywołanie funkcji Siri z poziomu aplikacji.
Wszystkie te funkcje mają jedną wspólną cechę, wszystkie są używane NSUserActivity
w jednej lub innej formie, aby zapewnić ich funkcjonalność.
NSUserActivity
Jak wspomniano powyżej, pomaga systemowi zrozumieć, NSUserActivity
jakie informacje użytkownik aktualnie pracuje na ekranie. NSUserActivity
to lekki mechanizm buforowania stanu umożliwiający przechwytywanie aktywności użytkownika podczas przechodzenia przez aplikację. Na przykład zapoznaj się z aplikacją restauracji:
W przypadku następujących interakcji:
- Gdy użytkownik współpracuje z aplikacją,
NSUserActivity
zostanie utworzony w celu ponownego utworzenia stanu aplikacji później. - Jeśli użytkownik wyszukuje restaurację, następuje ten sam wzorzec tworzenia działań.
- I znowu, gdy użytkownik wyświetli wynik. W tym ostatnim przypadku użytkownik wyświetla lokalizację i w systemie iOS 10 system jest bardziej świadomy niektórych pojęć (takich jak interakcja z lokalizacją lub komunikacją).
Przyjrzyj się bliżej ostatniego ekranu:
W tym miejscu aplikacja tworzy NSUserActivity
obiekt i została wypełniona informacjami, aby ponownie utworzyć stan później. Aplikacja zawierała również pewne metadane, takie jak nazwa i adres lokalizacji. Po utworzeniu tego działania aplikacja informuje system iOS, że reprezentuje bieżący stan użytkownika.
Następnie aplikacja decyduje, czy działanie zostanie anonsowane za pośrednictwem powietrza dla przekazywania, zapisane jako tymczasowa wartość sugestii dotyczących lokalizacji lub dodane do indeksu W centrum uwagi na urządzeniu do wyświetlania w wynikach wyszukiwania.
Aby uzyskać więcej informacji na temat wyszukiwania Handoff i Spotlight, zobacz przewodniki Wprowadzenie do przekazywania i interfejsów API wyszukiwania dla systemu iOS 9.
Tworzenie działania
Przed utworzeniem działania należy utworzyć identyfikator typu działania, aby go zidentyfikować. Identyfikator typu działania to krótki ciąg dodany do NSUserActivityTypes
tablicy pliku aplikacji Info.plist
używanego do unikatowego identyfikowania danego typu działania użytkownika. W tablicy będzie znajdować się jeden wpis dla każdego działania obsługiwanego przez aplikację i uwidacznianego w wyszukiwaniu aplikacji. Aby uzyskać więcej informacji, zobacz dokumentację dotyczącą tworzenia identyfikatorów typów działań.
Spójrz na przykład działania:
// Create App Activity
var activity = new NSUserActivity ("com.xamarin.platform");
// Define details
var info = new NSMutableDictionary ();
info.Add(new NSString("link"),new NSString("http://xamarin.com/platform"));
// Populate Activity
activity.Title = "The Xamarin Platform";
activity.UserInfo = info;
// Enable capabilities
activity.EligibleForSearch = true;
activity.EligibleForHandoff = true;
activity.EligibleForPublicIndexing = true;
// Inform system of Activity
activity.BecomeCurrent();
Nowe działanie jest tworzone przy użyciu identyfikatora typu działania. Następnie niektóre metadane definiujące działanie są tworzone, aby można było przywrócić ten stan w późniejszym terminie. Następnie działanie otrzymuje znaczący tytuł i jest dołączane do informacji o użytkowniku. Na koniec niektóre możliwości są włączone, a działanie jest wysyłane do systemu.
Powyższy kod można dodatkowo ulepszyć w celu uwzględnienia metadanych, które zapewniają kontekst działania, wprowadzając następujące zmiany:
...
// Provide context
var attributes = new CSSearchableItemAttributeSet ("com.xamarin.location");
attributes.ThumbnailUrl = myThumbnailURL;
attributes.Keywords = new string [] { "software", "mobile", "language" };
activity.ContentAttributeSet = attributes;
// Inform system of Activity
activity.BecomeCurrent();
Jeśli deweloper ma witrynę internetową, która może wyświetlać te same informacje co aplikacja, aplikacja może zawierać adres URL, a zawartość może być wyświetlana na innych urządzeniach, na których nie zainstalowano aplikacji (za pośrednictwem przekazywania):
// Restore on the web
activity.WebPageUrl = new NSUrl("http://xamarin.com/platform");
Przywracanie działania
Aby odpowiedzieć użytkownikowi na naciśnięcie wyniku wyszukiwania (NSUserActivity
) dla aplikacji, zmodyfikuj plik AppDelegate.cs i przesłoń metodę ContinueUserActivity
. Na przykład:
public override bool ContinueUserActivity (UIApplication application, NSUserActivity userActivity, UIApplicationRestorationHandler completionHandler)
{
// Take action based on the activity type
switch (userActivity.ActivityType) {
case "com.xamarin.platform":
// Restore the state of the app here...
break;
}
return true;
}
Upewnij się, że jest to ten sam identyfikator typu działania (com.xamarin.platform
) co utworzone powyżej działanie. Aplikacja używa informacji przechowywanych w obiekcie NSUserActivity
, aby przywrócić stan z powrotem do miejsca, w którym użytkownik opuścił.
Zalety tworzenia działania
Po przedstawionej powyżej minimalnej ilości kodu aplikacja może teraz korzystać z trzech nowych funkcji systemu iOS 10:
- Handoff
- Wyszukiwanie w centrum uwagi
- Kontekstowe przypomnienia Siri
W poniższej sekcji przedstawiono włączanie dwóch innych nowych funkcji systemu iOS 10:
- Sugestie dotyczące lokalizacji
- Kontekstowe żądania Siri
Sugestie oparte na lokalizacji
Zapoznaj się z przykładem powyższej aplikacji wyszukiwania restauracji. Jeśli zaimplementowano NSUserActivity
i poprawnie wypełniono wszystkie metadane i atrybuty, użytkownik będzie mógł wykonać następujące czynności:
- Znajdź restaurację w aplikacji, na której chcieliby spotkać się z przyjacielem.
- Jeśli użytkownik przełączy się do aplikacji Mapy, adres restauracji zostanie automatycznie sugerowany jako miejsce docelowe.
- Działa to nawet w przypadku aplikacji innych firm (obsługujących
NSUserActivity
usługę ), dzięki czemu użytkownik może przełączyć się na aplikację do udostępniania przejazdów, a adres restauracji jest automatycznie sugerowany jako miejsce docelowe. - Zapewnia również kontekst Siri, dzięki czemu użytkownik może wywołać Siri w aplikacji restauracji i zapytać "Get directions..." (Pobierz wskazówki), a Siri będzie dostarczać wskazówki dla restauracji wyświetlanej przez użytkownika.
Wszystkie powyższe funkcje mają jedną wspólną cechę, wszystkie wskazują, skąd pochodzi sugestia. W przypadku powyższego przykładu jest to fikcyjna aplikacja do przeglądu restauracji.
System watchOS 3 został rozszerzony w celu umożliwienia tej funkcji dla aplikacji za pomocą kilku drobnych modyfikacji i dodatków do istniejących struktur:
NSUserActivity
Zawiera dodatkowe pola do przechwytywania informacji o lokalizacji, które są wyświetlane w aplikacji.- Wprowadzono kilka dodatków do bibliotek MapKit i CoreSpotlight w celu przechwycenia lokalizacji.
- Funkcje obsługujące lokalizację zostały dodane do Siri, Mapy, wielozadaniowości i innych aplikacji w systemie.
Aby zaimplementować sugestie oparte na lokalizacji, zacznij od tego samego kodu działania przedstawionego powyżej:
// Create App Activity
var activity = new NSUserActivity ("com.xamarin.platform");
// Define details
var info = new NSMutableDictionary ();
info.Add(new NSString("link"),new NSString("http://xamarin.com/platform"));
// Populate Activity
activity.Title = "The Xamarin Platform";
activity.UserInfo = info;
// Enable capabilities
activity.EligibleForSearch = true;
activity.EligibleForHandoff = true;
activity.EligibleForPublicIndexing = true;
// Provide context
var attributes = new CSSearchableItemAttributeSet ("com.xamarin.location");
attributes.ThumbnailUrl = myThumbnailURL;
attributes.Keywords = new string [] { "software", "mobile", "language" };
activity.ContentAttributeSet = attributes;
// Restore on the web
activity.WebPageUrl = new NSUrl("http://xamarin.com/platform");
// Inform system of Activity
activity.BecomeCurrent();
Jeśli aplikacja korzysta z zestawu MapKit, wystarczy dodać bieżącą mapę MKMapItem
do działania:
// Save MKMapItem location
activity.MapItem = myMapItem;
Jeśli aplikacja nie korzysta z zestawu MapKit, może przyjąć wyszukiwanie aplikacji i określić następujące nowe atrybuty lokalizacji:
// Provide context
var attributes = new CSSearchableItemAttributeSet ("com.xamarin.location");
...
attributes.NamedLocation = "Apple Inc.";
attributes.SubThoroughfare = "1";
attributes.Thoroughfare = "Infinite Loop";
attributes.City = "Cupertino";
attributes.StateOrProvince = "CA";
attributes.Country = "United States";
attributes.Latitude = 37.33072;
attributes.Longitude = 122.029674;
attributes.PhoneNumbers = new string[]{"(800) 275-2273"};
attributes.SupportsPhoneCalls = true;
attributes.SupportsNavigation = true;
Przyjrzyj się szczegółowo powyższej kodzie. Najpierw nazwa lokalizacji jest wymagana w każdym wystąpieniu:
attributes.NamedLocation = "Apple Inc.";
Następnie opis na podstawie tekstu wymagany dla wystąpień opartych na tekście (takich jak klawiatura QuickType):
attributes.SubThoroughfare = "1";
attributes.Thoroughfare = "Infinite Loop";
attributes.City = "Cupertino";
attributes.StateOrProvince = "CA";
attributes.Country = "United States";
Szerokość geograficzna i długość geograficzna są opcjonalne, ale upewnij się, że użytkownik jest kierowany do dokładnej lokalizacji, do której aplikacja chce je wysłać:
attributes.Latitude = 37.33072;
attributes.Longitude = 122.029674;
Ustawiając numery telefonów, aplikacja może uzyskać dostęp do Siri, aby użytkownik mógł wywołać Siri z aplikacji, mówiąc coś takiego: *"Wywołaj to miejsce":
attributes.PhoneNumbers = new string[]{"(800) 275-2273"};
Na koniec aplikacja może wskazać, czy wystąpienie jest odpowiednie do nawigacji i połączeń telefonicznych:
attributes.SupportsPhoneCalls = true;
attributes.SupportsNavigation = true;
Najlepsze rozwiązania dotyczące działań
Firma Apple sugeruje następujące najlepsze rozwiązania dotyczące pracy z działaniami:
- Służy
NeedsSave
do aktualizacji ładunku z opóźnieniem. - Upewnij się, że zachowaj silne odwołanie do bieżącego działania.
- Przesyłaj tylko małe ładunki, które zawierają tylko wystarczającą ilość informacji, aby przywrócić stan.
- Upewnij się, że identyfikatory typów działań są unikatowe i opisowe przy użyciu notacji odwrotnej DNS w celu ich określenia.
Sugestie dotyczące korzystania z lokalizacji
W następnej sekcji omówiono korzystanie z sugestii lokalizacji, które pochodzą z innych części systemu (takich jak aplikacja Mapy) lub innych aplikacji innych firm.
Sugestie dotyczące routingu aplikacji i lokalizacji
W tej sekcji przyjrzymy się używaniu sugestii dotyczących lokalizacji bezpośrednio z poziomu aplikacji routingu. Aby aplikacja routingu dodała tę funkcję, deweloper będzie korzystać z istniejącej MKDirectionsRequest
platformy w następujący sposób:
- Aby podwyższyć poziom aplikacji w wielozadaniowości.
- Aby zarejestrować aplikację jako aplikację routingu.
- Aby obsłużyć uruchamianie aplikacji za pomocą obiektu MapKit
MKDirectionsRequest
. - Nadaj usłudze watchOS możliwość sugerowania aplikacji na podstawie zaangażowania użytkowników.
Po uruchomieniu aplikacji z obiektem MapKit MKDirectionsRequest
powinno nastąpić automatyczne przekazanie wskazówek użytkownikowi do żądanej lokalizacji lub przedstawienie interfejsu użytkownika, który ułatwia użytkownikowi rozpoczęcie uzyskiwania wskazówek. Na przykład:
using System;
using Foundation;
using UIKit;
using MapKit;
using CoreLocation;
namespace MonkeyChat
{
[Register ("AppDelegate")]
public class AppDelegate : UIApplicationDelegate, IUISplitViewControllerDelegate
{
...
public override bool OpenUrl (UIApplication app, NSUrl url, NSDictionary options)
{
if (MKDirectionsRequest.IsDirectionsRequestUrl (url)) {
var request = new MKDirectionsRequest (url);
var coordinate = request.Destination?.Placemark.Location?.Coordinate;
var address = request.Destination.Placemark.AddressDictionary;
if (coordinate.IsValid()) {
var geocoder = new CLGeocoder ();
geocoder.GeocodeAddress (address, (place, err) => {
// Handle the display of the address
});
}
}
return true;
}
}
}
Przyjrzyj się szczegółowo temu kodowi. Sprawdza, czy jest to prawidłowe żądanie docelowe:
if (MKDirectionsRequest.IsDirectionsRequestUrl(url)) {
Jeśli tak jest, tworzy element MKDirectionsRequest
na podstawie adresu URL:
var request = new MKDirectionsRequest(url);
W systemie watchOS 3 można wysłać adres, który nie ma współrzędnych geograficznych, co powoduje, że deweloper musi zakodować adres:
var geocoder = new CLGeocoder();
geocoder.GeocodeAddress(address, (place, err)=> {
// Handle the display of the address
});
Podsumowanie
W tym artykule opisano proaktywne sugestie i pokazano, jak deweloper może używać ich do kierowania ruchu do aplikacji platformy Xamarin.iOS dla systemu watchOS. Ten krok obejmował wdrożenie proaktywnych sugestii i przedstawionych wytycznych dotyczących użycia.