Wprowadzenie do proaktywnych sugestii na platformie Xamarin.iOS

W tym artykule pokazano, jak używać proaktywnych sugestii w aplikacji Xamarin.iOS, aby zwiększyć zaangażowanie, umożliwiając systemowi aktywne prezentowanie przydatnych informacji automatycznie użytkownikowi.

Nowość w systemie iOS 10, proaktywne sugestie przedstawiają sposoby na kontakt użytkowników z aplikacją platformy Xamarin.iOS dzięki proaktywnym prezentowaniu przydatnych informacji automatycznie użytkownikowi w odpowiednim czasie.

System iOS 10 przedstawia nowe sposoby angażowania się w aplikację, umożliwiając systemowi proaktywne prezentowanie przydatnych informacji automatycznie użytkownikowi w odpowiednim czasie. Podobnie jak system iOS 9 zapewniał możliwość dodawania głębokiego wyszukiwania do aplikacji przy użyciu funkcji Spotlight, przekazywania i sugestii Siri (zobacz nowe interfejsy API wyszukiwania) w systemie iOS 10 aplikacja może uwidocznić funkcje, które mogą być prezentowane użytkownikowi przez system z poziomu następujących lokalizacji:

  • Przełącznik aplikacji
  • Ekran blokady
  • Carplay
  • Maps
  • Interakcje Siri
  • Sugestie quicktype

Aplikacja udostępnia tę funkcję systemowi przy użyciu kolekcji technologii, takich jak NSUserActivity, znaczniki internetowe, Core Spotlight, 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

Nowa klasa dla systemu iOS 10 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.

Sugestie oparte na znacznikach internetowych

System iOS 9 dodał możliwość uwzględnienia znaczników danych strukturalnych w witrynie internetowej, która wzbogaca zawartość widoczną dla użytkowników w wynikach wyszukiwania Spotlight i Safari (zobacz Wyszukiwanie za pomocą znaczników internetowych). System iOS 10 dodaje możliwość dołączania znaczników opartych na lokalizacji (takich jak PostalAddress zgodnie z definicją Schema.org) w celu dalszego ulepszania środowiska użytkownika. Jeśli na przykład użytkownicy wyświetlają lokalizację oznaczoną na stronie internetowej, system może sugerować tę samą lokalizację po otwarciu Mapy.

Sugestie oparte na tekście

Zestaw UIKit został rozszerzony w systemie iOS 10, aby uwzględnić właściwość TextContentType klasy UITextInputTraits w celu określenia semantycznego znaczenia zawartości w obszarze tekstowym. Dzięki tym informacjom system zazwyczaj może automatycznie wybierać odpowiedni typ klawiatury, ulepszać sugestie autokorekty i aktywnie integrować informacje z innych aplikacji i witryn internetowych.

Jeśli na przykład użytkownik wprowadza tekst do pola tekstowego oznaczonego , UITextContentType.FullStreetAddresssystem może sugerować automatyczne wypełnianie pola lokalizacją, w ramach którego ostatnio wyświetlał się użytkownik.

Sugestie oparte na mediach

Jeśli aplikacja odtwarza multimedia przy użyciu interfejsu API MPPlayableContentManager , system iOS 10 umożliwia użytkownikom wyświetlanie grafiki albumu i odtwarzanie multimediów za pośrednictwem aplikacji na ekranie blokady.

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.

Sugestie oparte na kontaktach

Umożliwia kontaktom aplikacji (i powiązanym informacjom kontaktowym) wyświetlanie w aplikacji Kontakt na urządzeniu z systemem iOS wraz ze wszystkimi kontaktami użytkowników przechowywanymi w systemie.

Sugestie oparte na udostępnianiu przejazdów

Jeśli aplikacja do udostępniania przejazdów używa interfejsu API MKDirectionsRequest , system iOS 10 przedstawi go jako opcję w przełączniku aplikacji w czasie, gdy użytkownik prawdopodobnie będzie chciał jeździć. Aplikacja musi być również zarejestrowana jako aplikacja do udostępniania przejazdów MKDirectionsModeRideShare, określając klucz MKDirectionsApplicationSupportedModes w pliku Info.plist .

