Общие сведения о упреждающих предложениях в Xamarin.iOS

В этой статье показано, как использовать упреждающие предложения в приложении Xamarin.iOS для управления взаимодействием, позволяя системе упреждающее представление полезных сведений автоматически пользователю.

Новые возможности iOS 10, упреждающие предложения позволяют пользователям взаимодействовать с приложением Xamarin.iOS, заранее предоставляя полезные сведения пользователю автоматически.

iOS 10 предоставляет новые способы привлечения к приложению, позволяя системе заранее предоставлять полезные сведения пользователю автоматически. Так же, как iOS 9 предоставил возможность добавлять глубокий поиск в приложение с помощью предложений Spotlight, Handoff и Siri (см . новые API поиска), с iOS 10 приложение может предоставлять функции, которые могут быть представлены пользователем системой из следующих расположений:

  • Переключатель приложений
  • Экран блокировки
  • CarPlay
  • Карты
  • Взаимодействие Siri
  • Предложения QuickType

Приложение предоставляет эту функцию системе с помощью коллекции таких технологий, как NSUserActivityвеб-разметка, Core Spotlight, MapKit, Медиаплеер и UIKit. Кроме того, предоставляя поддержку упреждающего предложения для приложения, она получает более глубокую интеграцию Siri бесплатно.

Предложения на основе расположения

Новый для iOS 10 класс включает MapItem свойство, NSUserActivity которое позволяет разработчику предоставлять сведения о расположении, которые можно использовать в других контекстах. Например, если приложение отображает отзывы о ресторанах, разработчик может задать MapItem для свойства расположение ресторана, которое пользователь просматривает в приложении. Если пользователь переключается на приложение Карты, расположение ресторана будет автоматически доступно.

Если приложение поддерживает поиск приложений, оно может использовать новые компоненты CSSearchableItemAttributesSet адреса класса, чтобы указать расположения, которые пользователь может посетить. Задав MapItem свойство, другие свойства автоматически заполняются.

В дополнение к настройке Latitude свойств Longitude компонента адреса рекомендуется указать NamedLocation и PhoneNumbers свойства приложения, поэтому Siri может инициировать вызов к расположению.

Предложения на основе веб-разметки

IOS 9 добавлена в возможность включения структурированной разметки данных на веб-сайт, который дополняет содержимое, которое пользователи видят в результатах поиска в Центре внимания и Safari (см . поиск с помощью веб-разметки). iOS 10 добавляет возможность включения разметки на основе расположения (например , PostalAddress , как определено Schema.org) для дальнейшего улучшения взаимодействия с пользователем. Например, если пользователи просматривают помеченную страницу на веб-сайте, система может предложить то же расположение при открытии Карты.

Предложения на основе текста

UIKit был расширен в iOS 10, чтобы включить свойство TextContentType класса UITextInputTraits, чтобы указать семантический смысл содержимого в текстовой области. С помощью этих сведений система обычно может автоматически выбрать соответствующий тип клавиатуры, улучшить предложения автозамены и заранее интегрировать информацию из других приложений и веб-сайтов.

Например, если пользователь вводит текст в текстовое поле UITextContentType.FullStreetAddress, система может предложить автоматическое заполнение поля расположением, где пользователь недавно просматривал.

Предложения на основе мультимедиа

Если приложение воспроизводит носитель с помощью API MPPlayableContentManager , iOS 10 позволяет пользователям просматривать искусство альбома и воспроизводить мультимедиа через приложение на экране блокировки.

Контекстные напоминания Siri

Позволяет пользователю использовать Siri, чтобы быстро сделать напоминание, чтобы просмотреть содержимое, которое они в настоящее время просматривают в приложении на более позднюю дату. Например, если они просматривали обзор ресторана в приложении, они могли вызвать Siri и сказать : "Напомнить мне об этом, когда я получаю домой". Siri создаст напоминание со ссылкой на проверку в приложении.

Предложения на основе контактов

Позволяет контактам приложения (и контактным данным) отображаться в приложении "Контакт " на устройстве iOS вместе со всеми контактами, хранящимися в системе.

Предложения на основе совместного использования поездки

Если приложение для обмена поездками использует API MKDirectionsRequest , iOS 10 будет представлять его в качестве параметра в переключателе приложений иногда, когда пользователь, скорее всего, хочет ездить. Приложение также должно быть зарегистрировано в качестве приложения для обмена поездками, указав MKDirectionsModeRideShare в файле Info.plist ключ MKDirectionsApplicationSupportedModes.

