Android 업그레이드 초대

업그레이드 초대는 현재 제공되는 메이저 Android OS 업그레이드에 포함된 주요 새 기능을 보여주는 사용자 흐름입니다.

이 흐름은 사용자가 기기를 최신 OS 버전으로 업그레이드하도록 돕기 위한 것입니다.

기기에 사용자 승인을 대기 중인 OS 업그레이드가 있으면 사용자는 새로운 기능을 표시하고 업그레이드를 실행하도록 초대하는 푸시 알림을 받게 됩니다.

Android OS에서 업그레이드 초대를 사용 설정하려면 Android 업그레이드 초대 활성화 요청 양식을 사용하여 등록하세요.

업그레이드 초대 환경 맞춤설정

다음과 같은 방법으로 업그레이드 초대 환경을 맞춤설정할 수 있습니다.

  • 관련 없는 기능을 삭제합니다.
  • 텍스트 블록의 표현을 업데이트합니다.
  • 브랜드에 맞게 애니메이션, 색상, 글꼴을 수정합니다.

흐름을 맞춤설정하려면 업그레이드 초대 스타일 가이드의 가이드라인을 검토하고 Android 업그레이드 초대 활성화 요청 양식에 맞춤설정 정보를 제공하세요.

업그레이드 초대 스타일 가이드

이 스타일 가이드를 사용하여 자체 브랜드(화면, 색상, 글꼴)에 맞게 업그레이드 초대 디자인을 수정하세요. 크기와 구조를 기존 디자인과 비슷하게 유지하는 것이 좋습니다.

업그레이드 초대 흐름에는 다음과 같은 세 가지 구성요소가 있습니다.

  • 인트로 화면
  • 기능 화면
  • 아우트로 화면
그림 1. 업그레이드 초대 흐름의 세 가지 화면 유형

화면마다 표시되는 애니메이션은 각각의 기능을 설명하는 데 도움이 됩니다.

인트로 화면

인트로 화면에는 사용자를 환영하고 사용자에게 인트로 화면에 표시되는 흐름을 시작하도록 권하는 짧은 애니메이션이 포함되어 있습니다.

레이아웃
그림 2. 업그레이드 초대 인트로 화면 와이어프레임 레이아웃

기기 애니메이션은 항상 다음과 같이 구성됩니다.

  • 흰색 배경과 다채로운 색상의 도형
  • 기기 프레임
  • UI 콘텐츠
스타일

Material You 스타일을 선택하면 예시에 표시된 기본 색상과 도형을 사용할 수 있습니다.

그림 3. 업그레이드 초대 흐름의 기본 색 구성표

자체 브랜드 색상을 사용하는 경우 UI 배경에서 잘 작동하는지 확인하세요.

움직임

옵션 1: 홈 화면에 시계 표시

  1. 화면에 숫자가 들어옵니다.
  2. 숫자의 크기가 점점 줄어들면서 가운데로 이동합니다. 휴대전화 프레임이 나타납니다.
  3. 휴대전화의 크기가 줄어듭니다. 도형이 화면에 들어가기 시작합니다.
  4. 애니메이션이 완료됩니다. 도형이 계속 부드럽게 움직입니다.
그림 4. 시계가 있는 인트로 화면 애니메이션이 표시되는 업그레이드 초대 와이어프레임 레이아웃
그림 5. 시계가 있는 인트로 화면의 애니메이션 예시

옵션 2: 홈 화면에 시계 없음

  1. 휴대전화가 화면에 들어옵니다.
  2. 휴대전화의 크기가 점점 커지면서 가운데로 이동합니다. 도형이 화면에 들어가기 시작합니다.
  3. 휴대전화가 최대 크기에 도달하고 도형이 계속 움직입니다.
그림 6. 시계가 없는 인트로 화면 애니메이션이 표시되는 업그레이드 초대 와이어프레임 레이아웃
그림 7. 시계가 없는 인트로 화면의 애니메이션 예시

기능 화면

각각의 기능 화면에서는 새로운 OS의 기능이 강조 표시됩니다.

레이아웃
그림 8. 업그레이드 초대 기능 화면 와이어프레임 레이아웃

기기 애니메이션은 항상 다음과 같이 구성됩니다.

  • 다채로운 색상의 배경
  • 기기 프레임
  • UI 콘텐츠
스타일
  • UI 콘텐츠와 일반적인 디자인에 잘 어울리는 배경 색상을 선택합니다.
  • 화면 내부에 잘 읽히는 글꼴 크기를 설정합니다. 필요한 경우 큰 글꼴 크기를 설정합니다.
움직임

터치 상호작용을 포함하여 각 기능 흐름의 애니메이션을 녹화합니다. 녹화 파일을 Lottie files로 내보냅니다.

아우트로 화면

아우트로 화면에서 흐름이 완료되며 사용자에게 모든 화면을 확인했음을 나타냅니다.

레이아웃
그림 9. 업그레이드 초대 아우트로 화면 와이어프레임 레이아웃

기기 애니메이션은 항상 다음과 같이 구성됩니다.

  • 반원이 있는 배경(+ 도형 애니메이션)
  • 기기 프레임
  • UI 콘텐츠
스타일
  • UI 콘텐츠와 일반적인 디자인에 잘 어울리는 배경 색상을 선택합니다.
  • 반원 모양을 사용합니다.
움직임

다음의 표준 아우트로 화면 애니메이션 흐름을 따릅니다.

  1. 휴대전화가 약간 위로 이동합니다.
  2. 배경에 원이 표시됩니다.
  3. 도형이 휴대전화 뒤에서 나타납니다.
  4. 도형이 색종이 조각처럼 배경에서 날아갑니다.
