Поиск по NSUserActivity в Xamarin.iOS

NSUserActivity представлен в iOS 8 и используется для предоставления данных для Handoff. Он позволяет создавать действия в определенных частях приложения, которые затем можно передать другому экземпляру приложения, работающему на другом устройстве iOS. Затем принимающее устройство может продолжить действие, запущенное на предыдущем устройстве, выбрав право, где пользователь ушел. Дополнительные сведения об использовании Handoff см. в нашей документации по вводу в handoff .

Новые возможности iOS 9 можно индексировать (как публично, NSUserActivity так и в частном порядке) и выполнять поиск в центре внимания поиска и Safari. Помечая как доступные NSUserActivity для поиска и добавляя индексируемые метаданные, действие можно перечислить в результатах поиска на устройстве iOS.

The App History overview

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

Для поддержки поиска приложений NSUserActivity используются следующие свойства:

  • EligibleForHandoff — Если trueэто действие можно использовать в операции передачи.
  • EligibleForSearch — Если trueэто действие будет добавлено в индекс на устройстве и представлено в результатах поиска.
  • EligibleForPublicIndexing — Если trueэто действие будет добавлено в облачный индекс Apple и представлено пользователям (с помощью поиска), которые еще не установили приложение на устройстве iOS. Дополнительные сведения см. в разделе "Индексирование общедоступного поиска".
  • Title — предоставляет заголовок для действия и отображается в результатах поиска. Пользователи также могут искать текст самого заголовка.
  • Keywords — это массив строк, используемых для описания действия, который будет индексирован и выполнен поиск конечным пользователем.
  • ContentAttributeSet — используется CSSearchableItemAttributeSet для подробного описания действия и предоставления полного содержимого в результатах поиска.
  • ExpirationDate — Если вы хотите, чтобы действие отображалось только до заданной даты, вы можете указать эту дату здесь.
  • WebpageURL — Если действие можно просмотреть в Интернете или если ваше приложение поддерживает глубокие ссылки Safari, вы можете задать ссылку на эту страницу.

Краткое руководство по NSUserActivity

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

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

Создание идентификаторов типов действия

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

Apple предлагает использовать нотацию обратного стиля DNS для идентификатора типа действия, чтобы избежать конфликтов. Например, com.company-name.appname.activity для определенных действий на основе приложений или com.company-name.activity действий, которые могут выполняться в нескольких приложениях.

Идентификатор типа действия используется при создании NSUserActivity экземпляра для определения типа действия. Если действие продолжается в результате нажатия результата поиска, тип действия (вместе с идентификатором команды приложения) определяет, какое приложение будет запущено для продолжения действия.

Чтобы создать необходимые идентификаторы типов действий для поддержки этого поведения, измените файл Info.plist и перейдите в представление источника . NSUserActivityTypes Добавьте ключ и создайте идентификаторы в следующем формате:

The NSUserActivityTypes key and required identifiers in the plist editor

В приведенном выше примере мы создали один новый идентификатор типа действия для действия поиска (com.xamarin.platform). При создании собственных приложений замените содержимое NSUserActivityTypes массива идентификаторами типов действий, характерными для действий, поддерживаемых приложением.

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

Ниже приведен пример создания действия для размещенного на устройстве поиска:

// Create App Search 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;

// Add App Search ability
activity.EligibleForSearch = true;
activity.BecomeCurrent();

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

Addition Search Details overview

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

Реагирование на действие

Чтобы ответить пользователю, касаясь результата поиска (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;
}

Обратите внимание, что это тот же метод, что и переопределение, используемое для реагирования на запросы handoff. Теперь, если пользователь щелкает ссылку из нашего приложения в результатах поиска в центре внимания, наше приложение будет доставлено на передний план (или запущено, если оно еще не запущено), а содержимое, навигация или функция, представленные этой ссылкой, будут отображаться:

Restore Previous State from Search

Индексирование общедоступного поиска

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

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

  1. При создании действия для приложения его можно пометить как общедоступную.
  2. Общедоступные действия отправляются в Apple и индексируются в облаке.
  3. По мере того как пользователи взаимодействуют с приложением на устройстве и используют определенную функцию или содержимое, представленное действием, он увеличивается.
  4. Популярные общедоступные результаты будут доступны другим пользователям, даже если у них нет приложения.
  5. Эти общедоступные результаты будут отображаться в поиске в центре внимания и Safari (если действие содержит URL-адрес).

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

// Create App Search 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;

// Add App Search ability
activity.EligibleForSearch = true;
activity.EligibleForPublicIndexing = true;
activity.BecomeCurrent();

Только потому, что для общедоступного индексирования задано действие, оно EligibleForPublicIndexing = trueне означает, что оно будет автоматически добавлено в общедоступный облачный индекс Apple. Сначала необходимо выполнить следующие условия:

  1. Он должен отображаться в результатах поиска и выбираться многими пользователями. Результаты остаются закрытыми до тех пор, пока не будет выполнено пороговое значение взаимодействия.
  2. Подготовка приложений предотвращает индексирование и предоставление общедоступных данных для конкретных пользователей.

Дополнительные преимущества

Используя поиск NSUserActivity приложений в приложении, вы также получите следующие функции:

  • Передача. Так как поиск приложений предоставляет содержимое, навигацию и (или) функции с помощью того же механизма, что и handoff (NSUserActivity), вы можете легко разрешить пользователям приложения запускать действие на одном устройстве и продолжать его на другом.
  • Предложения Siri . Наряду со стандартными предложениями , которые предложения Siri обычно делают, активные элементы из вашего приложения можно автоматически предлагать.
  • Siri Smart Reminders . Пользователи смогут попросить Siri напомнить им о действиях из вашего приложения.