Если приложение поддерживает общий доступ только к поездкам, системное предложение начинается с "Получить поездку в...", если поддерживаются другие типы направления маршрутизации (например, ходьба или велосипед), система будет использовать "Получить направления к..."

Внимание

Объект MKMapItem , который получает приложение, может не включать сведения о долготе и широте и требовать геокодирования.

Реализация упреждающих предложений

Добавление поддержки упреждающих предложений в приложение Xamarin.iOS обычно так просто, как реализация нескольких API или расширение нескольких API, которые приложение может уже реализовать.

Упреждающие предложения работают с приложениями тремя основными способами:

  • NSUserActivity и Schema.org - NSUserActivity помогают системе понять, с какой информацией пользователь работает на экране. Schema.org добавляет аналогичные возможности для веб-страниц.
  • Предложения по расположению. Если приложение предлагает или использует сведения о расположении, эти расширения API предлагают новые способы предоставления общего доступа к этой информации в приложениях.
  • Предложения для приложений мультимедиа . Система может продвигать приложение и его содержимое мультимедиа в зависимости от контекста взаимодействия пользователя с устройством iOS.

И поддерживается в приложении, реализуя следующее:

  • Передача была добавлена в iOS 8 для поддержки handoff - NSUserActivity, которая позволяет разработчику запускать действие на одном устройстве, а затем продолжать его на другом (см. введение в handoff).
  • Поиск в центре внимания — iOS 9 добавил возможность повышения содержимого приложения в результатах поиска в центре внимания с помощью NSUserActivity (см . раздел "Поиск с основным вниманием").
  • Контекстные напоминания Siri . В iOS 10 был расширен, NSUserActivity чтобы Siri быстро сделать напоминание о содержимом, которое пользователь в настоящее время просматривает в приложении позже.
  • Предложения по расположению — iOS 10 улучшены NSUserActivity для отслеживания расположений, просматриваемых внутри приложения, и повышение их уровня во многих местах в системе.
  • Контекстные запросы - NSUserActivity Siri предоставляют контекст информации, представленной внутри приложения Siri, чтобы пользователь смог получить направления или поставить вызов Siri из приложения.
  • Взаимодействие с контактами — новое в iOS 10, NSUserActivity позволяет приложениям связи продвигаться из контактного карта (в приложении "Контакты") в качестве альтернативного метода связи.

Все эти функции имеют одну общую вещь, они используются NSUserActivity в одной или другой форме для предоставления их функциональных возможностей.

NSUserActivity

Как упоминалось выше, система помогает понять, NSUserActivity с какой информацией пользователь работает на экране. NSUserActivity — это механизм кэширования состояния в легком весе для отслеживания действия пользователя при переходе по приложению. Например, глядя на приложение ресторана:

Механизм кэширования состояния легкого веса NSUserActivity

С помощью следующих взаимодействий:

  1. Так как пользователь работает с приложением, NSUserActivity создается для повторного создания состояния приложения позже.
  2. Если пользователь ищет ресторан, выполняется тот же шаблон создания действий.
  3. И снова, когда пользователь просматривает результат. В этом последнем случае пользователь просматривает расположение и в iOS 10 система более осведомлена о некоторых понятиях (таких как расположение или взаимодействие с коммуникацией).

Взгляните на последний экран:

Сведения о NSUserActivity

Здесь приложение создает и NSUserActivity заполняется информацией для повторного создания состояния позже. Приложение также включало некоторые метаданные, такие как имя и адрес расположения. При создании этого действия приложение позволяет iOS знать, что оно представляет текущее состояние пользователя.

Затем приложение решает, будет ли действие рекламироваться через воздух для Handoff, сохранено в качестве временного значения для предложений расположения или добавлено в индекс "Центр внимания на устройстве" для отображения в результатах поиска.

Дополнительные сведения о поиске Handoffи В центре внимания см. в руководстве по api-интерфейсам "Ввод" и iOS 9 New Search API.

Создание действия

Перед созданием действия необходимо создать идентификатор типа действия для его идентификации. Идентификатор типа действия — это короткая строка, добавленная в NSUserActivityTypes массив файла приложения Info.plist , используемого для уникального определения заданного типа действия пользователя. В массиве будет одна запись для каждого действия, которое приложение поддерживает и предоставляет поиску приложений. Дополнительные сведения см. в справочнике по идентификаторам типов действий.

