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

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

Цель данного алгоритма — убедить пользователей обновить свои устройства до последней версии операционной системы.

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

Производители устройств могут активировать функцию Upgrade Party для своих устройств на базе Android, отправив запрос на активацию приглашения к обновлению Android (Android Upgrade Invite) .

Настройте интерфейс приглашения к обновлению.

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

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

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

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

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

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

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

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

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

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

Макет
Рисунок 2. Макет вступительного экрана «Приглашение к обновлению».

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

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

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

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

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

Движение

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

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

Вариант 2: Отсутствие часов на главном экране

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

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

На каждом экране с описанием функций представлена ​​одна из возможностей новой операционной системы.

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

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

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

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

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

Завершающий экран подводит итог. Он сообщает пользователям, что они прошли все экраны.

Макет
Рисунок 9. Макет экрана «Приглашение к обновлению», завершающего сообщение.

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

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

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

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

Протестируйте процесс приглашения к обновлению.

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

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

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

Автоматическое уведомление, инициированное Google (только для устройств с установленным gOTA).

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

Android Broadcast — уведомление, инициированное Google (рекомендуется)

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

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

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

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

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

  • Минимальная версия SDK — 14 или выше.
  • compileSdkVersion 28 или выше
  • A usesPermission of android.permission.RECOVERY

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

Ниже приведены инструкции для приложения (или кода) от производителя, позволяющие отправить широковещательное сообщение на 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). Это используется для определения того, какой поток приглашения к обновлению будет запущен.

SDK для сервисов Play — только для запуска потоков.

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

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

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

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

  • Минимальная версия SDK — 14 или выше.
  • compileSdkVersion 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(&<#39;PATH_TO_BI>NARY/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 должен содержать инициирующий объект 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;
}

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

invokeUpgradeInvite

Task<Void> invokeUpgradeInvite();

Вызывает действие «Приглашение к обновлению». Полученный объект _Task_ указывает, произошла ли ошибка при запуске действия.

Коды ошибок

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

  • INTERNAL_ERROR — ошибка в потоке выполнения базовой логики.
  • ТАЙМ-АУТ — если запрос не удалось обработать в установленные сроки.
  • 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);
             }
           });
   }