Partilhar via


Introdução às sugestões proativas no Xamarin.iOS

Este artigo mostra como usar as Sugestões Proativas no aplicativo Xamarin.iOS para gerar engajamento, permitindo que o sistema apresente proativamente informações úteis automaticamente ao usuário.

Novidade no iOS 10, as Sugestões Proativas apresentam novas maneiras para os usuários se envolverem com um aplicativo Xamarin.iOS, apresentando proativamente informações úteis automaticamente ao usuário nos momentos apropriados.

O iOS 10 apresenta novas formas de gerar engajamento com o aplicativo, permitindo que o sistema apresente proativamente informações úteis automaticamente ao usuário em momentos apropriados. Assim como o iOS 9 forneceu a capacidade de adicionar pesquisa profunda ao aplicativo usando o Spotlight, Handoff e Siri Suggestions (consulte Novas APIs de pesquisa), com o iOS 10 um aplicativo pode expor funcionalidades que podem ser apresentadas ao usuário pelo sistema a partir dos seguintes locais:

  • O alternador de aplicativos
  • A tela de bloqueio
  • CarPlay
  • Mapas
  • Siri Interações
  • Sugestões QuickType

O aplicativo expõe essa funcionalidade ao sistema usando uma coleção de tecnologias como NSUserActivity, web markup, Core Spotlight, MapKit, Media Player e UIKit. Além disso, ao fornecer suporte de sugestão proativa para o aplicativo, ele obtém integração mais profunda com a Siri gratuitamente.

Sugestões baseadas em localização

Nova no iOS 10, a NSUserActivity classe inclui uma MapItem propriedade que permite ao desenvolvedor fornecer informações de localização que podem ser usadas em outros contextos. Por exemplo, se o aplicativo exibir avaliações de restaurantes, o desenvolvedor poderá definir a MapItem propriedade para o local do restaurante que o usuário está visualizando no aplicativo. Se o usuário alternar para o aplicativo Mapas, a localização do restaurante estará automaticamente disponível.

Se o aplicativo oferecer suporte à Pesquisa de Aplicativos, ele poderá usar os CSSearchableItemAttributesSet novos componentes de endereço da classe para especificar os locais que o usuário pode querer visitar. Ao definir a MapItem propriedade, as outras propriedades são preenchidas automaticamente.

Além de definir as Latitude propriedades do componente e Longitude do endereço, é recomendável que o aplicativo forneça as NamedLocation propriedades e PhoneNumbers também, para que a Siri possa iniciar uma chamada para o local.

Sugestões baseadas em marcação da Web

O iOS 9 foi adicionado à capacidade de incluir marcação de dados estruturados no site que enriquece o conteúdo que os usuários veem nos resultados de pesquisa do Spotlight e do Safari (consulte Pesquisar com marcação da Web). O iOS 10 adiciona a capacidade de incluir marcação baseada em localização (como PostalAddress , conforme definido por Schema.org) para melhorar ainda mais a experiência do usuário. Por exemplo, se um usuário exibir uma página marcada como local no site, o sistema poderá sugerir o mesmo local quando abrir o Google Maps.

Sugestões baseadas em texto

UIKit foi expandido no iOS 10 para incluir a propriedade TextContentType da classe UITextInputTraits para especificar o significado semântico do conteúdo em uma área de texto. Com essas informações, o sistema geralmente pode selecionar automaticamente o tipo de teclado apropriado, melhorar as sugestões de correção automática e integrar proativamente informações de outros aplicativos e sites.

Por exemplo, se o usuário estiver inserindo texto em um campo de texto marcado UITextContentType.FullStreetAddress, o sistema poderá sugerir o preenchimento automático do campo com o local que o usuário estava visualizando recentemente.

Sugestões baseadas na mídia

Se o aplicativo reproduzir mídia usando a API MPPlayableContentManager , o iOS 10 permitirá que os usuários visualizem a arte do álbum e reproduzam mídia por meio do aplicativo na tela de bloqueio.

Lembretes contextuais da Siri

