Усовершенствования мини-приложения поиска и начального экрана в iOS 10

В этой статье рассматриваются усовершенствования Apple, внесенные в систему мини-приложений в iOS 10.

Apple представила несколько улучшений в системе мини-приложений, чтобы гарантировать, что мини-приложения выглядят отлично на любом фоне, существующем на новом экране блокировки iOS 10. Кроме того, мини-приложения теперь содержат свойство NCWidgetDisplayMode , позволяющее разработчику описать доступное содержимое и позволит пользователю развернуть и свернуть содержимое.

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

Мини-приложения являются очень настраиваемыми и могут содержать такие элементы пользовательского интерфейса, как текст, изображения, кнопки и т. д. Кроме того, разработчик может дополнительно настроить макет своих мини-приложений.

Примеры мини-приложений

Существует два основных места, которые пользователь может просматривать и взаимодействовать с мини-приложениями:

  • Экран поиска — пользователи могут добавлять мини-приложения, которые они находят наиболее полезными для своего экрана поиска. Доступ к экрану поиска осуществляется путем прокрутки прямо на экранах "Главная" и "Блокировка".
  • Начальный экран — с начального экрана пользователь может использовать 3D Touch, чтобы открыть список быстрых действий, применив давление на значок приложения. Мини-приложения будут отображаться над списком быстрых действий. Дополнительные сведения см. в нашей документации по 3D Touch .

Предложения разработчика мини-приложений

В идеале разработчик должен всегда пытаться создавать мини-приложения, которые пользователь хочет добавить на экраны поиска. Для этого Apple предлагает следующие предложения:

  • Создайте удобный и краткий интерфейс . Пользовательские мини-приложения, которые предоставляют краткие, краткие сведения об обновлениях состояния или позволяют им быстро выполнять простые задачи. Это делает предоставление правильного объема информации и интерактивности важной. По возможности разрешите пользователю выполнять определенную задачу с одним касанием. Кроме того, так как мини-приложения не поддерживают сдвиг или прокрутку, это необходимо учитывать в дизайне мини-приложения.
  • Быстрое отображение содержимого — мини-приложения предназначены для быстрого просмотра, поэтому пользователю не придется ждать загрузки содержимого после отображения мини-приложения. Мини-приложения должны кэшировать содержимое локально, чтобы они могли отображать последнее содержимое во время загрузки свежего содержимого в фоновом режиме.
  • Укажите соответствующие поля и поля . Мини-приложения никогда не должны выглядеть переполненными, поэтому избегайте расширения содержимого на краях представления мини-приложения. Между краями и содержимым всегда должно быть несколько пикселей. Apple также предлагает использовать значок приложения, отображаемый в верхней части мини-приложения в качестве руководства по выравниванию. Если мини-приложение представляет макет сетки, убедитесь, что между элементами в сетке есть правильное заполнение и попробуйте ограничить количество элементов до четырех максимальных.
  • Используйте адаптивные макеты . Ширина мини-приложения зависит от устройства, на котором он работает, и ориентация устройства. Высота мини-приложения также может отличаться в зависимости от того, отображается ли оно в состоянии свернутого (по умолчанию) или развернутого (не поддерживается всеми мини-приложениями). Свернутое мини-приложение имеет высоту примерно двух с половиной стандартных строк таблицы iOS. Разработчик может запросить размер развернутого мини-приложения, но в идеале он должен быть меньше высоты экрана. В состоянии свернутого мини-приложения должны отображаться только важные автономные сведения. При развертывании мини-приложение должно отображать дополнительные сведения, повышающие основное содержимое, отображаемое в состоянии свернутого свертывания. Мини-приложения, отображаемые в списке быстрых действий, будут находиться только в состоянии свернутого свертывания.
  • Не настраивайте фон мини-приложения. Мини-приложения отображаются на светлом, размытом фоне, предоставленном системой. Это делается для повышения согласованности между мини-приложениями и повышения удобочитаемости их содержимого. Избегайте использования изображения в качестве фона мини-приложения, так как оно может столкнуться с фоном блокировки и домашнего экрана пользователя.
  • Используйте системный шрифт в черном или темно-сером цвете. При отображении текста в мини-приложении системный шрифт работает лучше всего. Шрифт должен быть в черном или темно-сером цвете, чтобы выделиться на светлом, размытом фоне мини-приложения.
  • Предоставление доступа к приложениям при необходимости — мини-приложение всегда должно работать отдельно от приложения, однако, если требуется более глубокая функциональность, мини-приложение должно иметь возможность запустить приложение, чтобы просмотреть или изменить определенную часть информации. Никогда не включать кнопку "открыть приложение", просто разрешить пользователю касаться самого содержимого и никогда не открывать стороннее приложение.
  • Выберите понятное, краткое имя мини-приложения — значок приложения и имя мини-приложения всегда отображаются по содержимому мини-приложения. Apple предлагает использовать имя приложения для своего основного мини-приложения и четкое, краткое имя для любых других, которые он предоставляет. При предоставлении настраиваемого заголовка мини-приложения они должны быть префиксированы именем приложения (например, Карты рядом, Карты рестораны и т. д.).
  • Сообщите, когда проверка подлинности добавляет значение . Если дополнительные функциональные возможности или сведения доступны только в том случае, если пользователь прошел проверку подлинности и вошел в систему, представите этому пользователю. Например, приложение для обмена поездками может сказать "Войти в книгу поездки".
  • Выберите мини-приложение списка быстрых действий. Если приложение предоставляет несколько мини-приложений, разработчик должен выбрать его, когда пользователь открывает список быстрых действий, применяя давление на значок приложения с помощью 3D Touch.

