Úvod k proaktivním návrhům v Xamarin.iOS

Tento článek ukazuje, jak pomocí proaktivních návrhů v aplikaci Xamarin.iOS podpořit zapojení tím, že systému umožníte, aby proaktivně zobrazoval uživateli užitečné informace automaticky.

Novinkou v iOSu 10 jsou proaktivní návrhy, které uživatelům umožňují zapojit se do aplikace Xamarin.iOS, a to proaktivním prezentováním užitečných informací uživatelům v odpovídajících časech.

iOS 10 představuje nové způsoby řízení zapojení do aplikace tím, že umožní systému aktivně prezentovat užitečné informace automaticky uživateli ve vhodných časech. Stejně jako iOS 9 poskytuje možnost přidat do aplikace hloubkové vyhledávání pomocí spotlightu, handoffu a návrhů Siri (viz nová rozhraní API pro vyhledávání) s iOSem 10 může aplikace zpřístupnit funkce, které může systém prezentovat uživateli z následujících umístění:

  • Přepínač aplikací
  • Zamykací obrazovka
  • CarPlay
  • Maps
  • Interakce Siri
  • Návrhy QuickType

Aplikace tuto funkci zveřejňuje systému pomocí kolekce technologií, jako NSUserActivityjsou webové značky, Core Spotlight, MapKit, Přehrávač médií a UIKit. Kromě toho tím, že pro aplikaci poskytnete proaktivní podporu návrhů, můžou být integrace Siri zdarma hlubší.

Návrhy založené na poloze

Novinka NSUserActivity v iOS 10, třída obsahuje MapItem vlastnost, která umožňuje vývojáři poskytnout informace o poloze, které lze použít v jiných kontextech. Pokud například aplikace zobrazuje recenze restaurace, může vývojář nastavit MapItem vlastnost na umístění restaurace, kterou uživatel v aplikaci zobrazuje. Pokud uživatel přepne do aplikace Mapy, bude umístění restaurace automaticky dostupné.

Pokud aplikace podporuje vyhledávání aplikací, může pomocí nových komponent CSSearchableItemAttributesSet adres třídy určit umístění, která může uživatel chtít navštívit. MapItem Nastavením vlastnosti se ostatní vlastnosti vyplní automaticky.

Kromě nastavení Latitude vlastností komponenty adresy Longitude se doporučuje, aby aplikace také doručovat NamedLocation vlastnosti a PhoneNumbers vlastnosti, aby Siri mohl zahájit volání do umístění.

Návrhy založené na webových značkách

iOS 9 byl přidán k možnosti zahrnout strukturované datové značky na webu, který rozšiřuje obsah, který uživatelé vidí ve výsledcích vyhledávání Spotlight a Safari (viz hledání pomocí webové značky). iOS 10 přidává možnost zahrnout značky založené na poloze (například PostalAddress definované Schema.org) pro další vylepšení uživatelského prostředí. Pokud například uživatel zobrazí stránku označenou na webu, systém může při otevření Mapy navrhnout stejné umístění.

Návrhy na základě textu

UiKit byl v iOS 10 rozšířen tak, aby zahrnoval TextContentType vlastnost UITextInputTraits třídy určit sémantický význam obsahu v textové oblasti. Při použití těchto informací může systém obvykle automaticky vybrat příslušný typ klávesnice, vylepšit návrhy automatických oprav a proaktivně integrovat informace z jiných aplikací a webů.

Pokud například uživatel zadává text do textového pole označeného UITextContentType.FullStreetAddress, systém může navrhnout automatické vyplňování pole umístěním, které uživatel nedávno zobrazil.

Návrhy na základě médií

Pokud aplikace přehrává média pomocí rozhraní API MPPlayableContentManager , umožňuje iOS 10 uživatelům zobrazit obrázek alba a přehrávat multimédia prostřednictvím aplikace na zamykací obrazovce.

Kontextová připomenutí Siri

Umožňuje uživateli používat Siri k rychlému připomenutí k zobrazení obsahu, který si právě prohlíží v aplikaci, a to později. Pokud si například prohlíželi recenzi restaurace v aplikaci, mohli by vyvolat Siri a říct "Připomeňte mi o tom, až se vrátím domů". Siri vygeneruje připomenutí odkazem na recenzi v aplikaci.