그림 10. 업그레이드 초대 아우트로 화면 애니메이션 와이어프레임 레이아웃
그림 11. 아우트로 화면 애니메이션의 예

업그레이드 초대 흐름 테스트

  1. Android 기기에서 설정 > Google > 업그레이드 파티 디버그로 이동합니다.
  2. 관련 기기 OS의 업그레이드 초대 트리거를 준비합니다(현재 OS 버전과 테스트할 특정 업그레이드 초대 흐름에 따라 다름). 다음 중 하나를 선택합니다.
    1. 가짜 업그레이드 쓰기(현재 버전)를 클릭합니다. 예를 들어 Android 13 OS를 실행하는 경우에는 Android 13 테스트 흐름이 트리거됩니다.
    2. 대기 중인 업그레이드 쓰기(현재 버전 +1)를 클릭합니다. 예를 들어 Android 12 OS를 실행하는 경우에는 Android 13 테스트 흐름이 트리거됩니다.
    3. OS 업그레이드 보고를 클릭합니다.
  3. 수신된 알림을 클릭하거나 업그레이드 초대 열기를 클릭합니다.

업그레이드 초대 옵션 트리거

업그레이드 초대 흐름을 트리거하는 방법은 다음 세 가지입니다. 1. 자동 2. 브로드캐스트 3. 트리거된 Play 서비스 SDK

자동: Google 트리거 알림(gOTA 실행 기기 전용)

gOTA를 실행하는 OEM 기기의 경우 통합이 자동으로 실행되므로 어떤 업그레이드 초대 통합 단계도 필요하지 않습니다. 대기 중인 메이저 OS 업그레이드가 감지되면 Google Play 서비스에서 기기로 푸시 알림을 전송하고 이는 업그레이드 초대 흐름으로 이어집니다.

Android 브로드캐스트: Google 트리거 알림(권장됨)

앱 브로드캐스트는 업그레이드 초대 흐름을 통합하는 가장 간단하며 권장되는 방법입니다.

broadcast receiver를 통해 브로드캐스트 메시지를 사용하여 앱에서 업그레이드 초대 흐름을 트리거할 수 있습니다. 브로드캐스트는 Google Play 서비스에서 기기로 푸시 알림을 보내고 이는 업그레이드 초대 흐름으로 이어집니다.

브로드캐스트 기본 요건

앱을 준비하려면 다음 섹션의 단계를 완료하세요.

앱의 구성 파일이 다음 값을 사용해야 합니다.

  • minSdkVersion 14 또는 이후 버전
  • compileSdkVersion 28 또는 이후 버전
  • android.permission.RECOVERY의 usesPermission

브로드캐스트 전송

OEM 앱(또는 코드)에서 Android 브로드캐스트를 전송하여 푸시 알림을 트리거하는 방법은 아래 안내를 참고하세요.

  1. 작업과 함께 브로드캐스트를 전송합니다.

    com.google.android.gms.growth.upgradeparty.upgradeinvite.ACTION_SYSTEM_UPDATE
    
  2. 브로드캐스트에 com.google.android.gms 패키지를 추가합니다.

    com.google.android.gms
    

추가 요구사항

업그레이드 초대 흐름을 사용하면 사용자가 흐름에서 바로 OS 업그레이드를 실행할 수도 있습니다.

이를 위해서는 업데이트 다운로드를 트리거하는 업그레이드 초대 흐름에서 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 키의 값은 대기 중인 OS 버전을 나타내는 정수입니다. 이 예에서 설치될 Android 버전은 14입니다. 이는 트리거할 업그레이드 초대 흐름을 결정하는 데 사용됩니다.

Play 서비스 SDK: 흐름 트리거 전용

서드 파티 SDK를 사용하면 앱 또는 자체 OTA 알림에서 업그레이드 초대 흐름을 트리거할 수 있습니다. 서드 파티 외부 API를 사용하여 업그레이드 초대 흐름 자체를 활성화합니다. 이 방법은 권장되지 않습니다.

기본 요건

앱을 준비하려면 다음 섹션의 단계를 완료하세요.

앱의 빌드 파일이 다음 값을 사용하는지 확인합니다.

  • minSdkVersion 14 또는 이후 버전
  • compileSdkVersion 28 또는 이후 버전

앱 구성

앱을 구성하려면 다음 단계를 따르세요.

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

저장소 2. 모듈의 앱 수준 Gradle 파일(일반적으로 app/build.gradle)에 Google Growth SDK의 종속 항목을 추가합니다.

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

사용자가 업그레이드 초대 대상인지 비동기적으로 확인하는 작업을 반환합니다. 결과로 도출되는 불리언 값은 사용자가 자격요건을 충족하는지 나타냅니다.

invokeUpgradeInvite

Task<Void> invokeUpgradeInvite();

업그레이드 초대 활동을 호출합니다. 결과로 도출되는 작업 객체는 활동을 시작할 때 오류가 발생했는지 여부를 나타냅니다.

오류 코드

두 API 메서드 모두 com.google.android.gms.common.api.ApiException 유형 예외로 실패할 수 있습니다. 이 경우 호출자가 나중에 다시 시도해야 합니다. 예상되는 일반적 상태 코드는 다음과 같습니다.

  • INTERNAL_ERROR: 기본 로직 흐름에서 발생하는 오류
  • TIMEOUT: 요청을 적시에 처리할 수 없는 경우
  • API_NOT_CONNECTED: API를 사용할 수 없는 경우(즉, UpgradeParty 모듈이 아직 준비되지 않음)
  • NETWORK_ERROR: 네트워크 오류로 인해 요청을 처리할 수 없는 경우
  • DEVELOPER_ERROR: 호출 패키지에서 UpgradeParty API에 액세스할 수 없는 경우

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