使用 Engage SDK 與 Google TV 共用應用程式授權

本指南提供開發人員操作說明,說明如何使用 Engage SDK 與 Google TV 分享應用程式訂閱和授權資料。使用者可以在電視、行動裝置和平板電腦上,直接透過 Google TV 體驗尋找有權觀看的內容,並讓 Google TV 提供高度相關的內容建議。

必要條件

如要使用裝置授權 API,請先加入媒體動作動態消息。如果尚未完成,請完成媒體動作動態消息的啟用程序。

事前作業

開始前,請先完成下列步驟: 確認應用程式的目標 API 級別為 19 以上,才能進行這項整合

  1. com.google.android.engage 程式庫新增至應用程式:

    整合時需要使用不同的 SDK:一個用於行動應用程式,另一個用於電視應用程式。

    行動裝置適用

    
      dependencies {
        implementation 'com.google.android.engage:engage-core:1.5.5
      }
    

    電視

    
      dependencies {
        implementation 'com.google.android.engage:engage-tv:1.0.2
      }
    
  2. AndroidManifest.xml 檔案中,將 Engage 服務環境設為正式版。

    行動裝置 APK

    
    <meta-data
          android:name="com.google.android.engage.service.ENV"
          android:value="PRODUCTION">
    </meta-data>
    

    For TV apk

    
    <meta-data
        android:name="com.google.android.engage.service.ENV"
        android:value="PRODUCTION">
    </meta-data>
    
  3. 將 APK 傳送給 Google 前,請在 AndroidManifest.xml 檔案中,將參與服務環境設為正式版。 為獲得最佳效能和未來相容性,請僅在應用程式處於前景且使用者積極與其互動時發布資料,例如啟動應用程式、登入後或使用期間。不建議從背景程序發布。

  4. 在下列事件發布訂閱資訊:

    1. 使用者登入您的應用程式。
    2. 使用者切換設定檔 (如果支援設定檔)。
    3. 使用者購買新訂閱項目。
    4. 使用者升級現有訂閱方案。
    5. 使用者訂閱方案到期。

整合

本節提供必要的程式碼範例和操作說明,協助您實作 AccountProfileSubscriptionEntity,管理各種訂閱類型。

使用者帳戶和個人資料

如要在 Google TV 上使用個人化功能,請提供帳戶資訊。使用 AccountProfile 提供:

  1. 帳戶 ID:代表使用者帳戶的專屬 ID。 可以是實際帳戶 ID,也可以是經過適當模糊處理的版本。
// Set the account ID to which the subscription applies.
// Don't set the profile ID because subscription applies to account level.
val accountProfile = AccountProfile.Builder()
  .setAccountId("user_account_id")
  .setProfileId("user_profile id")
  .build();

共同的訂閱方案

如果使用者訂閱媒體供應商服務的基本方案 (例如:服務只有一個訂閱層級,可存取所有付費內容),請提供下列重要詳細資料:

  1. 訂閱類型:清楚指出使用者訂閱的具體方案。

    1. SUBSCRIPTION_TYPE_ACTIVE:使用者已啟用付費訂閱方案。
    2. SUBSCRIPTION_TYPE_ACTIVE_TRIAL:使用者有試用訂閱方案。
    3. SUBSCRIPTION_TYPE_INACTIVE:使用者有帳戶,但沒有有效訂閱方案或試用方案。
  2. 到期時間:選用時間 (以毫秒為單位)。指定訂閱方案的到期時間。

  3. 供應商套件名稱:指定處理訂閱項目的應用程式套件名稱。

範例:Sample 媒體供應商動態消息。

