Поделиться через


Распространение в Центре приложений — обновления в приложении Unity

Это важно

Центр приложений Visual Studio был прекращен 31 марта 2025 г., за исключением функций аналитики и диагностики, которые будут поддерживаться до 30 июня 2026 г. Подробнее.

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

Это важно

Пакет SDK распространения для Unity не поддерживает UWP. Инструкции на этой странице охватывают только Android и iOS.

Предупреждение

Google Play считает код обновления в приложении вредоносным поведением, даже если он не используется во время выполнения. Удалите этот код, как показано в этом разделе , прежде чем отправлять приложение в Google Play. Удаление кода обновления в приложении может привести к несоответствию правилам и последующему удалению приложения из Google Play.

Замечание

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

Добавление обновлений приложения в приложение

Добавление модуля распространения в Центре приложений

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

Следуйте документации по началу работы с Unity , если вы еще не настроили и запустили пакет SDK в приложении. Обязательно импортируйте пакет App Center Distribute. Его имя должно быть в формате AppCenterDistribute-v{version}.unitypackage.

Замечание

Android 10 или более поздней версии имеет ограничения на запуск с фонового режима. См. статью об ограничениях на запуск действий из фона.

Замечание

Приложения, работающие в Выпуске Android 10 (Go), не могут получить разрешение SYSTEM_ALERT_WINDOW . См. статью о SYSTEM_ALERT_WINDOW на устройствах Go.

Замечание

Начиная с Android 11, интенты ACTION_MANAGE_OVERLAY_PERMISSION всегда переносят пользователя на основной экран настроек, где пользователь может предоставить или отозвать SYSTEM_ALERT_WINDOW разрешения для приложений. См. статью об обновлениях разрешений в Android 11.

Отключение внутрипрограммных обновлений для версий Google Play

Google Play считает код обновления в приложении вредоносным поведением, даже если он не используется во время выполнения. Удалите этот код перед отправкой приложения в Google Play. Удаление кода обновления в приложении может привести к несоответствию правилам и последующему удалению приложения из Google Play. Чтобы удалить нативный код обновлений в приложении, снимите флажок «Использовать распространение» в разделе «Распространение» для объекта игры с присоединенным AppCenterBehavior.

Использование частной группы рассылки

По умолчанию Distribute использует публичную группу рассылки. Если вы хотите использовать частную группу рассылки, необходимо изменить UpdateTrack его на Private. Для этого выберите Приватный в выпадающем списке Обновление трека в разделе Распространение для объекта игры с прикрепленным AppCenterBehavior.

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

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

Отключение автоматической проверки обновлений

По умолчанию пакет SDK автоматически проверяет наличие новых выпусков:

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

Если вы хотите вручную проверить наличие новых выпусков, можно отключить автоматическую проверку на обновление.

Для этого снимите флажок "Автоматическая проверка обновлений" в разделе Распространение на игровом объекте с прикрепленным AppCenterBehavior.

Затем можно использовать API CheckForUpdate, который описан в следующем разделе.

Проверка обновления вручную

Distribute.CheckForUpdate();

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

Замечание

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

Настройка или локализация диалогового окна обновления в приложении

1. Настройка или локализация текста

Вы можете указать собственные строки ресурсов, если вы хотите локализовать текст, отображаемый в диалоговом окне обновления. Просмотрите строковые файлы для iOS в этом файле ресурсов iOS и для Android в этом файле ресурсов Android. Используйте то же строковое имя или ключ и укажите локализованное значение, которое будет отражено в диалоговом окне в собственных файлах ресурсов приложения.

2. Настройка диалогового окна обновления

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

Предупреждение

Необходимо зарегистрировать обратный вызов в методе Awake элемента MonoBehaviour в первой сцене, загружаемой вашим приложением, чтобы не пропускать ни одной инвокации обратного вызова на выпуск.

// In this example, OnReleaseAvailable is a method name in same class
Distribute.ReleaseAvailable = OnReleaseAvailable;

Ниже представлена реализация callback, которая заменяет диалоговое окно SDK пользовательской логикой.