Permite que o usuário use a Siri para fazer rapidamente um lembrete para visualizar o conteúdo que está visualizando no aplicativo em uma data posterior. Por exemplo, se eles estivessem visualizando uma avaliação de restaurante no aplicativo, poderiam invocar a Siri e dizer "Lembre-me disso quando eu chegar em casa". A Siri geraria o lembrete com um link para a revisão no aplicativo.

Sugestões baseadas em contato

Permite que os contatos do aplicativo (e informações relacionadas a contatos) apareçam no aplicativo Contato no dispositivo iOS junto com todos os contatos dos usuários armazenados no sistema.

Sugestões baseadas em compartilhamento de viagens

Se um aplicativo de compartilhamento de carona usar a API MKDirectionsRequest , o iOS 10 o apresentará como uma opção no seletor de aplicativos nos momentos em que o usuário provavelmente desejará uma corrida. O aplicativo também deve ser registrado como um aplicativo de compartilhamento de carona, especificando a MKDirectionsModeRideShare chave MKDirectionsApplicationSupportedModes em seu Info.plist arquivo.

Se o aplicativo suportar apenas o compartilhamento de caronas, a sugestão do sistema começaria com "Obter uma carona para...", se outros tipos de direção de rota (como Caminhada ou Bicicleta) forem suportados, o sistema usará "Obter direções para..."

Importante

O objeto MKMapItem que o aplicativo recebe pode não incluir informações de longitude e latitude e exigirá geocodificação.

Implementando sugestões proativas

Adicionar suporte a Sugestão Proativa a um aplicativo Xamarin.iOS normalmente é tão fácil quanto implementar algumas APIs ou expandir algumas APIs que o aplicativo já pode estar implementando.

As Sugestões Proativas funcionam com os aplicativos de três maneiras principais:

  • NSUserActivity e Schema.org - NSUserActivity ajuda o sistema a entender com quais informações o usuário está trabalhando atualmente na tela. Schema.org adiciona habilidades semelhantes às páginas da Web.
  • Sugestões de localização - Se o aplicativo oferecer ou consumir informações baseadas em localização, essas extensões de API oferecem novas maneiras de compartilhar essas informações entre aplicativos.
  • Sugestões de aplicativos de mídia - O sistema pode promover o aplicativo e seu conteúdo de mídia com base no contexto da interação do usuário com o dispositivo iOS.

E é suportado no aplicativo implementando o seguinte:

  • O Handoff - NSUserActivity foi adicionado no iOS 8 para oferecer suporte ao Handoff, que permite ao desenvolvedor iniciar uma atividade em um dispositivo e depois continuar em outro (consulte Introdução ao Handoff).
  • Pesquisa do Spotlight - O iOS 9 adicionou a capacidade de promover conteúdo do aplicativo a partir dos resultados da Pesquisa do Spotlight usando NSUserActivity (consulte Pesquisar com o Core Spotlight).
  • Lembretes contextuais da Siri - No iOS 10, NSUserActivity foi expandido para permitir que a Siri faça rapidamente um lembrete para visualizar o conteúdo que o usuário está visualizando no aplicativo em uma data posterior.
  • Sugestões de localização - O iOS 10 aprimora NSUserActivity para capturar locais visualizados dentro do aplicativo e promovê-los em muitos lugares em todo o sistema.
  • As Solicitações - NSUserActivity contextuais da Siri fornecem contexto às informações apresentadas dentro do aplicativo para a Siri para que o usuário possa obter direções ou fazer uma chamada invocando a Siri de dentro do aplicativo.
  • Interações de contato - Novo no iOS 10, NSUserActivity permite que aplicativos de comunicação sejam promovidos a partir de um cartão de visita (no aplicativo Contatos) como um método de comunicação alternativo.

Todos esses recursos têm uma coisa em comum, todos eles usam NSUserActivity de uma forma ou de outra para fornecer sua funcionalidade.

NSUserActivity

Como dito acima, NSUserActivity ajuda o sistema a entender com quais informações o usuário está trabalhando atualmente na tela. NSUserActivity é um mecanismo de cache de estado leve para capturar a atividade do usuário enquanto ele navega pelo aplicativo. Por exemplo, olhando para um aplicativo de restaurante:

O mecanismo de cache de estado leve NSUserActivity

Com as seguintes interações:

  1. À medida que o usuário trabalha com o aplicativo, um NSUserActivity é criado para recriar o estado do aplicativo posteriormente.
  2. Se o usuário pesquisar por um restaurante, o mesmo padrão de criação de atividades é seguido.
  3. E novamente, quando o usuário visualiza um resultado. Neste último caso, o usuário está visualizando um local e, no iOS 10, o sistema está mais atento a determinados conceitos (como localização ou interações de comunicação).

Dê uma olhada mais de perto na última tela:

Os detalhes do NSUserActivity

Aqui o aplicativo está criando um NSUserActivity e ele foi preenchido com informações para recriar o estado mais tarde. O aplicativo também incluiu alguns metadados, como nome e endereço do local. Com essa atividade criada, o aplicativo permite que o iOS saiba que ele representa o estado atual do usuário.

Em seguida, o aplicativo decide se a atividade será anunciada over-the-air para Handoff, salva como um valor temporário para sugestões de localização ou adicionada ao índice Spotlight no dispositivo para exibição nos resultados da pesquisa.

Para obter mais informações sobre a pesquisa do Handoff e do Spotlight, consulte nossos guias Introdução ao Handoff e Novas APIs de Pesquisa do iOS 9.

Criando uma atividade

Antes de criar uma Atividade, um Identificador de Tipo de Atividade precisará ser criado para identificá-la. O Identificador de Tipo de Atividade é uma cadeia de caracteres curta adicionada à NSUserActivityTypes matriz do arquivo do Info.plist aplicativo usada para identificar exclusivamente um determinado Tipo de Atividade do Usuário. Haverá uma entrada na matriz para cada atividade que o aplicativo oferece suporte e expõe à Pesquisa de Aplicativos. Consulte nossa Referência de criação de identificadores de tipo de atividade para obter mais detalhes.

Veja um exemplo de uma atividade:

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

Uma nova atividade é criada usando um Identificador de Tipo de Atividade. Em seguida, alguns metadados que definem a atividade são criados para que esse estado possa ser restaurado posteriormente. Em seguida, a atividade recebe um título significativo e é anexada às informações do usuário. Finalmente, alguns recursos são habilitados e a atividade é enviada para o sistema.

O código acima pode ser aprimorado para incluir metadados que fornecem contexto para a atividade, fazendo as seguintes alterações:

...

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

Se o desenvolvedor tiver um site capaz de exibir as mesmas informações que o aplicativo, o aplicativo poderá incluir a URL e o conteúdo poderá ser exibido em outros dispositivos que não tenham o aplicativo instalado (via Handoff):

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

Restaurando uma atividade

Para responder ao usuário tocando em um resultado de pesquisa (NSUserActivity) para o aplicativo, edite o arquivo AppDelegate.cs e substitua o ContinueUserActivity método. Por exemplo:

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

O desenvolvedor precisará garantir que este seja o mesmo Identificador de Tipo de Atividade (com.xamarin.platform) que a atividade criada acima. O aplicativo usa as informações armazenadas no NSUserActivity para restaurar o estado de volta para onde o usuário parou.

Benefícios de criar uma atividade

Com a quantidade mínima de código apresentada acima, o aplicativo agora é capaz de aproveitar três novos recursos do iOS 10:

  • Handoff
  • Pesquisa em destaque
  • Lembretes contextuais da Siri

A seção a seguir dará uma olhada na habilitação de dois outros novos recursos do iOS 10:

  • Sugestões de Localização
  • Solicitações contextuais da Siri

Sugestões baseadas em localização