Návrhy založené na kontaktech

Umožňuje, aby se kontakty aplikace (a související informace o kontaktech) zobrazovaly v aplikaci Kontakt na zařízení s iOSem spolu se všemi kontakty uživatelů uloženými v systému.

Návrhy na základě sdílení jízdy

Pokud aplikace pro sdílení jízdy používá rozhraní API MKDirectionsRequest , iOS 10 ji zobrazí jako možnost v přepínači aplikací v době, kdy bude uživatel pravděpodobně chtít jezdit. Aplikace musí být také zaregistrovaná jako aplikace pro sdílení jízdy zadáním MKDirectionsModeRideShareklíče MKDirectionsApplicationSupportedModes v souboru Info.plist .

Pokud aplikace podporuje pouze sdílení jízdy, návrh systému by začal na "Získat jízdu do...", pokud jsou podporovány jiné typy směrů směrování (například Chůze nebo Kolo), systém použije příkaz "Získat navigační pokyny..."

Důležité

MkMapItem objekt, který aplikace obdrží, nemusí obsahovat informace o délce a zeměpisné šířce a bude vyžadovat geokódování.

Implementace proaktivních návrhů

Přidání podpory proaktivního návrhu do aplikace Xamarin.iOS je obvykle stejně snadné jako implementace několika rozhraní API nebo rozšíření několika rozhraní API, která už může aplikace implementovat.

Proaktivní návrhy pracují s aplikacemi třemi hlavními způsoby:

  • NSUserActivity a Schema.org - NSUserActivity pomáhají systému pochopit, s jakými informacemi uživatel aktuálně pracuje na obrazovce. Schema.org přidává podobné schopnosti na webové stránky.
  • Návrhy umístění – Pokud aplikace nabízí nebo využívá informace založené na poloze, nabízí toto rozšíření rozhraní API nové způsoby sdílení těchto informací napříč aplikacemi.
  • Návrhy aplikací médií – Systém může zvýšit úroveň aplikace a jejího mediálního obsahu na základě kontextu interakce uživatele se zařízením s iOSem.

A v aplikaci se podporuje implementací následujících:

  • Předání bylo přidáno v iOSu 8 pro podporu Handoffu, které umožňuje vývojáři zahájit aktivitu na jednom zařízení a pak pokračovat na jiném (viz Úvod do handoffu). - NSUserActivity
  • Vyhledávání spotlightů – iOS 9 přidal možnost propagovat obsah aplikace z výsledků hledání spotlightu pomocí NSUserActivity (viz Hledání pomocí Core Spotlightu).
  • Kontextová připomenutí Siri – V iOSu 10 byla rozšířena, aby Siri mohla rychle vytvořit připomenutí k zobrazení obsahu, NSUserActivity který si uživatel právě prohlíží v aplikaci později.
  • Návrhy umístění – iOS 10 vylepšuje NSUserActivity zachycení umístění zobrazených uvnitř aplikace a jejich propagaci na mnoha místech v celém systému.
  • Kontextové žádosti - NSUserActivity o Siri poskytují kontext informacím v aplikaci siri, aby uživatel mohl získat navigační pokyny nebo zavolat Siri z aplikace.
  • Interakce kontaktů – Novinka v iOSu 10 NSUserActivity umožňuje propagaci komunikačních aplikací z karty kontaktu (v aplikaci Kontakty) jako alternativní způsob komunikace.

Všechny tyto funkce mají jednu věc společné, všechny používají NSUserActivity v jedné nebo jiné formě k poskytování svých funkcí.

NSUserActivity

Jak je uvedeno výše, pomáhá systému pochopit, NSUserActivity s jakými informacemi uživatel aktuálně pracuje na obrazovce. NSUserActivity je lehký mechanismus ukládání stavu do mezipaměti, který zachycuje aktivitu uživatele při procházení aplikace. Například při pohledu na aplikaci restaurace:

The NSUserActivity light-weight state caching mechanism

