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

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

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

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

Производители устройств могут включить Upgrade Party для своих устройств на базе ОС Android, отправив форму «Запрос на активацию приглашения на обновление Android» .

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

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

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

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

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

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

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

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

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

Вводный экран

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

Макет
Рисунок 2. Каркасная схема для вводного экрана Upgrade Invite

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

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

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

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

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

Движение

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

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

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

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

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

Каждый экран функций отображает определенную функцию новой ОС.

Макет
Рисунок 8. Каркасная схема для экранов функции «Приглашение на обновление».

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

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

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

Экран Outro

Экран outro завершает поток. Он показывает пользователям, что они прошли все экраны.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • MinSdkVersion 14 или выше
  • compileSdkVersion версии 28 или выше
  • A использует разрешение 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). Это используется для определения того, какой поток Upgrade Invite будет запущен.

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

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

Предпосылки

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

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

  • MinSdkVersion 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('<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. Параметром действия должен быть инициирующий объект действия.

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;
}

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

invokeUpgradeInvite

Task<Void> invokeUpgradeInvite();

Вызывает Upgrade Invite Activity. Результирующий _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);
             }
           });
   }