Veja o exemplo do aplicativo de pesquisa de restaurantes acima. Se ele tiver implementado NSUserActivity e preenchido corretamente todos os metadados e atributos, o usuário poderá fazer o seguinte:

  1. Encontre um restaurante no aplicativo em que eles gostariam de encontrar um amigo.
  2. À medida que o usuário se afasta do aplicativo usando o alternador de aplicativos multitarefa, o sistema exibirá automaticamente uma sugestão (na parte inferior da tela) para obter direções para o restaurante usando seu aplicativo de navegação favorito.
  3. Se o usuário alternar para o aplicativo Mensagens e começar a digitar "Vamos nos encontrar em", o teclado QuickType sugerirá automaticamente colar no endereço do restaurante.
  4. Se o usuário alternar para o aplicativo Mapas, o endereço do restaurante será sugerido automaticamente como destino.
  5. Isso funciona até mesmo para aplicativos 3rd Party (que suportam NSUserActivity), para que o usuário possa mudar para um aplicativo de compartilhamento de caronas e o endereço do restaurante seja automaticamente sugerido como destino lá também.
  6. Ele também fornece contexto para a Siri, para que o usuário possa invocar a Siri dentro do aplicativo do restaurante e perguntar "Obter direções...", e a Siri fornecerá instruções para o restaurante que o usuário está visualizando.

Todas as funcionalidades acima têm uma coisa em comum, todas elas indicam de onde a sugestão vem originalmente. No caso do exemplo acima, é o aplicativo de avaliação de restaurantes fictício.

O iOS 10 foi aprimorado para habilitar essa funcionalidade para um aplicativo por meio de várias pequenas modificações e adições às estruturas existentes:

  • NSUserActivity tem campos adicionais para capturar informações de localização que são exibidas dentro do aplicativo.
  • Várias adições foram feitas ao MapKit e CoreSpotlight para capturar a localização.
  • A funcionalidade de reconhecimento de localização foi adicionada à Siri, Mapas, Teclados, Multitarefa e outros aplicativos dentro do sistema.

Para implementar sugestões baseadas em localização, comece com o mesmo código de atividade apresentado acima:

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

Se o aplicativo estiver usando o MapKit, é tão simples quanto adicionar o mapa MKMapItem atual à atividade:

// Save MKMapItem location
activity.MapItem = myMapItem;

Se o aplicativo não estiver usando o MapKit, ele poderá adotar a Pesquisa de Aplicativo e especificar os seguintes novos atributos para localização:

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

Dê uma olhada no código acima em detalhes. Primeiro, o nome do local é necessário em todas as instâncias:

attributes.NamedLocation = "Apple Inc.";

Em seguida, a descrição baseada em texto do local é necessária para instâncias baseadas em texto (como o teclado QuickType):

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

A latitude e longitude são opcionais, mas certifique-se de que o usuário seja roteado para o local exato para o qual o aplicativo deseja enviá-los, por isso deve ser incluído:

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

Ao definir os números de telefone, o aplicativo pode obter acesso à Siri para que o usuário possa invocar a Siri a partir do aplicativo dizendo algo como: "Ligue para este lugar":

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

Finalmente, o aplicativo pode indicar se a instância é adequada para navegação e chamadas telefônicas:

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

Implementando interações de contato

Novidade no iOS 10, as aplicações de comunicação estão profundamente integradas na aplicação Contactos a partir do cartão de contacto. Para aplicativos que implementaram Interações de Contato, o usuário pode adicionar as informações do aplicativo específico a pessoas específicas em seus contatos. E se, por exemplo, eles pressionarem o botão de ação rápida na parte superior de um cartão para enviar uma mensagem, o aplicativo anexado será listado como uma opção para enviar a mensagem.

Se um aplicativo 3rd Party for selecionado, ele poderá ser lembrado e apresentado como a maneira padrão de enviar uma mensagem para a determinada pessoa na próxima vez que o usuário quiser contatá-la.

As interações de contato são implementadas no aplicativo usando NSUserActivity e a nova estrutura de intenções introduzida no iOS 10. Para obter mais detalhes sobre como trabalhar com intenções, consulte nossos guias Entendendo os conceitos do SiriKit e Implementando o SiriKit .

Interações de doação

Veja como o aplicativo pode doar interações:

Visão geral das interações de doação

O aplicativo cria um INInteraction objeto que contém uma Intenção (INIntent), Participantes e Metadados. A Intenção representa uma ação do usuário, como fazer uma chamada de vídeo ou enviar uma mensagem de texto. Os Participantes incluem as pessoas que recebem a comunicação. Os metadados definem informações de adição, como o envio bem-sucedido da mensagem, etc.