Při následujících interakcích:

  1. Když uživatel pracuje s aplikací, NSUserActivity vytvoří se k opětovnému vytvoření stavu aplikace později.
  2. Pokud uživatel hledá restauraci, následuje stejný vzor vytváření aktivit.
  3. A znovu, když uživatel zobrazí výsledek. V tomto posledním případě si uživatel prohlíží umístění a v iOSu 10 si systém více uvědomuje určité koncepty (například umístění nebo interakce komunikace).

Podívejte se podrobněji na poslední obrazovku:

The NSUserActivity details

Tady aplikace vytváří a NSUserActivity je naplněná informacemi, které později vytvoří znovu. Aplikace také obsahovala určitá metadata, jako je název a adresa umístění. Při vytvoření této aktivity aplikace informuje iOS, že představuje aktuální stav uživatele.

Aplikace se pak rozhodne, jestli se aktivita bude inzerovat za účelem předání, uloží se jako dočasná hodnota pro návrhy polohy nebo se přidá do indexu Spotlight na zařízení pro zobrazení ve výsledcích hledání.

Další informace o hledání Handoff a Spotlight najdete v našich příručkách Úvod k handoff a iOS 9 New Search API.

Vytvoření aktivity

Před vytvořením aktivity bude potřeba vytvořit identifikátor typu aktivity, aby ho identifikoval. Identifikátor typu aktivity je krátký řetězec přidaný do NSUserActivityTypes pole souboru aplikace Info.plist sloužícího k jedinečné identifikaci daného typu aktivity uživatele. V poli bude jedna položka pro každou aktivitu, kterou aplikace podporuje a zveřejňuje pro vyhledávání aplikací. Další podrobnosti najdete v referenčních informacích k vytváření identifikátorů typů aktivit.

Podívejte se na příklad aktivity:

// 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();

Vytvoří se nová aktivita pomocí identifikátoru typu aktivity. Dále se vytvoří některá metadata definující aktivitu, aby se tento stav mohl obnovit později. Potom se aktivita zobrazí smysluplně a připojí se k informacím o uživateli. Nakonec jsou povolené některé funkce a aktivita se odešle do systému.

Výše uvedený kód by mohl být dále rozšířen tak, aby zahrnoval metadata, která poskytují kontext aktivity provedením následujících změn:

...

// 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();

Pokud má vývojář web, který dokáže zobrazit stejné informace jako aplikace, může aplikace obsahovat adresu URL a obsah se dá zobrazit na jiných zařízeních, která nemají nainstalovanou aplikaci (prostřednictvím předání):

// Restore on the web
activity.WebPageUrl = new NSUrl("http://xamarin.com/platform");

Obnovení aktivity

Pokud chcete odpovědět uživateli, který klepne na výsledek hledání (NSUserActivity) aplikace, upravte soubor AppDelegate.cs a přepište metodu ContinueUserActivity . Příklad:

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

Vývojář bude muset zajistit, že se jedná o stejný identifikátor typu aktivity (com.xamarin.platform) jako aktivita vytvořená výše. Aplikace používá informace uložené v úložišti NSUserActivity k obnovení stavu zpět do místa, kde uživatel přestal.

Výhody vytvoření aktivity

S minimálním množstvím výše uvedeného kódu teď aplikace dokáže využívat tři nové funkce iOS 10:

  • Handoff
  • Vyhledávání spotlightů
  • Kontextová připomenutí Siri

V následující části se podíváme na povolení dvou dalších nových funkcí iOS 10:

  • Návrhy polohy
  • Kontextové požadavky Siri

Návrhy založené na poloze