Ознакомьтесь с примером действия:

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

Новое действие создается с помощью идентификатора типа действия. Далее создаются некоторые метаданные, определяющие действие, чтобы это состояние можно было восстановить позже. Затем действие получает понятное название и присоединяется к сведениям пользователя. Наконец, некоторые возможности включены и действие отправляется в систему.

Приведенный выше код можно дополнительно расширить, чтобы включить метаданные, которые предоставляют контекст для действия, выполнив следующие изменения:

...

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

Если у разработчика есть веб-сайт, способный отображать те же сведения, что и приложение, приложение может включать URL-адрес и содержимое можно отображать на других устройствах, на которых не установлено приложение (через handoff):

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

Восстановление действия

Чтобы ответить пользователю на результат поиска (NSUserActivity) для приложения, измените файл AppDelegate.cs и переопределите ContinueUserActivity метод. Например:

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

Разработчику потребуется убедиться, что это тот же идентификатор типа действия (com.xamarin.platform), что и действие, созданное выше. Приложение использует сведения, хранящиеся в NSUserActivity файле, для восстановления состояния обратно в место, в которое пользователь ушел.

Преимущества создания действия

Благодаря минимальному объему кода, представленному выше, приложение теперь может воспользоваться тремя новыми функциями iOS 10:

  • Handoff
  • Поиск в центре внимания
  • Контекстные напоминания Siri

В следующем разделе описано включение двух других новых функций iOS 10:

  • Предложения по расположению
  • Контекстные запросы Siri

Предложения на основе расположения

Пример приведенного выше приложения поиска в ресторане. Если он реализовал NSUserActivity и правильно заполнял все метаданные и атрибуты, пользователь сможет выполнить следующие действия:

  1. Найдите ресторан в приложении, на которое они хотели бы встретиться с другом.
  2. По мере того как пользователь переходит от приложения с помощью переключателя многозадачности приложений, система автоматически отобразит предложение (в нижней части экрана), чтобы получить направления к ресторану с помощью любимого приложения навигации.
  3. Если пользователь переключается на приложение "Сообщения" и начинает вводить "Давайте встретимся", клавиатура QuickType автоматически предложит вставку в адрес ресторана.
  4. Если пользователь переключается на приложение Карты, адрес ресторана автоматически предлагается в качестве назначения.
  5. Это даже работает для сторонних приложений (которые поддерживают NSUserActivity), поэтому пользователь может переключиться на приложение для обмена поездками и адрес ресторана автоматически предлагается в качестве места назначения.
  6. Он также предоставляет контекст для Siri, поэтому пользователь может вызвать Siri в приложении ресторана и попросить "Получить направления..." и Siri предоставит указания в ресторане, который пользователь просматривает.

Все перечисленные выше функциональные возможности имеют одну общую вещь, они все указывают, откуда изначально поступает предложение. В приведенном выше примере это вымышленное приложение проверки ресторана.

IOS 10 улучшен, чтобы обеспечить эту функциональность для приложения с помощью нескольких небольших изменений и дополнений существующих платформ:

  • NSUserActivity содержит дополнительные поля для записи сведений о расположении, которые отображаются внутри приложения.
  • В MapKit и CoreSpotlight было добавлено несколько дополнений для отслеживания расположения.
  • Функция поддержки расположения добавлена в Siri, Карты, клавиатуры, многозадачность и другие приложения в системе.

Чтобы реализовать предложения на основе расположения, начните с того же кода действия, представленного выше:

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

Если приложение использует MapKit, это так же просто, как добавление текущей карты MKMapItem в действие:

// Save MKMapItem location
activity.MapItem = myMapItem;

Если приложение не использует MapKit, оно может применить поиск приложений и указать следующие новые атрибуты для расположения:

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

Подробно рассмотрим приведенный выше код. Во-первых, имя расположения необходимо в каждом экземпляре:

attributes.NamedLocation = "Apple Inc.";

Затем текстовое описание расположения требуется для экземпляров на основе текста (например, клавиатуры QuickType):

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;

Задав номера телефонов, приложение может получить доступ к Siri, чтобы пользователь смог вызвать Siri из приложения, сказав следующее:

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

