Приглашение на обновление Android

Приглашение на обновление — это пользовательский поток, демонстрирующий ключевые новые функции, включенные в текущее доступное крупное обновление ОС Android.

Этот поток призван помочь убедить пользователей обновить свое устройство до последней версии ОС.

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

Чтобы включить приглашение на обновление для вашей ОС Android, зарегистрируйтесь, используя форму запроса на активацию приглашения на обновление Android .

Настройте приглашение на обновление

Вы можете настроить приглашение на обновление следующими способами:

  • Удалите ненужные функции.
  • Обновите язык в текстовых блоках.
  • Измените анимацию, цвета и шрифты в соответствии с вашим брендом.

Чтобы настроить процесс, ознакомьтесь с рекомендациями в Руководстве по стилю приглашения на обновление и включите информацию о настройке в форму запроса на активацию приглашения на обновление Android .

Руководство по стилю приглашения на обновление

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

Процесс приглашения на обновление состоит из следующих трех компонентов:

  • Вступительный экран
  • Экран функций
  • Заключительный экран
Рисунок 1. Три типа экрана в процессе приглашения на обновление

Анимация на каждом экране помогает объяснить каждую функцию.

Вступительный экран

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

Макет
Рис. 2. Каркас начального экрана приглашения на обновление

Анимация устройства всегда состоит из:

  • Белый фон и красочные формы
  • Рамка устройства
  • контент пользовательского интерфейса
Стиль

Если вы решите адаптировать стиль Material You , вы можете использовать цвета и формы по умолчанию, показанные в примере.

Рисунок 3. Цветовая схема по умолчанию для потока приглашения на обновление.

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

Движение

Вариант 1. С часами на главном экране.

  1. Числа выходят на экран.
  2. Числа перемещаются к центру, уменьшаясь в размере. Появится рамка мобильного телефона.
  3. Телефон уменьшается в размерах. Фигуры начинают появляться на экране.
  4. Анимация завершена. Фигуры продолжают плавно двигаться.
Рис. 4. Каркасный макет анимации вступительного экрана Upgrade Invite с часами.
Рисунок 5. Пример анимации заставки с часами.

Вариант 2. На главном экране нет часов.

  1. На экране появляется мобильный телефон.
  2. Телефон перемещается в центр, увеличиваясь в размерах. Фигуры начинают появляться на экране.
  3. Телефон достигает максимального размера, а фигуры продолжают двигаться.
Рис. 6. Каркасный макет анимации вступительного экрана «Приглашение на обновление» без часов.
Рисунок 7. Пример анимации заставки без часов.

Экран функций

На каждом экране функций выделена функция новой ОС.

Макет
Рис. 8. Каркас экрана функций приглашения на обновление.

Анимация устройства всегда состоит из:

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

Запишите анимацию работы каждой функции, включая сенсорное взаимодействие. Экспортируйте записи как файлы Lottie .

Заключительный экран

Заключительный экран завершает поток. Это указывает пользователям, что они прошли все экраны.

Макет
Рис. 9. Каркас заключительного экрана приглашения на обновление.

Анимация устройства всегда состоит из:

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

Следуйте стандартной последовательности анимации заставки:

  1. Мобильный телефон немного приподнимается.
  2. На заднем плане появится круг.
  3. Фигуры появляются из-за мобильного телефона.
  4. Фигуры вылетают из фона, как конфетти.
Рисунок 10. Каркасный макет анимации завершающего экрана приглашения на обновление.
Рисунок 11. Пример анимации завершающего экрана.