Jeśli aplikacja obsługuje tylko udostępnianie przejazdów, sugestia systemowa rozpocznie się od "Pobierz przejazd do...", jeśli są obsługiwane inne typy kierunku routingu (takie jak Spacer lub Rower), system użyje polecenia "Pobierz wskazówki do..."

Ważne

Obiekt MKMapItem, który otrzymuje aplikacja, może nie zawierać informacji o długości geograficznej i szerokości geograficznej i będzie wymagał geokodowania.

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 a Schema.org - NSUserActivity pomaga systemowi zrozumieć, jakie informacje aktualnie pracuje użytkownik na ekranie. Schema.org dodaje podobne możliwości do stron internetowych.
  • 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.
  • Sugestie dotyczące aplikacji multimediów — system może podwyższyć poziom aplikacji i jej zawartości multimedialnej na podstawie kontekstu interakcji użytkownika z urządzeniem z systemem iOS.

Funkcja ta jest obsługiwana w aplikacji, implementując następujące elementy:

  • - NSUserActivity Przekazywanie zostało dodane w systemie iOS 8 w celu obsługi przekazywania, które umożliwia deweloperowi rozpoczęcie działania na jednym urządzeniu, a następnie kontynuowanie go na innym (zobacz Wprowadzenie do przekazywania).
  • Funkcja Wyszukiwania w centrum uwagi — system iOS 9 dodał możliwość promowania zawartości aplikacji z poziomu wyników wyszukiwania W centrum uwagi przy użyciu funkcji NSUserActivity (zobacz Wyszukiwanie w centrum uwagi Core).
  • 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.
  • Interakcje kontaktowe — nowość w systemie iOS 10 umożliwia NSUserActivity podwyższenie poziomu aplikacji komunikacyjnych z karty kontaktowej (w aplikacji Kontakty) jako alternatywnej metody komunikacji.

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 patrząc na aplikację restauracji:

The NSUserActivity light-weight state caching mechanism

W przypadku następujących interakcji:

  1. Gdy użytkownik współpracuje z aplikacją, NSUserActivity zostanie utworzony w celu ponownego utworzenia stanu aplikacji później.
  2. Jeśli użytkownik wyszukuje restaurację, następuje ten sam wzorzec tworzenia działań.
  3. 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:

The NSUserActivity details

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;
}