"actionAccessibilityRequirement": [
  {
    "@type": "ActionAccessSpecification",
    "category": "subscription",
    "availabilityStarts": "2022-06-01T07:00:00Z",
    "availabilityEnds": "2026-05-31T07:00:00Z",
    "requiresSubscription": {
    "@type": "MediaSubscription",
    // Don't match this string,
    // ID is only used to for reconciliation purpose
    "@id": "https://www.example.com/971bfc78-d13a-4419",
    // Don't match this, as name is only used for displaying purpose
    "name": "Basic common name",
    "commonTier": true
  }

以下範例會為使用者建立 SubscriptionEntity

val subscription = SubscriptionEntity
  .Builder()
  setSubscriptionType(
    SubscriptionType.SUBSCRIPTION_TYPE_ACTIVE
  )
  .setProviderPackageName("com.google.android.example")
  // Optional
  // December 30, 2025 12:00:00AM in milliseconds since epoch
  .setExpirationTimeMillis(1767052800000)
  .build();

進階版訂閱

如果應用程式提供多層級的進階訂閱方案 (包含一般層級以外的擴充內容或功能),請在「Subscription」中新增一或多項授權,代表這些方案。

這項授權具有下列欄位:

  1. ID:這項授權的必要 ID 字串。這必須與發布至 Google TV 的媒體供應商動態饋給中提供的授權 ID 之一相符 (請注意,這不是 ID 欄位)。
  2. 名稱:這是輔助資訊,用於比對授權。 雖然是選用欄位,但提供人類可讀的授權名稱,有助於開發人員和支援團隊瞭解使用者授權。例如:Sling Orange。
  3. Expiration TimeMillis:如果這項授權的到期時間與訂閱到期時間不同,可以選擇以毫秒為單位指定授權到期時間。根據預設,授權會在訂閱方案到期時失效。

以下是媒體供應商動態饋給的範例程式碼片段:

"actionAccessibilityRequirement": [
  {
    "@type": "ActionAccessSpecification",
    "category": "subscription",
    "availabilityStarts": "2022-06-01T07:00:00Z",
    "availabilityEnds": "2026-05-31T07:00:00Z",
    "requiresSubscription": {
    "@type": "MediaSubscription",
    // Don't match this string,
    // ID is only used to for reconciliation purpose
    "@id": "https://www.example.com/971bfc78-d13a-4419",

    // Don't match this, as name is only used for displaying purpose
    "name": "Example entitlement name",
    "commonTier": false,
    // match this identifier in your API. This is the crucial
    // entitlement identifier used for recommendation purpose.
    "identifier": "example.com:entitlementString1"
  }

以下範例會為已訂閱的使用者建立 SubscriptionEntity

// Subscription with entitlements.
// The entitlement expires at the same time as its subscription.
val subscription = SubscriptionEntity
  .Builder()
  .setSubscriptionType(
    SubscriptionType.SUBSCRIPTION_TYPE_ACTIVE
  )
  .setProviderPackageName("com.google.android.example")
  // Optional
  // December 30, 2025 12:00:00AM in milliseconds
  .setExpirationTimeMillis(1767052800000)
  .addEntitlement(
    SubscriptionEntitlement.Builder()
    // matches with the identifier in media provider feed
    .setEntitlementId("example.com:entitlementString1")
    .setDisplayName("entitlement name1")
    .build()
  )
  .build();
// Subscription with entitlements
// The entitement has different expiration time from its subscription
val subscription = SubscriptionEntity
  .Builder()
  .setSubscriptionType(
    SubscriptionType.SUBSCRIPTION_TYPE_ACTIVE
  )
  .setProviderPackageName("com.google.android.example")
  // Optional
  // December 30, 2025 12:00:00AM in milliseconds
  .setExpirationTimeMillis(1767052800000)
  .addEntitlement(
    SubscriptionEntitlement.Builder()
    .setEntitlementId("example.com:entitlementString1")
    .setDisplayName("entitlement name1")
    // You may set the expiration time for entitlement
    // December 15, 2025 10:00:00 AM in milliseconds
    .setExpirationTimeMillis(1765792800000)
    .build())
  .build();

訂閱連結服務套裝組合

訂閱項目通常屬於原始應用程式的媒體供應商,但只要在訂閱項目中指定連結的服務套件名稱,訂閱項目就能歸給連結的服務套件。

下列程式碼範例說明如何建立使用者訂閱項目。

// Subscription for linked service package
val subscription = SubscriptionEntity
  .Builder()
  .setSubscriptionType(
    SubscriptionType.SUBSCRIPTION_TYPE_ACTIVE
  )
  .setProviderPackageName("com.google.android.example")
  // Optional
  // December 30, 2025 12:00:00AM in milliseconds since epoch
  .setExpirationTimeMillis(1767052800000)
  .build();

此外,如果使用者訂閱了其他子公司服務,請新增其他訂閱項目,並相應設定連結的服務套件名稱。

// Subscription for linked service package
val linkedSubscription = Subscription
  .Builder()
  .setSubscriptionType(
    SubscriptionType.SUBSCRIPTION_TYPE_ACTIVE
  )
  .setProviderPackageName("linked service package name")
  // Optional
  // December 30, 2025 12:00:00AM in milliseconds since epoch
  .setExpirationTimeMillis(1767052800000)
  .addBundledSubscription(
    BundledSubscription.Builder()
      .setBundledSubscriptionProviderPackageName(
        "bundled-subscription-package-name"
      )
      .setSubscriptionType(SubscriptionType.SUBSCRIPTION_TYPE_ACTIVE)
      .setExpirationTimeMillis(111)
      .addEntitlement(
        SubscriptionEntitlement.Builder()
        .setExpirationTimeMillis(111)
        .setDisplayName("Silver subscription")
        .setEntitlementId("subscription.tier.platinum")
        .build()
      )
      .build()
  )
    .build();

你也可以視需要為連結的服務訂閱項目新增授權。

提供訂閱組合

在應用程式於前景運作時執行內容發布作業。

使用 AppEngagePublishClient 類別的 publishSubscriptionCluster() 方法發布 SubscriptionCluster 物件。

使用 isServiceAvailable 檢查服務是否可供整合。

client.publishSubscription(
  PublishSubscriptionRequest.Builder()
    .setAccountProfile(accountProfile)
    .setSubscription(subscription)
    .build();
  )

使用 setSubscription() 確認使用者只能訂閱一項服務。

使用 addLinkedSubscription()addLinkedSubscriptions() (接受連結訂閱項目清單),讓使用者擁有零或多個連結訂閱項目。

服務收到要求後,系統會建立新項目,並在 60 天後自動刪除舊項目。系統一律會使用最新項目。 如果發生錯誤,整個要求都會遭到拒絕,現有狀態則維持不變。

確保訂閱方案有效

  1. 如要在變更時立即提供更新,請在使用者訂閱狀態變更時 (例如啟用、停用、升級、降級) 呼叫 publishSubscriptionCluster()
  2. 為持續提供準確的驗證結果,請至少每月呼叫一次 publishSubscriptionCluster()

  3. 如要在標準 60 天保留期限前刪除影片探索資料,請使用 client.deleteClusters() 方法,手動從 Google TV 伺服器刪除使用者資料。這會刪除帳戶商家檔案的所有現有影片探索資料,或視指定的 DeleteReason 刪除整個帳戶的資料。

    移除使用者訂閱的程式碼片段

      // If the user logs out from your media app, you must make the following call
      // to remove subscription and other video discovery data from the current
      // google TV device.
      client.deleteClusters(
        new DeleteClustersRequest.Builder()
          .setAccountProfile(
            AccountProfile
              .Builder()
              .setAccountId()
              .setProfileId()
              .build()
          )
        .setReason(DeleteReason.DELETE_REASON_USER_LOG_OUT)
        .build()
        )
      ```
    Following code snippet demonstrates removal of user subscription
    when user revokes the consent.
    
    ```Kotlin
      // If the user revokes the consent to share across device, make the call
      // to remove subscription and other video discovery data from all google
      // TV devices.
      client.deleteClusters(
        new DeleteClustersRequest.Builder()
          .setAccountProfile(
            AccountProfile
            .Builder()
            .setAccountId()
            .setProfileId()
            .build()
          )
          .setReason(DeleteReason.DELETE_REASON_LOSS_OF_CONSENT)
          .build()
      )
      ```
    
    Following code demonstrates how to remove subscription data on user profile
    deletion.
    
    ```Kotlin
    // If the user delete a specific profile, you must make the following call
    // to remove subscription data and other video discovery data.
    client.deleteClusters(
      new DeleteClustersRequest.Builder()
      .setAccountProfile(
        AccountProfile
        .Builder()
        .setAccountId()
        .setProfileId()
        .build()
      )
      .setReason(DeleteReason.DELETE_REASON_ACCOUNT_PROFILE_DELETION)
      .build()
    )
    

測試

本節提供逐步指南,說明如何測試訂閱項目導入作業。發布前,請先確認資料準確無誤,且功能正常運作。

發布整合檢查清單

  1. 應用程式應在前景發布,且使用者正積極與應用程式互動。

  2. 發布時機:

    • 使用者首次登入。
    • 使用者變更設定檔 (如果系統支援設定檔)。
    • 使用者購買新訂閱項目。
    • 使用者升級訂閱方案。
    • 使用者訂閱方案到期。
  3. 在發布事件時,檢查應用程式是否在 logcat 中正確呼叫 isServiceAvailable()publishClusters() API。

  4. 確認驗證應用程式可顯示資料。 驗證應用程式應將訂閱項目顯示為獨立的一列。呼叫發布 API 時,資料應會顯示在驗證應用程式中。

    • 確認應用程式的 Android 資訊清單檔案中,Engage Service Flag設為正式版。
    • 安裝並開啟 Engage Verification 應用程式。
    • 如果驗證應用程式中的 isServiceAvailable 值為 false,請點選驗證應用程式中的 Toggle 按鈕,將值設為 true
    • 輸入應用程式的套件名稱,系統就會自動顯示已發布的資料。
  5. 前往應用程式並執行下列各項動作:

    • 登入。
    • 切換設定檔 (如支援)。
    • 購買新的訂閱方案。
    • 升級現有訂閱方案。
    • 讓訂閱方案到期。

驗證整合

如要測試整合結果,請使用

驗證應用程式是 Android 應用程式,可讓開發人員用來驗證整合作業是否有效。此應用程式內含可協助開發人員驗證資料和廣播意圖的功能。有助於在發布前驗證資料準確度及功能是否正常運作。

  1. 針對每個事件,檢查應用程式是否已叫用 publishSubscription API。在驗證應用程式中確認已發布的資料。 確認驗證應用程式中的所有項目都顯示綠色
  2. 如果所有實體資訊都正確,所有實體都會顯示「一切正常」的綠色勾號。

    驗證應用程式成功螢幕截圖
    圖 1. 訂閱成功
  3. 驗證應用程式也會醒目顯示問題

    驗證應用程式錯誤螢幕截圖
    圖 2.訂閱失敗
  4. 如要查看套裝訂閱方案的問題,請使用電視遙控器將焦點放在該套裝訂閱方案上,然後點選即可查看問題。你可能需要先將焦點移至該列,然後向右移動,找到「套裝訂閱」資訊卡。如圖 3 所示,問題會以紅色醒目顯示。此外,你也可以使用遙控器向下移動,查看套裝訂閱方案中的授權問題

    驗證應用程式錯誤詳細資料的螢幕截圖
    圖 3. 訂閱錯誤
  5. 如要查看授權中的問題,請使用電視遙控器將焦點放在該特定授權上,然後按一下即可查看問題。問題會以紅色醒目顯示。

    驗證應用程式錯誤螢幕截圖
    圖 4.訂閱錯誤詳細資料

下載

下載前,請先同意以下條款及細則。

條款及細則

這是《Android 軟體開發套件授權協議》

1. 簡介

1.1 Android 軟體開發套件 (在《授權協議》中稱為「SDK」,具體包含 Android 系統檔案、封裝的 API 及 Google API 外掛程式) 根據《授權協議》的條款向您授權。《授權協議》構成您與 Google 之間具法律約束效力的合約,用於規範您對 SDK 的使用行為。1.2「Android」是指裝置的 Android 軟體堆疊,根據 Android 開放原始碼計畫提供使用,網址為 https://source.android.com/,並且不時更新。1.3「相容實作」是指符合以下條件的任何 Android 裝置:(i) 遵守 Android 相容性定義說明文件,這列載於 Android 相容性網站 (https://source.android.com/compatibility) 且可能不時更新;以及 (ii) 成功通過 Android Compatibility Test Suite (CTS)。1.4「Google」是指 Google LLC,該公司根據美國德拉瓦州法律成立,並根據美國法律營運,主要營運地點位於 1600 Amphitheatre Parkway, Mountain View, CA 94043, USA。

2. 接受本《授權協議》

2.1 您必須同意《授權協議》才能使用 SDK。如果您不接受《授權協議》,則無法使用 SDK。2.2 按下接受和/或使用此 SDK 即表示您同意遵守《授權協議》的條款。2.3 如果您受到美國或其他國家/地區法律 (包括您居住或使用 SDK 時所在的國家/地區) 的法律禁止使用 SDK,則不得接受《授權協議》且不得使用 SDK。2.4 如果您代表雇主或其他實體同意接受本《授權協議》的約束,即表示您聲明及擔保已獲得完整法律授權,可約束雇主或這類實體遵守本《授權協議》。如果您沒有必要的授權,則不得代表雇主或其他實體接受《授權協議》或使用 SDK。

3. Google 提供的 SDK 授權

3.1 根據《授權協議》的條款,Google 授予您有限、全球、免權利金、不可轉讓、非專屬且不可轉授權的授權以使用 SDK,且 SDK 用途僅限於開發與 Android 實作相容的應用程式。3.2 您不得使用此 SDK 開發其他平台的應用程式 (包括不相容的 Android 實作) 或開發其他 SDK。您當然可以開發其他平台的應用程式 (包括不相容的 Android 實作),前提是 SDK 並未用於上述用途。3.3 您同意 Google 或第三方擁有 SDK 的所有法律權利、所有權和利益,包括 SDK 既有的任何智慧財產權。「智慧財產權」是指根據專利法、著作權法、營業秘密法、商標法所述之所有權利,並享有所有其他財產權利。Google 保留未授予您的所有權利。 3.4 您不得將 SDK 用於《授權協議》未明確允許的任何目的。除了適用第三方授權要求的範圍內,您不得複製 (除了備份用途)、修改、調整、轉散佈、反編譯、反向工程、反組譯 SDK 或 SDK 的任何部分,或建立其衍生作品。3.5 依據開放原始碼軟體授權所授權的 SDK 元件之使用、複製和發布,僅受該開放原始碼軟體授權條款所規範,而非《授權協議》。3.6 您同意 Google 可在未向您事先通知的情況下變更 SDK 的格式和性質,而且日後推出的 SDK 版本可能會與先前 SDK 版本開發的應用程式不相容。您同意,Google 可自行斟酌 (永久或暫時) 停止向您或所有使用者提供 SDK (或 SDK 中的任何功能),無需事先通知。 3.7《授權協議》中沒有任何內容讓您有權利使用 Google 的任何商業名稱、商標、服務商標、標誌、網域名稱或其他獨特品牌特徵。3.8 您同意不會移除、遮掩或竄改 SDK 隨附或包含的任何專屬權利聲明 (包括版權和商標聲明)。

4. 您使用 SDK 的方式

4.1 Google 同意,依據您使用 SDK 開發的任何軟體應用程式的《授權協議》,Google 並未向您 (或您的授權者) 取得任何權利、所有權或利益,包括這類應用程式既有的智慧財產權。4.2 您同意僅依據下列各項允許的目的,使用 SDK 及編寫應用程式:(a)《授權協議》以及 (b) 相關管轄區的任何適用法律、法規或一般接受的實務或準則 (包括將資料或軟體匯入及匯出美國或其他相關國家/地區的相關法律)。4.3 您同意在使用 SDK 為一般大眾使用者開發應用程式時,保護這些使用者的隱私權和法律權利。如果使用者提供您使用者名稱、密碼或其他登入資訊或個人資訊,您必須確保使用者知道這些資訊將用於您的應用程式,且您必須為這些使用者提供具有足夠法律依據的隱私權聲明和保護。如果您的應用程式會儲存使用者提供的個人資訊或機密資訊,就必須採用安全的儲存方式。如果使用者向您的應用程式提供 Google 帳戶資訊,則您的應用程式僅能基於使用者已授權的用途且存取使用者「Google 帳戶」時,使用該項資訊存取使用者的「Google 帳戶」。 4.4 您同意不會參與任何使用 SDK 的活動 (包括應用程式的開發或發布),因而乾擾、中斷、損害或以其他方式存取任何行動服務,包括幹擾、中斷、損害或存取其他電信業者網路服務。4.5 您同意,就您透過 Android 和/或應用程式建立、傳輸或顯示的任何資料、內容或資源,以及因您的行為 (包括 Google 可能遭受的損失或損害) 而引致的任何後果 (包括 Google 可能遭受的任何損失或損害),您必須自行承擔責任 (且 Google 對您或任何第三方概不負責)。

5. 您的開發人員憑證

5.1 任何由 Google 核發予您或由您自行選擇的開發人員憑證,您同意負責維護其機密性,且對於使用您開發人員憑證所開發的全部應用程式,您同意承擔所有責任。

6. 隱私權及資訊

6.1 為持續創新及改善 SDK,Google 會從軟體蒐集特定的使用統計資料,包括但不限於唯一 ID、相關 IP 位址、軟體版本編號,以及關於使用 SDK 中工具和/或服務及其使用方式的資訊。蒐集任何上述資訊前,SDK 會通知您,並徵得您的同意。如果您不同意,系統將不會蒐集這些資訊。6.2 蒐集的資料會進行匯總檢視以改善 SDK,並依據《Google 隱私權政策》處理,其內容列載於以下網址:https://policies.google.com/privacy 6.3 可能會與 Google 合作夥伴分享去識別化和匯總的資料集以改善 SDK。

7. 第三方應用程式

7.1 如果您使用 SDK 執行第三方開發的應用程式,或是存取第三方提供的資料、內容或資源,您同意 Google 對這些應用程式、資料、內容或資源概不負責。您瞭解,對於您透過這類第三方應用程式存取的所有資料、內容或資源,均由最初提供這些內容的人員全權負責,且對於您因使用或存取任何這些第三方應用程式、資料、內容或資源可能遭受的任何損失或損害,Google 概不負責。 7.2 您應瞭解,透過這類第三方應用程式呈現的資料、內容和資源,可能受到供應商 (或其代表人員或公司) 擁有的智慧財產權保護。除非相關擁有者已特別向您提供權限,否則您不得根據這些資料、內容或資源 (無論是全部或其中一部分) 修改、出租、租用、貸款、銷售、發布或建立衍生作品。7.3 您確認使用這類第三方應用程式、資料、內容或資源時,可能必須遵守您和相關第三方另外簽訂的條款。在這種情況下,《授權協議》不會影響您與這些第三方的法律關係。

8. 使用 Android API

8.1 Google Data API 8.1.1 如果您使用任何 API 從 Google 擷取資料,即表示您確認該資料可能受到 Google 擁有,或是由提供資料的一方 (或其代表人員或公司) 擁有的智慧財產權保護。您使用任何這類 API 時可能須遵守其他服務條款。除非相關《服務條款》允許,否則您不得根據此資料 (無論是全部或其中一部分) 修改、出租、租用、貸款、銷售、發布或建立衍生作品。8.1.2 如果您使用任何 API 從 Google 擷取使用者的資料,即表示您瞭解並同意只有在使用者明確同意的情況下,您才能擷取資料,而且擷取的資料僅能用於使用者已授權的有限用途。如果您使用 https://developer.android.com/reference/android/speech/RecognitionService 列載的 Android Recognition Service API (本 API 會不時更新),即表示您瞭解使用 API 時必須遵守《Data Processing Addendum for Products where Google is a Data Processor》(Google 做為資料處理者時的產品資料處理附加條款),詳情請參閱 https://privacy.google.com/businesses/gdprprocessorterms/。提醒您,本附加條款會不時更新。您按下接受後,即表示同意《Data Processing Addendum for Products where Google is a Data Processor》的條款。

9. 終止本《授權協議》

9.1《授權協議》效力將持續至您或 Google 按以下規定終止為止。9.2 如果您想終止《授權協議》,停止使用 SDK 和任何相關開發人員憑證即可。9.3 如果發生下列情況,Google 可隨時終止《授權協議》:(A) 您違反《授權協議》的任何規定;或 (B) Google 必須依法終止您的行為;或 (C) Google 向您提供 SDK 特定部分 (例如 API) 的合作夥伴終止與您或 Google 停止向您提供 SDK 的特定部分或停止向您提供 SDK 的特定部分,或者 Google 決定不再向您提供 SDK 的特定部分,或停止向您提供 SDK 的特定部分 (D)9.4 本《授權協議》終止時,您和 Google 所因此而受益的所有法律權利、義務和責任,均不適用 (或在《授權協議》有效期間持續累積) 或明確表示持續有效,則不受本「協議」影響,第 14.7 項條款亦應無限期適用。

10. 免責事項

10.1 您明確瞭解並同意,您使用 SDK 時必須自行承擔全部風險,且 SDK 是依「現況」與「適用情形」提供的服務,Google 不提供任何形式的擔保。10.2 因您使用 SDK 及任何下載或其他軟體而衍生的損害,均須由您自行承擔風險和風險,且您需承擔任何因裝置遭受或損害而遭受損害或損失。10.3 Google 明確不提供任何形式之任何擔保和條件 (包括明示或默示) 之任何擔保和條件,但不僅限於適售性、適用性及規定。

11. 責任限制

11.1 您明確說明並同意,Google、其子公司和關係企業、其授權人無法就任何直接、間接或衍生的任何責任或授權,就任何衍生情形或授權就承擔任何責任、

12. 賠償

12.1 在法律允許的最大範圍內,若您因侵害您的商標權而違反、使您的

13. 《授權協議》變更

13.1 Google 得在發布新版 SDK 時變更《授權協議》。如有變更,Google 會在提供 SDK 的網站上提供新版《授權協議》。 14.1《授權協議》構成您與 Google 之間的完整法律協議,用於規範您對 SDK 的使用行為 (排除 Google 可能根據另外撰寫的協議向您提供的任何服務),且完全取代任何您與 Google 先前就 SDK 所簽訂的協議。14.2 您同意,如果 Google 未行使或執行《授權協議》所載明 (或 Google 在任何適用法律下所擁有) 的任何法律權利或補救措施,不應構成權利之正式拋棄,且 Google 仍然可以行使這類權利或補救措施。 14.3 如果任何具管轄權的法院判定本《授權協議》的任何條款無效,則該條款將自本《授權協議》中移除,其他條款效力不受影響。「授權協議」的其餘條款仍具有有效且可執行的效力。 14.4 您瞭解並同意,Google 子公司的每位成員皆為本《授權協議》的受益第三人,且這些公司有權直接執行《授權協議》條款,並根據本《授權協議》條款的規定主張相關利益 (或有利於這些公司的權利)。除此之外的任何其他個人或公司,均非「授權協議」的第三方受益人。 14.5 出口限制。SDK 必須遵守美國出口法律和法規。您必須遵守適用於 SDK 的所有國內和國際出口法律和法規。這些法律含對目的地、終端使用者和終端用途的限制。 14.6 未經另一方的事先書面許可,您或 Google 不得轉讓或轉移《授權協議》所授予的權利,亦不得將「本協議」所賦予之責任與義務委派予他人。14.7《授權協議》以及您與 Google 在《授權協議》規定下的關係受到美國加州法律約束,但不適用美國加州法律衝突條款。您與 Google 同意服從位於加州聖克拉拉郡法院之專屬管轄權,解決任何因《授權協議》而引致之法律事務。除上述規定之外,您亦同意 Google 仍可向任何管轄區的法院申請假處分救濟 (或同類緊急法律救濟處分)。2021 年 7 月 27 日
下載

verify_app_multiplatform_public_20250602.apk