Наконец, приложение может указать, подходит ли экземпляр для навигации и телефонных звонков:

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

Реализация взаимодействия с контактами

Новые возможности iOS 10, приложения связи глубоко интегрированы в приложение "Контакты" из карта контакта. Для приложений, которые реализовали взаимодействие с контактами, пользователь может добавить данные данного приложения в конкретные люди в своих контактах. И если, например, они нажимают кнопку быстрого действия в верхней части карта для отправки сообщения, присоединенное приложение будет указано в качестве параметра для отправки сообщения.

Если выбрано 3-е стороннее приложение, его можно запомнить и представить в качестве способа сообщения заданного пользователя при следующем обращении к нему.

Взаимодействие с контактами реализовано в приложении с помощью NSUserActivity и новой платформой "Намерения", представленной в iOS 10. Дополнительные сведения о работе с намерениями см. в наших руководствах по пониманию концепций SiriKit и реализации SiriKit .

Пожертвование взаимодействий

Ознакомьтесь с тем, как приложение может пожертвовать взаимодействия:

Общие сведения о взаимодействии с пожертвованиями

Приложение создает INInteraction объект, содержащий намерение (INIntent), участников и метаданные. Намерение представляет действие пользователя, например видеозвонок или отправку текстового сообщения. Участники включают людей, получающих сообщение. Метаданные определяют сведения о добавлении , такие как успешная отправка сообщения и т. д.

Разработчик никогда не создает экземпляр INIntent или INIntentResponseне будет использовать один из определенных дочерних классов (на основе задачи, которую приложение выполняет от имени пользователя), наследуемого от этих родительских классов. Например, INSendMessageIntent для INSendMessageIntentResponse отправки текстового сообщения.

После полного заполнения взаимодействия вызовите DonateInteraction метод, чтобы сообщить системе, что взаимодействие доступно для использования.

Когда пользователь взаимодействует с приложением из карта контакта, взаимодействие объединяется с NSUserActivityприложением, которое затем используется для запуска приложения:

Взаимодействие объединяется с NSUserActivity, которая используется для запуска приложения.

Ознакомьтесь со следующим примером намерения отправки сообщения:

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

Подробно рассмотрим этот код, он создает и заполняет экземпляр NSUserActivity (как показано в разделе "Создание действия " выше). Затем он создает экземпляр INSendMessageIntent (который наследует от INIntent) и заполняет его сведениями о отправленном сообщении:

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

Создается INSendMessageIntentResponse и передается NSUserActivity созданный выше код:

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