Deweloper musi upewnić 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:

  1. Znajdź restaurację w aplikacji, na której chcieliby spotkać się z przyjacielem.
  2. Gdy użytkownik odchodzi od aplikacji przy użyciu przełącznika aplikacji wielozadaniowych, system automatycznie wyświetli sugestię (w dolnej części ekranu), aby uzyskać wskazówki do restauracji przy użyciu ulubionej aplikacji nawigacji.
  3. Jeśli użytkownik przełączy się do aplikacji Wiadomości i zacznie wpisywać " Spotkajmy się pod adresem", klawiatura QuickType automatycznie sugeruje wklejanie w adresie restauracji.
  4. Jeśli użytkownik przełączy się do aplikacji Mapy, adres restauracji zostanie automatycznie sugerowany jako miejsce docelowe.
  5. Działa to nawet w przypadku aplikacji innych firm (obsługujących NSUserActivityusł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.
  6. 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 iOS 10 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 rozpoznawania lokalizacji zostały dodane do Siri, Mapy, klawiatur, 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 lokalizacji na podstawie tekstu jest 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ć, dlatego powinna zostać uwzględniona:

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: "Zadzwoń w 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;

Implementowanie interakcji z kontaktami

Nowe w systemie iOS 10 aplikacje komunikacyjne są głęboko zintegrowane z aplikacją Kontakty z karty kontaktowej. W przypadku aplikacji, które zaimplementowały interakcje kontaktowe, użytkownik może dodać informacje o danej aplikacji do określonych osób w kontaktach. Jeśli na przykład trafią przycisk szybkiej akcji w górnej części karty w celu wysłania wiadomości, dołączona aplikacja zostanie wyświetlona jako opcja wysłania wiadomości.

Jeśli wybrano aplikację innej firmy, można ją zapamiętać i przedstawić jako domyślny sposób na przesłanie danej osoby przy następnym skontaktowaniu się z nim.

Interakcje kontaktowe są implementowane w aplikacji przy użyciu i NSUserActivity nowej strukturze Intents wprowadzonej w systemie iOS 10. Aby uzyskać więcej informacji na temat pracy z intencjami, zapoznaj się z naszymi przewodnikami Understanding SiriKit Concepts and Implement SiriKit (Omówienie pojęć sirikitu i implementowania zestawów SiriKit ).

Donating Interactions

Zobacz, jak aplikacja może przekazać interakcje:

Donating Interactions overview

Aplikacja tworzy obiekt zawierający intencję INInteraction (INIntent), uczestników i metadanych. Intencja reprezentuje akcję użytkownika, taką jak wykonywanie wywołania wideo lub wysyłanie wiadomości SMS. Uczestnicy obejmują osoby odbierające komunikację. Metadane definiują dodatkowe informacje, takie jak pomyślne wysłanie komunikatu itp.

Deweloper nigdy nie tworzy bezpośrednio wystąpienia klasy INIntent lub INIntentResponse, będzie używać jednej z określonych klas podrzędnych (na podstawie zadania, które aplikacja wykonuje w imieniu użytkownika), które dziedziczą z tych klas nadrzędnych. Na przykład INSendMessageIntent i INSendMessageIntentResponse do wysyłania wiadomości SMS.

Po pełnym wypełnieniu interakcji wywołaj metodę DonateInteraction , aby poinformować system, że interakcja jest dostępna do użycia.

Gdy użytkownik wchodzi w interakcję z aplikacją z karty Kontakt, interakcja zostanie dołączona NSUserActivitydo elementu , który jest następnie używany do uruchamiania aplikacji:

The interaction gets bundled with a NSUserActivity that is used to launch the app

Zapoznaj się z poniższym przykładem intencji wyślij wiadomość:

using System;
using Foundation;
using UIKit;
using Intents;

namespace MonkeyNotification
{
  public class DonateInteraction
  {
    #region Constructors
    public DonateInteraction ()
    {
    }
    #endregion

    #region Public Methods
    public void SendMessageIntent (string text, INPerson from, INPerson[] to)
    {

      // Create App Activity
      var activity = new NSUserActivity ("com.xamarin.message");

      // Define details
      var info = new NSMutableDictionary ();
      info.Add (new NSString ("message"), new NSString (text));

      // Populate Activity
      activity.Title = "Sent MonkeyChat Message";
      activity.UserInfo = info;

      // Enable capabilities
      activity.EligibleForSearch = true;
      activity.EligibleForHandoff = true;
      activity.EligibleForPublicIndexing = true;

      // Inform system of Activity
      activity.BecomeCurrent ();

      // Create message Intent
      var intent = new INSendMessageIntent (to, text, "", "MonkeyChat", from);

      // Create Intent Reaction
      var response = new INSendMessageIntentResponse (INSendMessageIntentResponseCode.Success, activity);

      // Create interaction
      var interaction = new INInteraction (intent, response);

      // Donate interaction to the system
      interaction.DonateInteraction ((err) => {
        // Handle donation error
        ...
      });
    }
    #endregion
  }
}

Przyglądając się szczegółowo temu kodowi, tworzy i wypełnia wystąpienie NSUserActivity (jak pokazano w powyższej sekcji Tworzenie działania ). Następnie tworzy wystąpienie INSendMessageIntent (które dziedziczy z INIntent) i wypełnia je szczegółami wysyłanego komunikatu:

var intent = new INSendMessageIntent (to, text, "", "MonkeyChat", from);

Obiekt INSendMessageIntentResponse zostanie utworzony i przekazany NSUserActivity powyżej:

var response = new INSendMessageIntentResponse (INSendMessageIntentResponseCode.Success, activity);

Element INInteraction jest tworzony na podstawie właśnie utworzonej intencji wysyłania komunikatów (INSendMessageIntent) i odpowiedzi (INSendMessageIntentResponse):

var interaction = new INInteraction (intent, response);

Na koniec system jest powiadomieniem o interakcji:

// Donate interaction to the system
interaction.DonateInteraction ((err) => {
  // Handle donation error
  ...
});

Procedura obsługi ukończenia jest przekazywana, w której aplikacja może reagować na darowiznę pomyślnie lub kończy się niepowodzeniem.

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.

Schema.org

Jak pokazano powyżej, pomaga systemowi zrozumieć, NSUserActivity jakie informacje aktualnie pracuje użytkownik na ekranie. Schema.org dodaje podobne możliwości do stron internetowych.

Schema.org może zapewnić takie same typy interakcji opartych na lokalizacji w witrynie internetowej. Firma Apple zaprojektowała nowe sugestie dotyczące lokalizacji, które działają tak samo dobrze, gdy są wyświetlane w przeglądarce Safari, jak w aplikacji natywnej.

Niektóre Schema.org tło:

  • Zapewnia otwarty standard słownictwa znaczników internetowych.
  • Działa przez uwzględnienie metadanych strukturalnych na stronach internetowych.
  • Dostępnych jest ponad 500 schematów reprezentujących różne koncepcje.
  • Implementując ją w witrynie internetowej, deweloper może uzyskać niektóre korzyści wynikające z używania NSUserActivity w aplikacji natywnej.

Schematy są rozmieszczane w drzewie, takim jak struktura, w której określone typy, takie jak Restauracja, dziedziczą z bardziej ogólnych typów, takich jak Lokalna firma. Aby uzyskać więcej informacji, zobacz Schema.org.

Jeśli na przykład strona internetowa zawierała następujące dane:

<script type="application/ld+json">
{
  "@context":"http://schema.org",
  "@type":"Restaurant",
  "telephone":"(415) 781-1111",
  "url":"https://www.yanksing.com",
  "address":{
    "@type":"PostalAddress",
    "streetAddress":"101 Spear St",
    "addressLocality":"San Francisco",
    "postalCode":"94105",
    "addressRegion":"CA"
  },
  "aggregateRating":{
    "@type":"AggregateRating",
    "ratingValue":"3.5",
    "reviewCount":"2022"
  }
}
</script>

Jeśli użytkownik odwiedził tę stronę w przeglądarce Safari, a następnie przełączyć się do innej aplikacji, informacje o lokalizacji ze strony zostaną przechwycone i oferowane jako sugestia lokalizacji w innych częściach systemu (jak pokazano w sekcji Działania powyżej).

Przeglądarka Safari wyodrębni wszystkie elementy na stronie internetowej zgodnej z dowolną z następujących właściwości schematu:

  • PostalAddress
  • Geokoordyny
  • Właściwość telefoniczna.

Aby uzyskać więcej informacji, zobacz nasz przewodnik wyszukiwania za pomocą znaczników internetowych.

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.

Istnieją dwa główne sposoby korzystania z sugestii dotyczących lokalizacji przez aplikację:

  • Za pomocą klawiatury QuickType.
  • Bezpośrednio korzystając z informacji o lokalizacji w aplikacjach rozsyłania.

Sugestie dotyczące lokalizacji i klawiatura QuickType

Jeśli aplikacja zajmuje się adresami w formatach tekstowych, aplikacja może skorzystać z sugestii dotyczących lokalizacji za pośrednictwem interfejsu użytkownika QuickType. System iOS 10 rozszerza interfejs użytkownika QuickType o następujące funkcje:

  • Aplikacja może dodawać wskazówki dotyczące semantycznej intencji pól tekstowych w interfejsie użytkownika.
  • Aplikacja może otrzymywać proaktywne sugestie w aplikacji.
  • Aplikacja może korzystać z rozszerzonej autokorekcji.

Nowa TextContentType właściwość kontrolek pól tekstowych w systemie iOS 10 umożliwia deweloperowi zdefiniowanie intencji semantycznej dla wartości, którą użytkownik wprowadzi w danym polu. Na przykład:

var textField = new UITextField();
textField.TextContentType = UITextContentType.FullStreetAddress;

Informuje system, że aplikacja oczekuje, że użytkownik wprowadzi pełny adres ulicy w danym polu. Dzięki temu klawiatura QuickType automatycznie udostępnia sugestie dotyczące lokalizacji na klawiaturze, gdy użytkownik wprowadza wartość w tym polu.

Poniżej przedstawiono kilka typowych typów dostępnych dla deweloperów w klasie statycznej UITextContentType :

  • Name
  • GivenName
  • FamilyName
  • Location
  • FullStreetAddress
  • AddressCityAndState
  • TelephoneNumber
  • EmailAddress

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 .
  • Aby zapewnić systemowi iOS możliwość sugerowania aplikacji użytkownikowi w odpowiednim czasie 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 iOS 10 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
  
});