Podívejte se na příklad výše uvedené aplikace pro vyhledávání restaurací. Pokud se implementovala NSUserActivity a správně naplnila všechna metadata a atributy, uživatel by mohl provést následující akce:

  1. V aplikaci najděte restauraci, ve které by se chtěli setkat s přítelem.
  2. Když se uživatel přestěhuje od aplikace pomocí přepínače aplikací pro multitasking, systém automaticky zobrazí návrh (v dolní části obrazovky), aby získal navigační pokyny do restaurace pomocí své oblíbené navigační aplikace.
  3. Pokud uživatel přepne do aplikace Zprávy a začne psát "Let's meet at", klávesnice QuickType automaticky navrhne vložení do adresy restaurace.
  4. Pokud uživatel přepne do aplikace Mapy, adresa restaurace se automaticky navrhne jako cíl.
  5. To funguje i pro aplikace třetích stran (které podporují NSUserActivity), aby uživatel mohl přejít na aplikaci pro sdílení jízdy a adresa restaurace se automaticky navrhne jako cíl i tam.
  6. Poskytuje také kontext pro Siri, takže uživatel může vyvolat Siri v aplikaci restaurace a požádat " Získat navigační pokyny..." a Siri poskytne pokyny k restauraci, která si uživatel prohlíží.

Všechny výše uvedené funkce mají jednu věc společné, všechny označují, odkud návrh původně pochází. V případě výše uvedeného příkladu se jedná o fiktivní aplikaci pro kontrolu restaurace.

IOS 10 je vylepšený tak, aby umožňoval tuto funkci pro aplikaci prostřednictvím několika malých úprav a doplňků stávajících architektur:

  • NSUserActivity obsahuje další pole pro zachytávání informací o poloze, které jsou zobrazeny uvnitř aplikace.
  • V MapKitu a CoreSpotlightu bylo provedeno několik doplňků pro zachycení umístění.
  • Funkce pro sledování polohy byla přidána do Siri, Mapy, klávesnice, multitaskingu a dalších aplikací v systému.

Pokud chcete implementovat návrhy založené na poloze, začněte stejným kódem aktivity uvedeným výše:

// 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();

Pokud aplikace používá MapKit, stačí k aktivitě přidat aktuální mapu MKMapItem :

// Save MKMapItem location
activity.MapItem = myMapItem;

Pokud aplikace nepoužívá MapKit, může přijmout Vyhledávání aplikací a zadat následující nové atributy pro umístění:

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

Podrobně se podívejte na výše uvedený kód. Nejprve se v každé instanci vyžaduje název umístění:

attributes.NamedLocation = "Apple Inc.";

Potom se pro instance založené na textu (například klávesnice QuickType) vyžaduje textový popis umístění:

attributes.SubThoroughfare = "1";
attributes.Thoroughfare = "Infinite Loop";
attributes.City = "Cupertino";
attributes.StateOrProvince = "CA";
attributes.Country = "United States";

Zeměpisná šířka a zeměpisná délka jsou volitelné, ale ujistěte se, že je uživatel směrován na přesné místo, kam je chce aplikace odeslat, takže by měla být zahrnutá:

attributes.Latitude = 37.33072;
attributes.Longitude = 122.029674;

Nastavením telefonních čísel může aplikace získat přístup k Siri, aby uživatel mohl vyvolat Siri z aplikace tak, že řekne něco jako " Zavolat na toto místo":

attributes.PhoneNumbers = new string[]{"(800) 275-2273"};

Aplikace může nakonec označit, jestli je instance vhodná pro navigaci a telefonní hovory:

attributes.SupportsPhoneCalls = true;
attributes.SupportsNavigation = true;

Implementace interakcí kontaktů

V iOSu 10 jsou komunikační aplikace hluboce integrované do aplikace Kontakty z karty kontaktu. U aplikací, které implementovaly interakce kontaktů, může uživatel přidat informace dané aplikace konkrétním lidem v kontaktech. A pokud například v horní části karty narazí na tlačítko rychlé akce, které odešle zprávu, zobrazí se připojená aplikace jako možnost odeslání zprávy.

Pokud je vybraná aplikace třetí strany, můžete ji zapamatovat a zobrazit jako výchozí způsob, jak dané osobě poslat zprávu při příštím kontaktování uživatele.

Interakce kontaktů se implementují v aplikaci pomocí NSUserActivity nové architektury Intents zavedené v iOSu 10. Další podrobnosti o práci se záměry najdete v našich průvodcích Principy SiriKitu a implementací SiriKitu .

Darování interakcí

Podívejte se, jak může aplikace darovat interakce:

Donating Interactions overview