bool OnReleaseAvailable(ReleaseDetails releaseDetails)
{
    // Look at releaseDetails public properties to get version information, release notes text or release notes URL
    string versionName = releaseDetails.ShortVersion;
    string versionCodeOrBuildNumber = releaseDetails.Version;
    string releaseNotes = releaseDetails.ReleaseNotes;
    Uri releaseNotesUrl = releaseDetails.ReleaseNotesUrl;

    // (Do something with the values if you want)

    // On mandatory update, user can't postpone
    if (releaseDetails.MandatoryUpdate)
    {
        // Force user to update (you should probably show some custom UI here)
        Distribute.NotifyUpdateAction(UpdateAction.Update);
    }
    else
    {
        // Allow user to update or postpone (you should probably show some custom UI here)
        // "GetUserUpdateAction()" isn't part of the SDK; it just represents a way of getting user response.
        // This blocks the thread while awaiting the user's response! This example shouldn't be used literally
        UpdateAction updateAction = GetUserUpdateAction();
        Distribute.NotifyUpdateAction(updateAction);
    }
    // Return true if you're using your own UI to get user response, false otherwise
    return true;
}

Заметки о реализации для Android:

Как показано в примере, необходимо вызвать либо Distribute.NotifyUpdateAction(UpdateAction.UPDATE);, либо Distribute.NotifyUpdateAction(UpdateAction.POSTPONE); если ваш обратный вызов возвращает true.

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

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

Это поведение необходимо для покрытия следующих сценариев:

  • Приложение переводится в фоновый режим (как если бы нажата кнопка HOME), а затем возобновляется в другой активности.
  • Ваше действие охватывается другим, не покидая приложение (например, щелкнув некоторые уведомления).
  • Аналогичные сценарии, описанные выше.

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

3. Выполните код, если обновления не найдены

В случаях, когда SDK проверяет обновления и не находит обновлений новее текущей версии, вызывается обратный вызов NoReleaseAvailable . Это позволяет выполнять пользовательский код в таких сценариях. Перед вызовом AppCenter.Start необходимо зарегистрировать обратный вызов, как показано в следующем примере.

// In this example OnNoReleaseAvailable is a method name in same class
Distribute.NoReleaseAvailable = OnNoReleaseAvailable;
AppCenter.Start(...);
void OnNoReleaseAvailable()
{
    AppCenterLog.Info(LogTag, "No release available callback invoked.");
}

## Enable or disable App Center Distribute at runtime

You can enable and disable App Center Distribute at runtime. If you disable it, the SDK won't provide any in-app update functionality but you can still use the Distribute service in the App Center portal.

To disable the Distribute service, use the following code:

```csharp
Distribute.SetEnabledAsync(false);

Чтобы снова включить App Center Distribute, используйте тот же API, но передайте true в качестве параметра.

Distribute.SetEnabledAsync(true);

Этот API является асинхронным, дополнительные сведения см. в руководстве по асинхронным API Центра приложений .

Вам не нужно ждать завершения этого вызова, чтобы сделать другие вызовы API (например, IsEnabledAsync) согласованными.

Состояние сохраняется в хранилище устройства во время запуска приложения.

Проверьте, включен ли App Center Distribute

Вы также можете проверить, включена ли рассылка в Центре приложений:

Distribute.IsEnabledAsync();

Этот API является асинхронным, дополнительные сведения см. в руководстве по асинхронным API Центра приложений .

Включение обновлений в приложении для отладки сборок

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

Чтобы включить обновления в приложении для отладочных сборок на Android и iOS, установите флажок "Включить распространение для отладки" в разделе "Распространение" на объекте игры с присоединённым AppCenterBehavior.

Поведение Центра приложений

В Unity отлаживаемая сборка — это сборка с проверенным параметром сборки разработки .

Выполните очистку прямо перед закрытием приложения для обновления

Замечание

Этот обратный вызов работает только в iOS.

Зарегистрируйте обратный вызов, как показано в следующем примере:

// In this example, OnWillExitApp is a method name in same class
Distribute.WillExitApp = OnWillExitApp;
void OnWillExitApp()
{
    // Perform clean up here
}

При этом будет вызываться при OnWillExitApp() закрытии распространения.

Как работают обновления в приложении

Замечание

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

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

  1. Эта функция работает только с сборками RELEASE (по умолчанию), распределенными с помощью службы распространения Центра приложений . Он не будет работать, если включена функция управляемого доступа iOS.
  2. После интеграции пакета SDK создайте версию выпуска приложения и отправьте ее в Центр приложений. Пользователи в группе рассылки уведомляются о новом выпуске по электронной почте.
  3. Когда каждый пользователь открывает ссылку по электронной почте, приложение будет установлено на своем устройстве. Важно, чтобы они использовали ссылку электронной почты для установки. Мы не поддерживаем загрузку на стороне. При скачивании приложения из ссылки пакет SDK сохраняет важные сведения из файлов cookie, чтобы проверить наличие обновлений позже, в противном случае пакет SDK не содержит эти ключевые сведения.
  4. Если приложение устанавливает для отслеживания частный режим, браузер откроется для проверки подлинности пользователя и включения обновлений в приложении. Браузер не откроется снова, пока информация об аутентификации остается действительной, даже при возврате на общедоступный режим и позднее обратно на частный. Если проверка подлинности браузера выполнена успешно, пользователь перенаправляется обратно в приложение. Если трек является общедоступным (по умолчанию), следующий шаг происходит напрямую.
  5. В новом выпуске приложения отображается диалоговое окно обновления в приложении с просьбой пользователей обновить приложение, если это:
    • iOS:
      • более высокое значение CFBundleShortVersionString или
      • равное значение CFBundleShortVersionString, но более высокое значение CFBundleVersion.
      • версии одинаковы, но уникальный идентификатор сборки отличается.
    • Андроид:
      • более высокое значение versionCode или
      • равное значение versionCode, но другое значение versionName.

Подсказка

При отправке того же .apk/.ipa во второй раз диалоговое окно не отображается, так как двоичные файлы идентичны. При отправке новой сборки с теми же свойствами версии в iOS отобразится диалоговое окно обновления. Причина этого заключается в том, что это другой двоичный файл. В Android двоичные файлы считаются одинаковыми, если оба свойства версии одинаковы.

Как протестировать обновления в приложении?

Необходимо отправить финальные сборки (которые используют модуль Distribute пакета SDK App Center) на портал App Center для тестирования обновлений в приложении, увеличивая номер версии при каждом изменении.

  1. Создайте приложение на портале Центра приложений, если вы еще не сделали этого.
  2. Создайте новую группу рассылки и присвойте ей имя.
  3. Добавьте себя (или всех пользователей, которые вы хотите включить в тест функции обновления в приложении). Используйте новый или удаленный адрес электронной почты для этого шага, который еще не использовался с этим приложением. Это гарантирует, что ваш опыт близок к опыту реальных тестировщиков.
  4. Создайте новую сборку приложения, включающую распространение в Центре приложений и содержащую логику установки, как описано ниже. Если группа является частной, не забудьте задать частную дорожку обновления в приложении перед началом использования UpdateTrack свойства.
  5. Нажмите кнопку "Распространить новый выпуск " на портале и отправьте сборку приложения.
  6. После завершения отправки нажмите кнопку "Далее " и выберите группу рассылки , созданную ранее в качестве назначения распространения этого приложения.
  7. Просмотрите распределение и распределите сборку в группу тестирования в приложении.
  8. Пользователи в этой группе получат приглашение, чтобы быть тестировщиками приложения. После принятия приглашения приложение можно скачать на портале Центра приложений с мобильного устройства. После установки обновлений в приложении можно протестировать обновления в приложении.
  9. Обновите версию вашего приложения (CFBundleShortVersionString или CFBundleVersion для iOS, versionCode для Android).
  10. Создайте версию выпуска приложения и отправьте новую сборку, как вы сделали на предыдущем шаге. Распространите по созданной ранее группе рассылки. Членам группы рассылки будет предложено ввести новую версию при следующем запуске приложения.

Подсказка

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