Sugestie dotyczące aplikacji multimediów

Jeśli aplikacja obsługuje dowolny typ multimediów, takich jak aplikacja podcastów lub zawartość multimediów przesyłanych strumieniowo, taka jak audio lub wideo, z systemem iOS 10, może korzystać z sugestii multimedialnych w systemie.

W przypadku aplikacji obsługujących multimedia system iOS obsługuje następujące zachowania:

  • System iOS promuje aplikacje, których użytkownik może używać w oparciu o poprzednie zachowanie.
  • Sugestie związane z aplikacją będą prezentowane w centrum uwagi i widoku dzisiaj.
  • Jeśli aplikacja spełnia jeden z następujących wyzwalaczy, może zostać podwyższony poziom uprawnień do sugestii ekranu blokady:
    • Po podłączeniu słuchawek lub urządzenia Bluetooth nawiązuje połączenie.
    • Po dotarciu do samochodu.
    • Po przybyciu do domu lub pracy.

Dzięki włączeniu prostego wywołania interfejsu API w systemie iOS 10 deweloper może utworzyć bardziej atrakcyjne środowisko ekranu blokady dla użytkowników aplikacji multimedialnej. Za pomocą MPPlayableContentManager klasy do zarządzania odtwarzaniem multimediów na ekranie blokady aplikacji będą wyświetlane pełne kontrolki multimediów (takie jak przedstawione przez aplikację Muzyka).