O desenvolvedor nunca cria diretamente uma instância de INIntent ou INIntentResponse, eles usarão uma das classes filho específicas (com base na tarefa que o aplicativo está realizando em nome do usuário) que herdam dessas classes pai. Por exemplo, INSendMessageIntent e INSendMessageIntentResponse para enviar uma mensagem de texto.

Quando a interação estiver totalmente preenchida, chame o DonateInteraction método para informar ao sistema que a interação está disponível para uso.

Quando o usuário interage com o aplicativo a partir do cartão de visita, a interação é empacotada com um NSUserActivity, que é usado para iniciar o aplicativo:

A interação é empacotada com um NSUserActivity que é usado para iniciar o aplicativo

Dê uma olhada no exemplo a seguir de uma Intenção de Enviar Mensagem:

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

Examinando esse código em detalhes, ele cria e preenche uma instância de NSUserActivity (conforme mostrado na seção Criando uma atividade acima). Em seguida, ele cria uma instância de INSendMessageIntent (que herda de INIntent) e a preenche com os detalhes da mensagem que está sendo enviada:

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

Um INSendMessageIntentResponse é criado e passado o NSUserActivity criado acima:

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

Um INInteraction é criado a partir da Intenção de Envio de Mensagem (INSendMessageIntent) e Resposta (INSendMessageIntentResponse) recém-criadas:

var interaction = new INInteraction (intent, response);

Por fim, o sistema é a notificação da Interação:

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

Um manipulador de conclusão é passado no qual o aplicativo pode responder à doação bem-sucedida ou falha.

Atividades Melhores Práticas

A Apple sugere as seguintes práticas recomendadas ao trabalhar com atividades:

  • Use NeedsSave para atualizações de carga útil preguiçosas.
  • Certifique-se de manter uma forte referência à atividade atual.
  • Transfira apenas pequenas cargas úteis que incluam apenas informações suficientes para restaurar o estado.
  • Certifique-se de que os identificadores de tipo de atividade sejam exclusivos e descritivos usando a notação DNS reverso para especificá-los.

Schema.org

Como mostrado acima, NSUserActivity ajuda o sistema a entender com quais informações o usuário está trabalhando atualmente na tela. Schema.org adiciona habilidades semelhantes às páginas da Web.

Schema.org pode fornecer os mesmos tipos de interações baseadas em localização para o site. A Apple projetou as novas sugestões de localização para funcionar tão bem quando visualizadas no Safari quanto em um aplicativo nativo.

Alguns Schema.org antecedentes:

  • Ele fornece um padrão de vocabulário de marcação web aberto.
  • Ele funciona incluindo metadados estruturados em páginas da Web.
  • Existem mais de 500 esquemas que representam vários conceitos disponíveis.
  • Ao implementá-lo no site, o desenvolvedor pode adquirir alguns dos benefícios de usar NSUserActivity em um aplicativo nativo.

Os esquemas são organizados em uma estrutura semelhante a uma árvore, onde tipos específicos, como Restaurante, herdam de tipos mais genéricos, como Negócio Local. Para mais informações, consulte Schema.org.

Por exemplo, se a página da Web incluísse os seguintes dados:

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

Se o usuário visitasse esta página no Safari e depois mudasse para outro aplicativo, as informações de localização da página seriam capturadas e oferecidas como uma Sugestão de Localização em outras partes do sistema (como visto em Atividades acima).

O Safari extrairá qualquer coisa em uma página da Web que siga qualquer uma das seguintes propriedades de esquema:

  • PostalAddress
  • GeoCoordinates
  • Uma propriedade de telefone.

Para obter mais informações, consulte nosso guia Pesquisar com marcação da Web.

Consumindo sugestões de localização

Esta próxima seção abordará o consumo de Sugestão de Localização que veio de outras partes do sistema (como o aplicativo Mapas) ou outros aplicativos de terceiros 3rd.

Há duas maneiras principais de o aplicativo consumir Sugestões de Localização:

  • Através do teclado QuickType.
  • Diretamente, consumindo as informações de localização em aplicativos de roteamento.