Aplikace vytvoří INInteraction objekt, který obsahuje záměr (INIntent), účastníky a metadata. Záměr představuje akci uživatele, například videohovor nebo odeslání textové zprávy. Účastníci zahrnují osoby, které komunikaci přijímají. Metadata definují informace o přidání, například úspěšné odeslání zprávy atd.

Vývojář nikdy přímo nevytváří instanci INIntent nebo INIntentResponse, použije jednu z konkrétních podřízených tříd (na základě úlohy, kterou aplikace provádí jménem uživatele), které dědí z těchto nadřazených tříd. Například INSendMessageIntent pro INSendMessageIntentResponse odeslání textové zprávy.

Jakmile je interakce plně naplněna, zavolejte metodu DonateInteraction , která informuje systém, že interakce je k dispozici pro použití.

Když uživatel komunikuje s aplikací z karty Kontakt, interakce se spojí s aplikací NSUserActivity, která se pak použije ke spuštění aplikace:

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

Podívejte se na následující příklad záměru odeslat zprávu:

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

Když se na tento kód podíváte podrobněji, vytvoří a naplní instanci NSUserActivity (jak je znázorněno v části Vytvoření aktivity výše). Dále vytvoří instanci INSendMessageIntent (která zdědí) INIntenta naplní ji podrobnostmi o odesílané zprávě:

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

Vytvoří se INSendMessageIntentResponse a předá se NSUserActivity výše vytvořená:

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

An INInteraction is built from the Send Message Intent () and Response (INSendMessageIntentResponseINSendMessageIntent) just created:

var interaction = new INInteraction (intent, response);

Nakonec systém oznámí interakci:

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

Obslužná rutina dokončení se předává tam, kde může aplikace reagovat na úspěšný nebo neúspěšný dar.

Osvědčené postupy pro aktivity

Apple navrhuje následující osvědčené postupy při práci s aktivitami:

  • Používá se NeedsSave pro opožděné aktualizace datové části.
  • Ujistěte se, že chcete zachovat silný odkaz na aktuální aktivitu.
  • Přeneste jen malé datové části, které obsahují jenom dostatek informací pro obnovení stavu.
  • Ujistěte se, že identifikátory typu aktivity jsou jedinečné a popisné pomocí zpětného zápisu DNS k jejich určení.

Schema.org

Jak je znázorněno výše, NSUserActivity pomáhá systému pochopit, s jakými informacemi uživatel aktuálně pracuje na obrazovce. Schema.org přidává podobné schopnosti na webové stránky.

Schema.org může poskytovat stejné typy interakcí založených na poloze na webu. Společnost Apple navrhla nové návrhy polohy tak, aby fungovaly i při prohlížení v Safari, stejně jako v nativní aplikaci.

Některé Schema.org pozadí:

  • Poskytuje otevřený standard slovníku webových značek.
  • Funguje tak, že na webových stránkách zahrne strukturovaná metadata.
  • K dispozici je více než 500 schémat představujících různé koncepty.
  • Implementací na webu může vývojář získat některé výhody použití NSUserActivity v nativní aplikaci.

Schémata jsou uspořádána ve stromové struktuře, kde konkrétní typy, jako je Restaurace, dědí z obecnějších typů, jako je místní firma. Další informace najdete v tématu Schema.org.

Pokud například webová stránka obsahovala následující data:

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

Pokud uživatel navštívil tuto stránku v Safari a pak přepnul na jinou aplikaci, informace o poloze ze stránky by se zachytily a nabídly jako návrh polohy v jiných částech systému (jak je vidět v aktivitách výše).

Safari extrahuje cokoli na webové stránce, která dodržuje některou z následujících vlastností schématu:

  • PostalAddress
  • GeoCoordinates
  • Telefonní vlastnost.

Další informace najdete v našem průvodci vyhledáváním pomocí webových značek .

Využívání návrhů polohy

Tato další část se zabývá používáním návrhů na polohu, které pocházejí z jiných částí systému (například aplikace Mapy) nebo jiných aplikací třetích stran.

Aplikace může využívat návrhy polohy dvěma hlavními způsoby:

  • Pomocí klávesnice QuickType.
  • Přímo použitím informací o poloze ve směrovacích aplikacích.