using System;
using MediaPlayer;
using UIKit;

namespace MonkeyPlayer
{
  public class PlayableContentDelegate : MPPlayableContentDelegate
  {
    #region Constructors
    public PlayableContentDelegate ()
    {
    }
    #endregion

    #region Override methods
    public override void InitiatePlaybackOfContentItem (MPPlayableContentManager contentManager, Foundation.NSIndexPath indexPath, Action<Foundation.NSError> completionHandler)
    {
      // Access the media item to play
      var item = LoadMediaItem (indexPath);

      // Populate the lock screen
      PopulateNowPlayingItem (item);

      // Prep item to be played
      var status = PreparePlayback (item);

      // Call completion handler
      completionHandler (null);
    }
    #endregion

    #region Public Methods
    public MPMediaItem LoadMediaItem (Foundation.NSIndexPath indexPath)
    {
      var item = new MPMediaItem ();

      // Load item from media store
      ...

      return item;
    }

    public void PopulateNowPlayingItem (MPMediaItem item)
    {
      // Get Info Center and album art
      var infoCenter = MPNowPlayingInfoCenter.DefaultCenter;
      var albumArt = (item.Artwork == null) ? new MPMediaItemArtwork (UIImage.FromFile ("MissingAlbumArt.png")) : item.Artwork;

      // Populate Info Center
      infoCenter.NowPlaying.Title = item.Title;
      infoCenter.NowPlaying.Artist = item.Artist;
      infoCenter.NowPlaying.AlbumTitle = item.AlbumTitle;
      infoCenter.NowPlaying.PlaybackDuration = item.PlaybackDuration;
      infoCenter.NowPlaying.Artwork = albumArt;
    }

    public bool PreparePlayback (MPMediaItem item)
    {
      // Prepare media item for playback
      ...

      // Return results
      return true;
    }
    #endregion
  }
}

Podsumowanie

W tym artykule opisano proaktywne sugestie i pokazano, jak deweloper może używać ich do kierowania ruchu do aplikacji platformy Xamarin.iOS. Ten krok obejmował wdrożenie proaktywnych sugestii i przedstawionych wytycznych dotyczących użycia.