Дополнительные сведения о работе с мини-приложениями см. в статье "Общие сведения о расширениях", "Введение в 3D Touch" и руководство по программированию расширений приложений Apple.

Работа с Vibrancy

Vibrancy гарантирует, что текст мини-приложения остается понятным при появлении на светлом, размытом фоне мини-приложения (предоставленном системой). До iOS 10 разработчик будет использовать NotificationCenterVibrancyEffect для вибрации мини-приложения. Например:

// DEPRECATED: Get Widget Vibrancy Effect
var vibrancy = UIVibrancyEffect.CreateForNotificationCenter ();

Это не рекомендуется в iOS 10 и должно быть заменено мини-приложением WidgetPrimaryVibrancyEffect или WidgetSecondaryVibrancyEffect. Например:

// Get Primary Widget Vibrancy Effect
var vibrancy = UIVibrancyEffect.CreatePrimaryVibrancyEffectForNotificationCenter ();

// Get Secondary Widget Vibrancy Effect
var vibrancy2 = UIVibrancyEffect.CreateSecondaryVibrancyEffectForNotificationCenter ();

Работа с свернутыми и развернутыми мини-приложениями

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

При первоначальном отображении мини-приложения он находится в состоянии свернутого свертывания. Свернутое мини-приложение имеет высоту примерно двух с половиной стандартных строк таблицы iOS. Разработчик может запросить размер развернутого мини-приложения, но в идеале он должен быть меньше высоты экрана.

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

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

В следующем примере используется простое расширение "Сегодня" (мини-приложение), которое обрабатывает свернутые и развернутые состояния:

using System;
using NotificationCenter;
using Foundation;
using UIKit;
using CoreGraphics;

namespace MonkeyAbout
{
    public partial class TodayViewController : UIViewController, INCWidgetProviding
    {
        protected TodayViewController (IntPtr handle) : base (handle)
        {
            // Note: this .ctor should not contain any initialization logic.
        }

        public override void ViewDidLoad ()
        {
            base.ViewDidLoad ();

            // Tell widget it can be expanded
            ExtensionContext.SetWidgetLargestAvailableDisplayMode (NCWidgetDisplayMode.Expanded);

            // Get the maximum size
            var maxSize = ExtensionContext.GetWidgetMaximumSize (NCWidgetDisplayMode.Expanded);
        }

        [Export ("widgetPerformUpdateWithCompletionHandler:")]
        public void WidgetPerformUpdate (Action<NCUpdateResult> completionHandler)
        {
            // Take action based on the display mode
            switch (ExtensionContext.GetWidgetActiveDisplayMode()) {
            case NCWidgetDisplayMode.Compact:
                Content.Text = "Let's Monkey About!";
                break;
            case NCWidgetDisplayMode.Expanded:
                Content.Text = "Gorilla!!!!";
                break;
            }

            // Report results
            // If an error is encoutered, use NCUpdateResultFailed
            // If there's no update required, use NCUpdateResultNoData
            // If there's an update, use NCUpdateResultNewData
            completionHandler (NCUpdateResult.NewData);
        }

        [Export ("widgetActiveDisplayModeDidChange:withMaximumSize:")]
        public void WidgetActiveDisplayModeDidChange (NCWidgetDisplayMode activeDisplayMode, CGSize maxSize)
        {
            // Take action based on the display mode
            switch (activeDisplayMode) {
            case NCWidgetDisplayMode.Compact:
                PreferredContentSize = maxSize;
                Content.Text = "Let's Monkey About!";
                break;
            case NCWidgetDisplayMode.Expanded:
                PreferredContentSize = new CGSize (0, 200);
                Content.Text = "Gorilla!!!!";
                break;
            }
        }

    }
}

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

// Tell widget it can be expanded
ExtensionContext.SetWidgetLargestAvailableDisplayMode (NCWidgetDisplayMode.Expanded);

Чтобы получить текущий режим отображения мини-приложения, используется:

ExtensionContext.GetWidgetActiveDisplayMode()

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

// Get the maximum size
var maxSize = ExtensionContext.GetWidgetMaximumSize (NCWidgetDisplayMode.Expanded);

Для обработки изменения состояния (режим отображения) используется:

[Export ("widgetActiveDisplayModeDidChange:withMaximumSize:")]
public void WidgetActiveDisplayModeDidChange (NCWidgetDisplayMode activeDisplayMode, CGSize maxSize)
{
    // Take action based on the display mode
    switch (activeDisplayMode) {
    case NCWidgetDisplayMode.Compact:
        PreferredContentSize = maxSize;
        Content.Text = "Let's Monkey About!";
        break;
    case NCWidgetDisplayMode.Expanded:
        PreferredContentSize = new CGSize (0, 200);
        Content.Text = "Gorilla!!!!";
        break;
    }
}

Помимо настройки запрошенного размера для каждого состояния (свернутый или развернутый), он также обновляет отображаемое содержимое для соответствия новому размеру.

Итоги

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