Návrhy umístění a klávesnice QuickType

Pokud se aplikace zabývá adresami v textových formátech, může aplikace využívat návrhy umístění prostřednictvím uživatelského rozhraní QuickType. iOS 10 rozšiřuje uživatelské rozhraní QuickType s následujícími funkcemi:

  • Aplikace může přidat rady týkající se sémantického záměru textových polí v uživatelském rozhraní.
  • Aplikace může v aplikaci získat proaktivní návrhy.
  • Aplikace může využívat rozšířené automatické opravy.

Nová TextContentType vlastnost ovládacích prvků textového pole v iOSu 10 umožňuje vývojáři definovat sémantický záměr pro hodnotu, kterou uživatel zadá do daného pole. Příklad:

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

Systém oznámí, že aplikace očekává, že uživatel do daného pole zadá úplnou adresu ulice. To umožní klávesnici QuickType automaticky poskytovat návrhy polohy na klávesnici, když uživatel zadává hodnotu do tohoto pole.

Následuje několik nejběžnějších typů dostupných vývojářům ve UITextContentType statické třídě:

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

Návrhy aplikací a umístění směrování

V této části se podíváme na využívání návrhů polohy přímo ze směrovací aplikace. Aby aplikace směrování přidala tuto funkci, bude vývojář využívat stávající MKDirectionsRequest architekturu následujícím způsobem:

  • Zvýšení úrovně aplikace v multitaskingu
  • Pokud chcete aplikaci zaregistrovat jako směrovací aplikaci.
  • Zpracování spuštění aplikace pomocí objektu MapKit MKDirectionsRequest .
  • Pokud chcete, aby se iOS naučil navrhovat aplikaci uživateli v odpovídajících časech na základě zapojení uživatelů.

Když je aplikace spuštěna s objektem MapKit MKDirectionsRequest , měla by se automaticky začít směrovat uživatele na požadované místo nebo prezentovat uživatelské rozhraní, které uživateli usnadní zahájení získávání pokynů. Příklad:

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

Podrobně se podívejte na tento kód. Testuje, jestli se jedná o platný cílový požadavek:

if (MKDirectionsRequest.IsDirectionsRequestUrl(url)) {

Pokud ano, vytvoří MKDirectionsRequest z adresy URL:

var request = new MKDirectionsRequest(url);

V iOSu 10 je možné aplikaci odeslat adresu, která nemá geografické souřadnice, protože vývojář potřebuje zakódovat adresu:

var geocoder = new CLGeocoder();
geocoder.GeocodeAddress(address, (place, err)=> {
  // Handle the display of the address
  
});

Návrhy aplikací médií

Pokud aplikace zpracovává jakýkoli typ médií, jako je aplikace podcastu nebo streamovaný mediální obsah, jako je zvuk nebo video, s iOSem 10, může v systému využívat funkce Návrhy médií.

U aplikací, které zpracovávají média, podporuje iOS následující chování:

  • IOS podporuje aplikace, které uživatel pravděpodobně použije na základě předchozího chování.
  • Návrhy související s aplikací se zobrazí ve Spotlightu a zobrazení Dnes.
  • Pokud aplikace splňuje jednu z následujících aktivačních událostí, může být zvýšená na návrh zamykací obrazovky:
    • Po připojení sluchátek nebo zařízení Bluetooth se připojí.
    • Po vyjetí do auta.
    • Po příchodu domů nebo do práce.

Přidáním jednoduchého volání rozhraní API v iOSu 10 může vývojář vytvořit poutavější prostředí zamykací obrazovky pro uživatele aplikace médií. Když použijete MPPlayableContentManager třídu ke správě přehrávání médií, zobrazí se na zamykací obrazovce aplikace úplné ovládací prvky médií (jako jsou ty, které aplikace Hudba prezentuje).

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

Shrnutí

Tento článek popisuje proaktivní návrhy a ukázal, jak je vývojář může použít k řízení provozu do aplikace Xamarin.iOS. Tento krok zahrnoval implementaci proaktivních návrhů a prezentovaných pokynů k používání.