Sugestões de localização e o teclado QuickType

Se o aplicativo lida com endereços em formatos baseados em texto, o aplicativo pode aproveitar as Sugestões de Localização por meio da interface do usuário QuickType. O iOS 10 expande a interface do usuário QuickType com os seguintes recursos:

  • O aplicativo pode adicionar dicas sobre a intenção semântica para campos de texto na interface do usuário.
  • O aplicativo pode receber sugestões proativas no aplicativo.
  • O aplicativo pode se beneficiar da correção automática aprimorada.

A nova TextContentType propriedade dos controles de campo de texto no iOS 10 permite que o desenvolvedor defina a intenção semântica para o valor que o usuário vai inserir em um determinado campo. Por exemplo:

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

Diria ao sistema que o aplicativo espera que o usuário insira um endereço completo no campo fornecido. Isso permitirá que o teclado QuickType forneça automaticamente Sugestões de Localização no teclado quando o usuário estiver inserindo um valor nesse campo.

A seguir estão alguns dos tipos mais comuns disponíveis para o desenvolvedor na UITextContentType classe estática:

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

Sugestões de aplicativos e locais de roteamento

Esta seção examinará o consumo de Sugestões de Localização diretamente de um aplicativo de roteamento. Para que o aplicativo de roteamento adicione essa funcionalidade, o desenvolvedor aproveitará a estrutura existente MKDirectionsRequest da seguinte maneira:

  • Para promover o aplicativo em Multitarefa.
  • Para registrar o aplicativo como um aplicativo de roteamento.
  • Para manipular a inicialização do aplicativo com um objeto MapKit MKDirectionsRequest .
  • Para dar ao iOS a capacidade de aprender a sugerir o aplicativo ao usuário em momentos apropriados, com base no engajamento do usuário.

Quando o aplicativo é iniciado com um objeto MapKit MKDirectionsRequest , ele deve começar automaticamente a dar ao usuário direções para o local solicitado ou apresentar uma interface do usuário que facilite para o usuário começar a obter direções. Por exemplo:

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

Dê uma olhada neste código em detalhes. Ele testa para ver se é uma solicitação de destino válida:

if (MKDirectionsRequest.IsDirectionsRequestUrl(url)) {

Se for, então ele cria um MKDirectionsRequest a partir da URL:

var request = new MKDirectionsRequest(url);

Novidade no iOS 10, o app pode receber um endereço que não possui coordenadas geográficas, fazendo com que o desenvolvedor precise codificar o endereço:

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

});

Sugestões de aplicativos de mídia

Se o aplicativo lida com qualquer tipo de mídia, como um aplicativo de podcast ou um conteúdo de mídia de streaming, como áudio ou vídeo, com o iOS 10, ele pode aproveitar as Sugestões de Mídia no sistema.

Para aplicativos que manipulam mídia, o iOS oferece suporte aos seguintes comportamentos:

  • O iOS promove aplicativos que o usuário provavelmente usará com base em seu comportamento anterior.
  • As sugestões relacionadas ao aplicativo serão apresentadas no Spotlight e na Visualização Hoje.
  • Se o aplicativo atender a um dos seguintes gatilhos, ele poderá ser elevado a uma sugestão de tela de bloqueio:
    • Depois de conectar fones de ouvido ou um dispositivo Bluetooth faz uma conexão.
    • Depois de entrar em um carro.
    • Depois de chegar em casa ou no trabalho.

Ao incluir uma simples chamada de API no iOS 10, o desenvolvedor pode criar uma experiência de tela de bloqueio mais envolvente para os usuários do aplicativo de mídia. Usando a MPPlayableContentManager classe para gerenciar a reprodução de mídia, controles de mídia completos (como os apresentados pelo aplicativo Música) serão apresentados na tela de bloqueio do aplicativo.

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

Resumo

Este artigo abordou as Sugestões Proativas e mostrou como o desenvolvedor pode usá-las para direcionar o tráfego para o aplicativo Xamarin.iOS. Ele abordou a etapa para implementar Sugestões Proativas e apresentou diretrizes de uso.