Проверьте процесс приглашения на обновление

  1. На устройстве Android выберите « Настройки» > «Google» > «Отладка Upgrade Party» .
  2. Подготовьте триггер для приглашения на обновление для соответствующей ОС устройства (в зависимости от текущей версии ОС и конкретного потока приглашения на обновление для тестирования. Либо:
    1. Нажмите «Написать фальшивое обновление (текущая версия)» . (например, если вы используете ОС Android 13, это запустит поток тестирования Android 13)
    2. Нажмите Записать ожидающее обновление (текущая версия + 1) . (например, если вы используете ОС Android 12, это запустит поток тестирования Android 13)
    3. Нажмите «Сообщить об обновлении ОС».
  3. Либо щелкните полученное уведомление, либо нажмите «Открыть приглашение на обновление».

Параметры срабатывания приглашения на обновление

Существует 3 различных способа запуска процесса приглашения на обновление: 1. автоматический 2. широковещательный 3. запуск Play Services SDK

Автоматически — уведомление по запросу Google (только для устройств, работающих под управлением gOTA)

Для OEM-устройств, работающих под управлением gOTA, интеграция происходит автоматически, и никаких действий по интеграции с приглашением на обновление не требуется. Как только будет обнаружено ожидающее серьезное обновление ОС, на устройство будет отправлено push-уведомление от служб Google Play, что приведет к потоку приглашения на обновление.

Android Broadcast – уведомление от Google (рекомендуется)

Трансляция приложения — это самый простой и рекомендуемый способ интеграции процесса приглашения на обновление.

Приемник широковещательной рассылки позволяет вам запускать поток приглашений на обновление из вашего приложения с помощью широковещательного сообщения. Трансляция отправляет на устройство push-уведомление от сервисов Google Play, что приводит к потоку приглашения на обновление.

Предварительные условия трансляции

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

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

  • MinSdkVersion 14 или выше.
  • КомпиляцияSdkVersion 28 или выше.
  • Использование разрешения android.permission.RECOVERY

Отправить трансляцию

Ниже приведены инструкции для OEM-приложения (или кода) по отправке широковещательной рассылки Android для запуска push-уведомления:

  1. Отправьте трансляцию с действием.

    com.google.android.gms.growth.upgradeparty.upgradeinvite.ACTION_SYSTEM_UPDATE
    
  2. Добавьте в трансляцию пакет com.google.android.gms .

    com.google.android.gms
    

Дополнительные требования

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

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

Пример использования трансляции

См. следующий пример трансляции приложения:

Context context = getApplicationContext();
Intent upgradeInviteIntent = new Intent()
  .setAction( "com.google.android.gms.growth.upgradeparty.upgradeinvite.ACTION_SYSTEM_UPDATE")
  .setPackage("com.google.android.gms");
  .putExtra("com.google.android.gms.growth.upgradeparty.upgradeinvite.EXTRA_PENDING_ANDROID_OS_VERSION_NUMBER", 14);

context.sendBroadcast(updateIntent);

Значение ключа EXTRA_PENDING_ANDROID_OS_VERSION_NUMBER — целое число, указывающее ожидаемую версию ОС (в этом примере устанавливаемая версия Android — 14). Это используется для определения того, какой поток приглашений на обновление будет запущен.

Play Services SDK – только запуск потока

Сторонний SDK позволяет запускать поток приглашений на обновление из вашего приложения или собственных OTA-уведомлений. Используйте сторонний внешний API, чтобы активировать сам процесс приглашения на обновление. Этот метод менее рекомендуется.

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

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

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

  • MinSdkVersion 14 или выше.
  • КомпиляцияSdkVersion 28 или выше.

Настройте свое приложение

Чтобы настроить приложение:

1. Extract the library from the provided .zip file, and place it in your

хранилище. 2. Добавьте зависимости для Google Growth SDK в файл Gradle уровня приложения вашего модуля, обычно app/build.gradle :

   dependencies {
    implementation files('<PATH_TO_BINARY>/play-services-growth-16.1.0-eap04.aar')
   }
  1. Чтобы предоставить зависимости клиента, включите следующие библиотеки:

    com.google.android.gms:play-services-base:18.0.1
    com.google.android.gms:play-services-basement:18.0.0
    com.google.android.gms:play-services-tasks:18.0.1
    

Инициализация API

  1. Чтобы инициализировать клиент, используйте класс UpgradeParty:

    import com.google.android.gms.growth.UpgradeParty;
    UpgradeParty.getClient(activity);
    
  2. Параметр активности должен быть инициирующим объектом Activity.

API-функции

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

isEligibleForUpgradeInvite

import com.google.android.gms.growth.UpgradeInviteEligibilityParams;

Task<Boolean> isEligibleForUpgradeInvite(UpgradeInviteEligibilityParams params);

/** Contains parameters for the eligibility query. */
class UpgradeInviteEligibilityParams {


/** Integer indicating the pending OS version (in this example, the Android version to be installed is 14). This is used to determine which Upgrade Invite flow will be triggered. */
  int pendingAndroidOsVersionNumber;
}

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

вызватьUpgradeInvite

Task<Void> invokeUpgradeInvite();

Вызывает действие приглашения на обновление. Результирующий объект _Task _object указывает, произошла ли ошибка при запуске действия.

Коды ошибок

Оба метода API могут завершиться ошибкой, за исключением типа com.google.android.gms.common.api.ApiException . В таких случаях ожидается, что вызывающий абонент повторит попытку позже. Ожидаемые общие коды состояния включают:

  • INTERNAL_ERROR — для любой ошибки в потоке базовой логики.
  • TIMEOUT – если запрос не удалось обработать своевременно
  • API_NOT_CONNECTED — когда API недоступен (то есть модуль UpgradeParty еще не готов)
  • NETWORK_ERROR — запрос не удалось обработать из-за ошибок сети.
  • DEVELOPER_ERROR — вызывающему пакету не разрешен доступ к API UpgradeParty.

Пример использования SDK

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import com.google.android.gms.growth.UpgradeParty;
import com.google.android.gms.growth.UpgradePartyClient;

public class SampleActivity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   final UpgradePartyClient client = UpgradeParty.getClient(this);

   // Hide the invocation button initially
   View startUpgradeInviteButton = findViewById(R.id.__some_button__);
   startUpgradeInviteButton.setVisibility(View.GONE);

   // Register an onClick handler to invoke the Upgrade Party Activity
   startUpgradeInviteButton
       .setOnClickListener(
           view -> {
             client
                 .invokeUpgradeInvite()
                 .addOnCompleteListener(
                     task -> {
                       if (!task.isSuccessful()) {
                         // Do something with error, see task.getException()
                       }
                     });
           });
   }

   // Check if eligible for an Upgrade Party
   client
       .isEligibleForUpgradeInvite()
       .addOnCompleteListener(
           task -> {
             if (!task.isSuccessful()) {
               // Do something with error, see task.getException()
             } else {
                  // Show/Hide invocation button, based on the result
                  int visibility = 
                        task.getResult() ? View.VISIBLE : View.GONE;
                  startUpgradeInviteButton.setVisibility(visibility);
             }
           });
   }