Android升級邀請

升級邀請是一個使用者流程,展示目前可用的主要 Android 作業系統升級中包含的關鍵新功能。

該流程旨在幫助說服用戶將其設備升級到最新的作業系統版本。

一旦裝置的作業系統升級等待用戶批准,用戶就會收到一條推播通知,顯示新功能並邀請他們執行升級。

若要為您的 Android 作業系統啟用升級邀請,請使用「請求啟動 Android 升級邀請」表單進行註冊。

自訂升級邀請體驗

您可以透過以下方式自訂升級邀請體驗:

  • 刪除不相關的功能。
  • 更新文字區塊中的語言。
  • 修改動畫、顏色和字體以配合您的品牌。

若要自訂流程,請查看升級邀請樣式指南中的指南,並在請求啟動 Android 升級邀請表單中包含您的自訂資訊。

升級邀請風格指南

使用此風格指南修改升級邀請外觀以適合您自己的品牌(螢幕、顏色、字體)。我們強烈建議保持尺寸和結構接近原始設計。

升級邀請流程包含以下三個組成部分:

  • 介紹畫面
  • 特色畫面
  • 片尾畫面
圖 1.升級邀請流程中的三種畫面類型

每個螢幕上的動畫有助於解釋每個功能。

介紹畫面

介紹畫麵包含一個簡短的動畫,歡迎使用者並鼓勵他們開始介紹螢幕上顯示的流程。

佈局
圖 2.升級邀請介紹畫面的線框佈局

設備動畫始終包含:

  • 白色背景和彩色形狀
  • 設備框架
  • 使用者介面內容
造型

如果您選擇調整Material You樣式,則可以使用範例中顯示的預設顏色和形狀。

圖 3.升級邀請流程的預設配色。

如果您使用自己的品牌顏色,請確保它與 UI 背景配合良好。

運動

選項 1:在主畫面上顯示時鐘

  1. 數字進入螢幕。
  2. 數字向中心移動,同時尺寸縮小。出現手機邊框。
  3. 手機尺寸變小。形狀開始進入螢幕。
  4. 動畫完成。形狀不斷輕輕移動。
圖 4.帶有時鐘的升級邀請介紹螢幕動畫的線框佈局。
圖 5.帶有時鐘的介紹畫面的範例動畫。

選項 2:主螢幕上沒有時鐘

  1. 手機進入畫面。
  2. 手機向中心移動,同時尺寸增大。形狀開始進入螢幕。
  3. 手機達到最大尺寸,形狀不斷移動。
圖 6.不帶時鐘的升級邀請介紹螢幕動畫的線框佈局。
圖 7.沒有時鐘的介紹畫面的範例動畫。

特色畫面

每個功能畫面都會突出顯示新作業系統中的一個功能。

佈局
圖 8.升級邀請功能畫面的線框佈局。

設備動畫始終包含:

  • 多彩背景
  • 設備框架
  • 使用者介面內容
造型
  • 選擇與 UI 內容和整體外觀相符的背景顏色。
  • 在螢幕內,設定易於辨認的字體大小。如果需要,請設定更大的字體大小。
運動

記錄每個功能流程的動畫,包括觸控互動。將錄音匯出為Lottie 檔

片尾畫面

結尾畫面完成了流程。它向用戶表明他們已經瀏覽了所有螢幕。

佈局
圖 9.升級邀請結尾畫面的線框版面。

設備動畫始終包含:

  • 背景上的半圓(加上動畫形狀)
  • 設備框架
  • 使用者介面內容
造型
  • 選擇與 UI 內容和整體外觀相符的背景顏色。
  • 使用半圓形。
運動

遵循標準的片尾螢幕動畫流程:

  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. Play Services SDK 觸發

自動 - Google 觸發通知(僅適用於運行 gOTA 的裝置)

對於運行 gOTA 的 OEM 設備,整合是自動的,不需要升級邀請整合步驟。一旦偵測到待處理的主要作業系統升級,就會從 Google Play 服務向裝置發送推播通知,從而進入升級邀請流程。

Android Broadcast - Google 觸發通知(推薦)

應用程式廣播是整合升級邀請流程的最簡單且推薦的方式。

廣播接收器可讓您使用廣播訊息從應用程式觸發升級邀請流程。該廣播從 Google Play 服務向裝置發送推播通知,導致升級邀請流程。

廣播先決條件

要準備您的應用程序,請完成以下部分中的步驟。

確保您的應用程式的設定檔使用以下值:

  • minSdkVersion 為 14 或更高
  • 28 或更高的compileSdkVersion
  • 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
    

其他要求

升級邀請流程還允許使用者直接從流程中執行作業系統升級。

為此,請公開 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 服務 SDK - 僅串流觸發

第三方 SDK 可讓您從您的應用程式或您自己的 OTA 通知觸發升級邀請流程。使用第三方外部 API 啟動升級邀請流程本身。這種方法不太推薦。

先決條件

要準備您的應用程序,請完成以下部分中的步驟。

確保您的應用程式的建置檔案使用以下值:

  • minSdkVersion 為 14 或更高
  • 28 或更高的compileSdkVersion

配置您的應用程式

要配置您的應用程式:

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 參數應該是啟動 Activity 物件。

API函數

產生的 UpgradePartyClient 公開以下功能。

是否有資格升等邀請

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

傳回一個非同步驗證使用者是否有資格獲得升級邀請的任務。產生的布林值指示使用者是否符合資格。

調用升級邀請

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 - 不允許呼叫包存取 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);
             }
           });
   }