Создается INInteraction из только что созданного намеренияINSendMessageIntent отправки сообщения и ответа(INSendMessageIntentResponse

var interaction = new INInteraction (intent, response);

Наконец, система уведомляет об взаимодействии:

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

Обработчик завершения передается, когда приложение может реагировать на пожертвование успешно или неудачно.

Рекомендации по действиям

Apple предлагает следующие рекомендации при работе с действиями:

  • Используется NeedsSave для отложенных обновлений полезных данных.
  • Убедитесь, что для текущей активности имеется надежная ссылка.
  • Перенос только небольших полезных данных, которые содержат достаточно сведений для восстановления состояния.
  • Убедитесь, что идентификаторы типов действия являются уникальными и описательными с помощью обратной нотации DNS, чтобы указать их.

Schema.org

Как показано выше, система помогает понять, NSUserActivity с какой информацией пользователь работает на экране. Schema.org добавляет аналогичные возможности для веб-страниц.

Schema.org могут предоставлять те же типы взаимодействия на основе расположения на веб-сайте. Apple разработала новые предложения по расположению, чтобы работать так же, как и при просмотре в Safari, как они делают в собственном приложении.

Некоторые Schema.org фона:

  • Он предоставляет открытый словарь веб-разметки.
  • Он работает путем включения структурированных метаданных на веб-страницах.
  • Существует более 500 схем, представляющих различные понятия.
  • Реализуя его на веб-сайте, разработчик может получить некоторые преимущества использования NSUserActivity в собственном приложении.

Схемы расположены в дереве, например структуре, где определенные типы, такие как ресторан, наследуются от более универсальных типов, таких как local business. Дополнительные сведения см. в Schema.org.

Например, если веб-страница включала следующие данные:

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

Если пользователь посетил эту страницу в Safari, а затем переключился на другое приложение, сведения о расположении на странице будут записаны и предложены в качестве предложения о расположении в других частях системы (как показано в действиях выше).

Safari извлекает что-либо на веб-странице, которая соответствует любому из следующих свойств схемы:

  • PostalAddress
  • GeoCoordinates
  • Свойство телефона.

Дополнительные сведения см. в руководстве по поиску с помощью веб-разметки .

Использование предложений по расположению

В следующем разделе описано использование предложения о расположении, которые были получены из других частей системы (например, приложения Карты) или других сторонних приложений.

Существует два основных способа использования предложений расположения приложения.

  • С помощью клавиатуры QuickType.
  • Непосредственно путем использования сведений о расположении в приложениях маршрутизации.

Предложения по расположению и клавиатура QuickType

Если приложение работает с адресами в текстовых форматах, приложение может воспользоваться предложениями по расположению с помощью пользовательского интерфейса QuickType. IOS 10 расширяет пользовательский интерфейс QuickType со следующими функциями:

  • Приложение может добавлять подсказки о семантических намерениях для текстовых полей в пользовательском интерфейсе.
  • Приложение может получить упреждающие предложения в приложении.
  • Приложение может воспользоваться расширенным автозаменой.

Новое TextContentType свойство элементов управления текстовым полем в iOS 10 позволяет разработчику определить семантические намерения для значения, которое пользователь собирается ввести в заданном поле. Например:

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

Сообщит системе, что приложение ожидает, что пользователь введет полный адрес улицы в заданном поле. Это позволит клавиатуре QuickType автоматически предоставлять предложения по расположению на клавиатуре при вводе значения в этом поле.

Ниже приведены некоторые из наиболее распространенных типов, доступных разработчику в статичном UITextContentType классе:

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

Предложения по маршрутизации приложений и расположений

В этом разделе вы узнаете, как использовать предложения расположения непосредственно из приложения маршрутизации. Чтобы приложение маршрутизации добавило эту функцию, разработчик будет использовать существующую MKDirectionsRequest платформу следующим образом:

  • Чтобы повысить уровень приложения в многозадачности.
  • Регистрация приложения в качестве приложения маршрутизации.
  • Обработка запуска приложения с помощью объекта MapKit MKDirectionsRequest .
  • Чтобы предоставить iOS возможность научиться предлагать приложению пользователю в соответствующее время, на основе участия пользователей.

Когда приложение запускается с объектом MapKit MKDirectionsRequest , оно должно автоматически начинать предоставлять пользователю указания в запрошенном расположении или представлять пользовательский интерфейс, который упрощает получение направлений. Например:

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

Подробно рассмотрим этот код. Он проверяет, является ли он допустимым целевым запросом:

if (MKDirectionsRequest.IsDirectionsRequestUrl(url)) {

Если это так, он создает MKDirectionsRequest из URL-адреса:

var request = new MKDirectionsRequest(url);

Новое в iOS 10, приложение может быть отправлено адрес, который не имеет геокоординирований, в результате чего разработчику нужно закодировать адрес:

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

});

Предложения приложений мультимедиа

Если приложение обрабатывает любой тип носителей, таких как приложение podcast или потоковое содержимое мультимедиа, например аудио или видео, с iOS 10, это может воспользоваться предложениями мультимедиа в системе.

Для приложений, обрабатывающих носители, iOS поддерживает следующее поведение:

  • iOS продвигает приложения, которые пользователь, скорее всего, будет использовать на основе предыдущего поведения.
  • Предложения, связанные с приложением, будут представлены в Центре внимания и представлении сегодня.
  • Если приложение соответствует одному из следующих триггеров, оно может быть повышено до предложения экрана блокировки:
    • После подключения к наушникам или устройству Bluetooth выполняется подключение.
    • После того как попасть в машину.
    • После прибытия домой или работы.

Включив простой вызов API в iOS 10, разработчик может создать более привлекательный экран блокировки для пользователей приложения мультимедиа. С помощью MPPlayableContentManager класса для управления воспроизведением мультимедиа полные элементы управления мультимедиа (например, представленные приложением Music) будут представлены на экране блокировки приложения.

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

Итоги

В этой статье рассматриваются упреждающие предложения и показано, как разработчик может использовать их для передачи трафика в приложение Xamarin.iOS. Он рассмотрел этап реализации упреждающих предложений и представленных рекомендаций по использованию.