Engage SDK for TV の統合ガイド

「続きを見る」では、継続クラスタを活用して、複数のアプリの未視聴の動画や、同じテレビ シーズンの次に視聴するエピソードを 1 つの UI グループに表示します。この継続クラスタでエンティティをハイライト表示できます。このガイドでは、Engage SDK を使用して「続きを見る」機能でユーザー エンゲージメントを高める方法について説明します。

事前作業

始める前に、次の手順を完了します。

  1. ターゲット API 19 以上に更新する

  2. アプリに com.google.android.engage ライブラリを追加します。

    統合で使用する SDK は、モバイルアプリ用とテレビアプリ用の 2 つに分かれています。

    モバイル

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

    テレビ

    
      dependencies {
        implementation 'com.google.android.engage:engage-tv:1.0.2
      }
    
  3. AndroidManifest.xml ファイルで Engage サービスの環境を本番環境に設定します。

    モバイル

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

    テレビ

    
    <meta-data
        android:name="com.google.android.engage.service.ENV"
        android:value="PRODUCTION" />
    
  4. テレビ APK の WRITE_EPG_DATA の権限を追加

    <uses-permission android:name="com.android.providers.tv.permission.WRITE_EPG_DATA" />
    
  5. androidx.work などのバックグラウンド サービスを使用して、信頼性の高いコンテンツ公開をスケジュール設定します。

  6. シームレスな視聴エクスペリエンスを提供するため、次のイベントが発生したときに視聴中のコンテンツのデータを公開します。

    1. 初回ログイン: ユーザーが初めてログインしたときに、視聴履歴がすぐに利用できるようにデータを公開します。
    2. プロファイルの作成または切り替え(マルチ プロファイル アプリ): アプリが複数のプロファイルをサポートしている場合は、ユーザーがプロファイルを作成または切り替えたときにデータを公開します。
    3. 動画再生の中断: ユーザーが中断したところから再開できるように、動画を一時停止または停止したとき、または再生中にアプリが終了したときにデータを公開します。
    4. [続きを見る] トレイの更新(サポートされている場合): ユーザーが [続きを見る] トレイからアイテムを削除した場合は、更新されたデータを公開してその変更を反映します。
    5. 動画視聴完了:
      1. 映画の場合は、視聴済みの映画を [続きを見る] トレイから削除します。映画がシリーズの一部である場合は、次の映画を追加してユーザーの関心を維持します。
      2. エピソードの場合は、視聴済みのエピソードを削除し、シリーズの次のエピソード(利用可能な場合)を追加して、視聴を継続するよう促します。

統合

AccountProfile

Google TV でパーソナライズされた「続きを見る」機能を利用するには、アカウントとプロフィール情報を提供します。AccountProfile を使用して、次の情報を指定します。

  1. アカウント ID: アプリケーション内のユーザーのアカウントを表す一意の識別子。実際のアカウント ID または適切に難読化されたバージョンを指定できます。

  2. プロフィール ID(省略可): アプリケーションが 1 つのアカウント内で複数のプロフィールをサポートしている場合は、特定のユーザー プロフィールの固有の識別子(実在の ID または難読化された ID)を指定します。

// If your app only supports account
val accountProfile = AccountProfile.Builder()
    .setAccountId("your_users_account_id")
    .build()

// If your app supports both account and profile
val accountProfile = AccountProfile.Builder()
    .setAccountId("your_users_account_id")
    .setProfileId("your_users_profile_id")
    .build()

エンティティを作成する

この SDK では、各アイテムタイプを表すさまざまなエンティティを定義しています。継続クラスタは次のエンティティをサポートしています。

  1. MovieEntity
  2. TvEpisodeEntity
  3. LiveStreamingVideoEntity
  4. VideoClipEntity

これらのエンティティのプラットフォーム固有の URI とポスター画像を指定します。

また、まだ作成していない場合は、Android TV、Android、iOS などの各プラットフォームの再生 URI を作成します。そのため、ユーザーが各プラットフォームで視聴を続行すると、アプリはターゲット設定された再生 URI を使用して動画コンテンツを再生します。

// Required. Set this when you want continue watching entities to show up on
// Google TV
val playbackUriTv = PlatformSpecificUri.Builder()
    .setPlatformType(PlatformType.TYPE_ANDROID_TV)
    .setActionUri(Uri.parse("https://www.example.com/entity_uri_for_tv"))
    .build()

// Required. Set this when you want continue watching entities to show up on
// Google TV Android app, Entertainment Space, Playstore Widget
val playbackUriAndroid = PlatformSpecificUri.Builder()
    .setPlatformType(PlatformType.TYPE_ANDROID_MOBILE)
    .setActionUri(Uri.parse("https://www.example.com/entity_uri_for_android"))
    .build()

// Optional. Set this when you want continue watching entities to show up on
// Google TV iOS app
val playbackUriIos = PlatformSpecificUri.Builder()
    .setPlatformType(PlatformType.TYPE_IOS)
    .setActionUri(Uri.parse("https://www.example.com/entity_uri_for_ios"))
    .build()

val platformSpecificPlaybackUris =
    Arrays.asList(playbackUriTv, playbackUriAndroid, playbackUriIos)

ポスター画像には、URI とピクセル サイズ(高さと幅)が必要です。複数のポスター画像を提供してさまざまなフォーム ファクタをターゲットに設定しますが、特に Google のエンターテイメント スペース内で「視聴を続ける」エンティティが正しく表示されるように、すべてのアスペクト比が 16:9 で、高さが 200 ピクセル以上であることを確認してください。高さが 200 ピクセル未満の画像は表示されないことがあります。

val images = Arrays.asList(
    Image.Builder()
        .setImageUri(Uri.parse("http://www.example.com/entity_image1.png"))
        .setImageHeightInPixel(300)
        .setImageWidthInPixel(169)
        .build(),
    Image.Builder()
        .setImageUri(Uri.parse("http://www.example.com/entity_image2.png"))
        .setImageHeightInPixel(640)
        .setImageWidthInPixel(360)
        .build()
    // Consider adding other images for different form factors
)
MovieEntity

この例は、必要なすべてのフィールドを含む MovieEntity を作成する方法を示しています。

val movieEntity = MovieEntity.Builder()
   .setWatchNextType(WatchNextType.TYPE_CONTINUE)
   .setName("Movie name")
   .addPlatformSpecificPlaybackUri(platformSpecificPlaybackUris)
   .addPosterImages(images)
   // Timestamp in millis for sample last engagement time 12/1/2023 00:00:00
   .setLastEngagementTimeMillis(1701388800000)
   // Suppose the duration is 2 hours, it is 72000000 in milliseconds
   .setDurationMills(72000000)
   // Suppose last playback offset is 1 hour, 36000000 in milliseconds
   .setLastPlayBackPositionTimeMillis(36000000)
   .build()

ジャンルやコンテンツのレーティングなどの詳細情報を提供することで、Google TV はコンテンツをよりダイナミックに紹介し、適切な視聴者と結び付けることができます。

val genres = Arrays.asList("Action", "Science fiction")
val rating1 = RatingSystem.Builder().setAgencyName("MPAA").setRating("PG-13").build()
val contentRatings = Arrays.asList(rating1)
val movieEntity = MovieEntity.Builder()
    ...
    .addGenres(genres)
    .addContentRatings(contentRatings)
    .build()

有効期限を短く指定しない限り、エンティティは自動的に 60 日間利用可能になります。このデフォルト期間より前にエンティティを削除する必要がある場合にのみ、カスタムの有効期限を設定します。

// Set the expiration time to be now plus 30 days in milliseconds
val expirationTime = DisplayTimeWindow.Builder()
    .setEndTimestampMillis(now().toMillis()+2592000000).build()
val movieEntity = MovieEntity.Builder()
    ...
    .addAvailabilityTimeWindow(expirationTime)
    .build()
TvEpisodeEntity

この例では、必要なすべてのフィールドを含む TvEpisodeEntity を作成する方法を示します。

val tvEpisodeEntity = TvEpisodeEntity.Builder()
    .setWatchNextType(WatchNextType.TYPE_CONTINUE)
    .setName("Episode name")
    .addPlatformSpecificPlaybackUri(platformSpecificPlaybackUris)
    .addPosterImages(images)
    // Timestamp in millis for sample last engagement time 12/1/2023 00:00:00
    .setLastEngagementTimeMillis(1701388800000)
    .setDurationMills(72000000) // 2 hours in milliseconds
    // 45 minutes and 15 seconds in milliseconds is 2715000
    .setLastPlayBackPositionTimeMillis(2715000)
    .setEpisodeNumber("2")
    .setSeasonNumber("1")
    .setShowTitle("Title of the show")
    .build()

エピソード番号文字列("2" など)とシーズン番号文字列("1" など)は、[続きを見る] カードに表示される前に適切な形式に展開されます。数値文字列にする必要があります。「e2」、「episode 2」、「s1」、「season 1」は使用しないでください。

特定のテレビ番組にシーズンが 1 つしかない場合は、シーズン番号を 1 に設定します。

Google TV で視聴者がコンテンツを見つけやすくなるよう、ジャンル、コンテンツのレーティング、利用可能な時間帯などの追加データを提供することを検討してください。これらの詳細情報は、表示とフィルタリング オプションを強化できます。

val genres = Arrays.asList("Action", "Science fiction")
val rating1 = RatingSystem.Builder().setAgencyName("MPAA").setRating("PG-13").build()
val contentRatings = Arrays.asList(rating1)
val tvEpisodeEntity = TvEpisodeEntity.Builder()
    ...
    .addGenres(genres)
    .addContentRatings(contentRatings)
    .setSeasonTitle("Season Title")
    .setShowTitle("Show Title")
    .build()
VideoClipEntity

次に、すべての必須フィールドを含む VideoClipEntity を作成する例を示します。

VideoClipEntity は、YouTube 動画などのユーザー作成クリップを表します。

val videoClipEntity = VideoClipEntity.Builder()
    .setPlaybackUri(Uri.parse("https://www.example.com/uri_for_current_platform")
    .setWatchNextType(WatchNextType.TYPE_CONTINUE)
    .setName("Video clip name")
    .addPlatformSpecificPlaybackUri(platformSpecificPlaybackUris)
    .addPosterImages(images)
    // Timestamp in millis for sample last engagement time 12/1/2023 00:00:00
    .setLastEngagementTimeMillis(1701388800000)
    .setDurationMills(600000) //10 minutes in milliseconds
    .setLastPlayBackPositionTimeMillis(300000) //5 minutes in milliseconds
    .addContentRating(contentRating)
    .build()

必要に応じて、作成者、作成者の画像、作成時間(ミリ秒単位)、利用可能な時間枠を設定できます。

LiveStreamingVideoEntity

次に、すべての必須フィールドを含む LiveStreamingVideoEntity を作成する例を示します。

val liveStreamingVideoEntity = LiveStreamingVideoEntity.Builder()
    .setPlaybackUri(Uri.parse("https://www.example.com/uri_for_current_platform")
    .setWatchNextType(WatchNextType.TYPE_CONTINUE)
    .setName("Live streaming name")
    .addPlatformSpecificPlaybackUri(platformSpecificPlaybackUris)
    .addPosterImages(images)
    // Timestamp in millis for sample last engagement time 12/1/2023 00:00:00
    .setLastEngagementTimeMillis(1701388800000)
    .setDurationMills(72000000) //2 hours in milliseconds
    .setLastPlayBackPositionTimeMillis(36000000) //1 hour in milliseconds
    .addContentRating(contentRating)
    .build()

必要に応じて、ライブ配信エンティティの開始時間、配信者、配信者アイコン、利用可能時間枠を設定できます。

属性と要件の詳細については、API リファレンスをご覧ください。

継続クラスタのデータを提供する

AppEngagePublishClient は、継続性クラスタの公開を行います。publishContinuationCluster() メソッドを使用して ContinuationCluster オブジェクトを公開します。

まず、isServiceAvailable() を使用して、サービスを統合に使用できるかどうかを確認する必要があります。

client.publishContinuationCluster(
    PublishContinuationClusterRequest
        .Builder()
        .setContinuationCluster(
            ContinuationCluster.Builder()
                .setAccountProfile(accountProfile)
                .addEntity(movieEntity1)
                .addEntity(movieEntity2)
                .addEntity(tvEpisodeEntity1)
                .addEntity(tvEpisodeEntity2)
                .setSyncAcrossDevices(true)
                .build()
        )
        .build()
)

サービスがリクエストを受信すると、1 つのトランザクション内で次のアクションが行われます。

  • デベロッパー パートナーが提供した既存の ContinuationCluster データが削除されます。
  • リクエストのデータが解析されて、更新された ContinuationCluster に保存されます。

エラーが発生した場合は、リクエスト全体が拒否され、それまでの状態が維持されます。

公開 API は既存のコンテンツを置き換える upsert API です。ContinuationCluster 内の特定のエンティティを更新する必要がある場合は、すべてのエンティティを再度公開する必要があります。

ContinuationCluster データは、成人アカウントに対してのみ提供する必要があります。AccountProfile が成人に属している場合にのみ公開します。

クロスデバイスの同期

SyncAcrossDevices フラグは、ユーザーの ContinuationCluster データをテレビ、スマートフォン、タブレットなどのデバイス間で同期するかどうかを制御します。デバイス間の同期はデフォルトで無効になっています。

値:

  • true: ContinuationCluster データは、シームレスな視聴体験を実現するために、ユーザーのすべてのデバイスで共有されます。デバイスをまたいで快適に利用するには、このオプションを強くおすすめします。
  • false: ContinuationCluster データは現在のデバイスに限定されます。

メディア アプリは、デバイス間の同期を有効/無効にするための明確な設定を提供する必要があります。ユーザーにメリットを説明し、ユーザーの設定を 1 回保存して、それに応じて publishContinuationCluster に適用します。

// Example to allow cross device syncing.
client.publishContinuationCluster(
    PublishContinuationClusterRequest
        .Builder()
        .setContinuationCluster(
            ContinuationCluster.Builder()
                .setAccountProfile(accountProfile)
                .setSyncAcrossDevices(true)
                .build()
        )
        .build()
)

クロスデバイス機能を最大限に活用するには、アプリがユーザーの同意を取得していることを確認し、SyncAcrossDevicestrue に設定します。これにより、コンテンツをデバイス間でシームレスに同期できるようになり、ユーザー エクスペリエンスの向上とエンゲージメントの増加につながります。たとえば、この機能を実装したパートナーは、コンテンツが複数のデバイスで表示されるようになったため、「視聴を続ける」のクリック数が 40% 増加しました。

動画の検出データを削除する

標準の 60 日間の保持期間より前に Google TV サーバーからユーザーのデータを手動で削除するには、client.deleteClusters() メソッドを使用します。リクエストを受信すると、サービスはアカウント プロファイルまたはアカウント全体の既存の動画検出データをすべて削除します。

DeleteReason 列挙型は、データ削除の理由を定義します。次のコードは、ログアウト時に視聴を再開するデータを削除します。


// If the user logs out from your media app, you must make the following call
// to remove continue watching data from the current google TV device,
// otherwise, the continue watching data will persist on the current
// google TV device until 60 days later.
client.deleteClusters(
    DeleteClustersRequest.Builder()
        .setAccountProfile(AccountProfile())
        .setReason(DeleteReason.DELETE_REASON_USER_LOG_OUT)
        .setSyncAcrossDevices(true)
        .build()
)

テスト

検証用アプリを使用して、Engage SDK の統合が正しく機能していることを確認します。は、データを検証し、ブロードキャスト インテントが適切に処理されていることを確認するためのツールを提供します。

公開 API を呼び出した後、検証アプリでデータが正しく公開されていることを確認します。継続クラスタは、アプリのインターフェース内で個別の行として表示されます。

  • アプリの Android マニフェスト ファイルで、非本番環境ビルドに対してのみ Engage Service Flag を設定します。
  • Engage Verify アプリをインストールして開く
  • isServiceAvailablefalse の場合は、[切り替え] ボタンをクリックして有効にします。
  • アプリのパッケージ名を入力すると、公開を開始したときに公開されたデータが自動的に表示されます。
  • アプリで次のアクションをテストします。
    • ログインします。
    • プロファイルを切り替えます(該当する場合)。
    • 動画の再生を開始して一時停止したり、ホームページに戻ったりします。
    • 動画の再生中にアプリを閉じます。
    • [続きを見る] 行からアイテムを削除します(サポートされている場合)。
  • 各アクションの後、アプリが publishContinuationClusters API を呼び出し、検証アプリにデータが正しく表示されていることを確認します。
  • 検証アプリには、正しく実装されたエンティティに対して緑色の「すべて良好」チェックが表示されます。

    確認アプリの成功画面のスクリーンショット
    図 1. Verification App Success
  • 検証アプリは、問題のあるエンティティを報告します。

    確認アプリのエラーのスクリーンショット
    図 2. Verification App Error(確認アプリのエラー)
  • エラーのあるエンティティのトラブルシューティングを行うには、テレビのリモコンを使用して検証アプリでエンティティを選択してクリックします。具体的な問題が表示され、赤色でハイライト表示されるので、確認できます(下の例を参照)。

    Verification App のエラーの詳細
    図 3. Verification App Error Details(確認アプリのエラーの詳細)

REST API

Engage SDK は、iOS や Roku TV などの Android 以外のプラットフォームで一貫した視聴継続体験を提供するための REST API を提供します。この API を使用すると、デベロッパーは Android 以外のプラットフォームから、オプトインしたユーザーの [続きを見る] ステータスを更新できます。

前提条件

  • まず、オンデバイス Engage SDK ベースの統合を完了する必要があります。この重要なステップでは、Google のユーザー ID とアプリの AccountProfile の間に必要な関連付けを確立します。
  • API アクセスと認証: Google Cloud プロジェクトで API を表示して有効にするには、許可リスト登録プロセスを行う必要があります。すべての API リクエストで認証が必要です。

アクセスを取得する

Google Cloud コンソールで API を表示して有効にするには、アカウントを登録する必要があります。

  1. Google Workspace お客様 ID を取得できる必要があります。利用できない場合は、Google Workspace と、API の呼び出しに使用する Google アカウントを設定する必要があります。
  2. Google Workspace に関連付けられているメールアドレスを使用して、Google Cloud コンソールでアカウントを設定します。
  3. 新しいプロジェクトを作成する
  4. API 認証用のサービス アカウントを作成します。サービス アカウントを作成すると、次の 2 つの項目が作成されます。
    • サービス アカウント ID。
    • サービス アカウント キーを含む JSON ファイル。このファイルは安全に保管してください。後で API に対してクライアントを認証するために必要になります。
  5. ワークスペースと関連付けられた Google アカウントで REST API を使用できるようになりました。変更が伝播されると、サービス アカウントから API を呼び出す準備ができたかどうかを通知します。
  6. 委任された API 呼び出しを行う準備をするには、こちらの手順に沿って操作します。

継続クラスタを公開する

動画検出データを公開するには、次の構文を使用して publishContinuationCluster API に POST リクエストを実行します。

https://tvvideodiscovery.googleapis.com/v1/packages/{package_name}/accounts/{account_id}/profiles/{profile_id}/publishContinuationCluster

ここで

  • package_name: メディア プロバイダのパッケージ名
  • accountId: システム内のユーザー アカウントの一意の ID。デバイス上のパスで使用される accountId と一致する必要があります。
  • profileId: システム内のアカウント内のユーザー プロファイルの一意の ID。デバイス上のパスで使用されている profileId と一致する必要があります。

プロファイルのないアカウントの URL は次のとおりです。

https://tvvideodiscovery.googleapis.com/v1/packages/{package_name}/accounts/{account_id}/publishContinuationCluster

リクエストのペイロードは entities フィールドで表されます。entities は、MovieEntity または TVEpisodeEntity のいずれかであるコンテンツ エンティティのリストを表します。これは必須項目です。

リクエストの本文

フィールド

文字入力

必須

説明

entities

MediaEntity オブジェクトのリスト

コンテンツ エンティティのリスト(最大 5 個)。上位 5 個のみが保持され、残りは削除されます。ユーザーがすべてのエンティティの視聴を完了したことを示すために、空のリストが許可されます。

フィールド entities には、個々の movieEntitytvEpisodeEntity が含まれます。

フィールド

文字入力

必須

説明

movieEntity

MovieEntity

ContinuationCluster 内の映画を表すオブジェクト。

tvEpisodeEntity

TvEpisodeEntity

ContinuationCluster 内のテレビ番組のエピソードを表すオブジェクト。

entities 配列内の各オブジェクトは、共通フィールドとタイプ固有のフィールドとともに、利用可能な MediaEntity タイプ(MovieEntityTvEpisodeEntity)のいずれかである必要があります。

次のコード スニペットは、publishContinuationCluster API のリクエスト本文のペイロードを示しています。

{
  "entities": [
    {
      "movieEntity": {
        "watch_next_type": "WATCH_NEXT_TYPE_CONTINUE",
        "name": "Movie1",
        "platform_specific_playback_uris": [
          "https://www.example.com/entity_uri_for_android",
          "https://www.example.com/entity_uri_for_iOS"
        ],
        "poster_images": [
          "http://www.example.com/movie1_img1.png",
          "http://www.example.com/movie1_imag2.png"
        ],
        "last_engagement_time_millis": 864600000,
        "duration_millis": 5400000,
        "last_play_back_position_time_millis": 3241111
      }
    },
    {
      "tvEpisodeEntity": {
        "watch_next_type": "WATCH_NEXT_TYPE_CONTINUE",
        "name": "TV SERIES EPISODE 1",
        "platform_specific_playback_uris": [
          "https://www.example.com/entity_uri_for_android",
          "https://www.example.com/entity_uri_for_iOS"
        ],
        "poster_images": [
          "http://www.example.com/episode1_img1.png",
          "http://www.example.com/episode1_imag2.png"
        ],
        "last_engagement_time_millis": 864600000,
        "duration_millis": 1800000,
        "last_play_back_position_time_millis": 2141231,
        "episode_display_number": "1",
        "season_number": "1",
        "show_title": "title"
      }
    }
  ]
}

動画の検出データを削除する

clearClusters API を使用して、動画検出データを削除します。

POST URL を使用して、動画検出データからエンティティを削除します。継続クラスタのデータを削除するには、次の構文を使用して clearClusters API に POST リクエストを実行します。

https://tvvideodiscovery.googleapis.com/v1/packages/{package_name}/accounts/{account_id}/profiles/{profile_id}/clearClusters

ここで

  • package_name: メディア プロバイダのパッケージ名。
  • accountId: システム内のユーザー アカウントの一意の ID。デバイス上のパスで使用される accountId と一致する必要があります。
  • profileId: システム内のアカウント内のユーザー プロファイルの一意の ID。デバイス上のパスで使用されている profileId と一致する必要があります。

clearClusters API のペイロードには 1 つのフィールド reason のみが含まれます。このフィールドには、データを削除する理由を指定する DeleteReason が含まれます。

{
  "reason": "DELETE_REASON_LOSS_OF_CONSENT"
}

テスト

データの投稿が成功したら、ユーザー テスト アカウントを使用して、Google TV や Android および iOS の Google TV モバイルアプリなどの対象の Google サーフェスの [続きを見る] 行に、期待どおりのコンテンツが表示されることを確認します。

テストでは、数分の妥当な伝播遅延を許容し、映画の一部を視聴する、エピソードを視聴し終えるなどの視聴要件を遵守します。詳しくは、アプリ デベロッパー向け Watch Next ガイドラインをご覧ください。

ダウンロード

ダウンロードする前に、次の利用規約に同意する必要があります。

利用規約

以下は、Android ソフトウェア開発キットのライセンス契約です。

1. はじめに

1.1 Android ソフトウェア開発キット(以下、本ライセンス契約内では「SDK」と呼ぶ。具体的には、Android システム ファイル、API パッケージ、Google API のアドオンなど)は、本ライセンス契約の規定に従ってデベロッパーに対してライセンス供与されます。本ライセンス契約は、デベロッパーによる SDK の使用に関してデベロッパーと Google との間で結ばれる法的拘束力を有する契約です。 1.2 「Android」とは、Android オープンソース プロジェクト(https://source.android.com/)にて利用可能な、随時更新される、デバイス向け Android ソフトウェア スタックを意味します。 1.3 「対応デバイス」とは、(i)Android Compatibility Definition Document(CDD: Android 互換性定義ドキュメント、Android の互換性に関するウェブサイト https://source.android.com/compatibility で確認でき、また、随時更新される可能性がある)に準拠し、かつ(ii)Android Compatibility Test Suite(CTS: 互換性テストスイート)に合格した Android デバイスを意味します。 1.4 「Google」とは、1600 Amphitheatre Parkway, Mountain View, CA 94043, USA に主たる事業所を有し、米国法に基づいて事業を行う米国デラウェア州法人である Google LLC を意味します。

2. 本ライセンス契約への同意

2.1 デベロッパーは、SDK を使用するにあたり、まず本ライセンス契約に同意する必要があります。本ライセンス契約に同意しない場合、SDK を使用することはできません。 2.2 クリックして同意するか、SDK を使用した時点で本契約に同意したことになります。 2.3 デベロッパーは、アメリカまたは他の国(デベロッパーの居住国や、デベロッパーが SDK を使用する国を含む)の法律によって SDK の受け取りが禁じられている場合、SDK を使用することも、本ライセンス契約に同意することもできません。 2.4 デベロッパーが自らの雇用主または他の事業体の代理として本ライセンス契約を遵守することに同意する場合は、当該雇用主または事業体を本ライセンス契約に拘束する完全な法的権限を有することを表明および保証します。デベロッパーが必要な権限を有していない場合には、自らの雇用主または他の事業体の代理として、本ライセンス契約に同意することも SDK を使用することもできません。

3. Google が付与する SDK ライセンス

3.1 本ライセンス契約の条件に従い、Google はデベロッパーに対し、Android 対応デバイス向けアプリの開発を唯一の目的として SDK の使用を許諾する、限定的、世界規模、譲渡不可、非独占的、かつ再使用許諾不可の無償ライセンスを付与します。 3.2 デベロッパーは、本 SDK を使用して、他のプラットフォーム(Android の非対応デバイスを含む)向けのアプリを開発することも、別の SDK を開発することもできません。ただし、本 SDK を当該の開発目的で使用しない限り、デベロッパーは、Android の非対応デバイスを含む他のプラットフォーム向けのアプリの開発を自由に行うことができます。 3.3 デベロッパーは、Google または第三者が、SDK に内在するあらゆる知的財産権を含め、SDK に関するすべての法的権利、権原、利益を有することに同意します。「知的財産権」とは、特許法、著作権法、営業秘密法、商標法、その他すべての財産権に基づくあらゆる権利を意味します。Google は、明示的にデベロッパーに付与されていないすべての権利を有します。 3.4 デベロッパーは、本ライセンス契約によって明示的に許可されている目的以外で SDK を使用することはできません。適用される第三者ライセンスによって必要とされる場合を除き、デベロッパーは、SDK または SDK の一部をコピー(バックアップを目的とする場合を除く)、変更、改造、再配布、逆コンパイル、リバース エンジニアリング、逆アセンブルしたり、その派生物を作成したりすることはできません。 3.5 オープンソース ソフトウェア ライセンスの下でライセンス供与された SDK のコンポーネントの使用、複製、配布は、本ライセンス契約ではなく、当該のオープンソース ソフトウェア ライセンスの規定にのみ準拠します。 3.6 デベロッパーは、Google の提供する SDK の形態および性質が事前の通知なしに変更される可能性があること、ならびに、今後リリースされる SDK のバージョンが、以前のバージョンの SDK で開発されたアプリと互換性がなくなる可能性があることに同意します。デベロッパーは、Google が事前の通知なく、Google の独自の裁量により、デベロッパーや一般ユーザーへの SDK(または SDK 内の一部の機能)の提供を、恒久的または一時的に停止する場合があることに同意します。 3.7 本ライセンス契約のいかなる条項も、Google の商標名、商標、サービスマーク、ロゴ、ドメイン名、その他識別可能な独自のブランドを使用する権利をデベロッパーに付与しません。 3.8 デベロッパーは、SDK に添付または SDK 内に収録されている可能性のあるいかなる財産権表示(著作権や商標の表示を含む)も削除、隠ぺい、改ざんを行わないことに同意します。

4. デベロッパーによる SDK の使用

4.1 Google は、デベロッパーが SDK を使用して開発するソフトウェア アプリに関して、当該アプリに内在するあらゆる知的所有権を含め、いかなる権利、権原、および利益も、本ライセンス契約を基にデベロッパー(またはそのライセンサー)から取得しないことに同意します。 4.2 デベロッパーは、(a)本ライセンス契約、ならびに(b)該当する司法管轄区において適用される法律、規則、一般に認められている慣行やガイドライン(米国または他の該当国におけるデータやソフトウェアの輸出に関する法律を含む)によって認められている目的でのみ、SDK を使用してアプリを開発することに同意します。 4.3 デベロッパーは、SDK を使用して一般ユーザー向けのアプリを開発するにあたり、当該ユーザーのプライバシーおよび法的権利を保護することに同意します。ユーザーからユーザー名やパスワードなどのログイン情報や、個人情報が提供される場合、デベロッパーは、当該の情報がデベロッパーのアプリに提供されることを当該ユーザーに通知し、法的に適切な形でプライバシーに関する通知および保護を当該ユーザーに提供する必要があります。ユーザーから提供された個人情報または機密情報がデベロッパーのアプリで保存される場合、この保存は安全に行う必要があります。ユーザーがデベロッパーのアプリに Google アカウント情報を提供した場合、デベロッパーのアプリは、当該情報を使用する目的に限定してユーザーから使用許可が得られたときに限り、当該情報を使用してユーザーの Google アカウントにアクセスできます。 4.4 デベロッパーは、SDK を使用して(これにはアプリの開発または配布も含まれる)、いかなる第三者(Google または任意の携帯通信会社が含まれるが、これらに限定されない)のサーバー、ネットワーク、またはその他の資産もしくはサービスに対する妨害、中断、損害、不正アクセスに該当する行為に関与しないことに同意します。 4.5 デベロッパーは、Android や Android 向けアプリを通じてデベロッパーが作成、送信、表示するあらゆるデータ、コンテンツ、リソース、ならびに当該の行為の結果(Google が被る可能性のあるすべての損失および損害を含む)について、自身が単独で責任を負うこと(かつ、Google がデベロッパーおよびいかなる第三者に対しても一切責任を負わないこと)に同意します。 4.6 デベロッパーは、本ライセンス契約、適用される第三者の契約や利用規約、適用される法律や規則に基づく自身の義務に対するあらゆる違反、ならびに当該の違反の結果(Google や第三者が被る可能性のあるすべての損失および損害を含む)について、自身が単独で責任を負うこと(かつ、Google がデベロッパーおよびいかなる第三者に対しても一切責任を負わないこと)に同意します。

5. デベロッパーの認証情報

5.1 デベロッパーは、Google から発行される、またはデベロッパー自身で選ぶあらゆるデベロッパー認証情報について、その機密性を維持する責任を負うこと、ならびに、自身のデベロッパー認証情報の下で開発されるすべてのアプリについて単独で責任を負うことに同意します。

6. プライバシーおよび情報

6.1 Google は、SDK の継続的な技術革新と改良のために、ソフトウェアから特定の使用状況統計情報(一意の識別子、関連付けられた IP アドレス、ソフトウェアのバージョン番号、SDK 内のどのツールやサービスが使用されているか、およびどのように使用されているかに関する情報を含むが、これらに限定されない)を収集することができます。当該の情報が収集される際は、その前に SDK が通知を表示し、デベロッパーの同意を求めます。デベロッパーが同意しなかった場合、情報は収集されません。 6.2 収集されたデータは、SDK を改善するために集約された形で調査され、Google のプライバシー ポリシーに沿って管理されます。プライバシー ポリシーは次の URL に記載されています。https://policies.google.com/privacy 6.3 SDK の改善を目的として、匿名化および集約されたデータが Google パートナーと共有される場合があります。

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 からユーザーのデータを取得する場合、当該データを取得する目的に限定してユーザーから取得が許可されたときに限り、そのユーザーの明示的な同意をもってのみデータを取得できるということを了承し、これに同意します。デベロッパーは、Android Recognition Service API(https://developer.android.com/reference/android/speech/RecognitionService、随時更新)を使用する場合、この API の使用が「Google がデータ処理者となるサービスのデータ処理追加条項」(https://privacy.google.com/businesses/gdprprocessorterms/、随時更新)の対象となることに同意します。デベロッパーは、「同意します」をクリックした時点で、「Google がデータ処理者となるサービスのデータ処理追加条項」に同意したものと見なされます。

9. 本ライセンス契約の終了

9.1 本ライセンス契約は、下記に定めるとおり、デベロッパーまたは Google のいずれかによって終了されるまで、継続して適用されます。 9.2 デベロッパーは、本ライセンス契約の終了を希望する場合、SDK および関連するデベロッパー認証情報の使用をすべて中止することにより終了できます。 9.3 Google は、次のような場合にいつでも本ライセンス契約を終了できます。 (A)デベロッパーが本ライセンス契約のいずれかの規定に違反した場合 (B)法律に基づいて Google が本ライセンス契約を終了する必要がある場合 (C)Google と提携して SDK の特定の部分(API など)をデベロッパーに提供しているパートナーが、Google との提携関係を終了した、または SDK の特定の部分をデベロッパーに提供することを中止した場合 (D)Google が、デベロッパーの居住国もしくはデベロッパーがサービスの利用拠点としている国のユーザーに対して SDK やその特定部分の提供をやめることを決定した場合、または、Google からデベロッパーに対する SDK もしくは特定の SDK サービスの提供が、Google 独自の裁量により、商業的に実現不可能と見なされた場合 9.4 本ライセンス契約が終了した場合、契約終了までにデベロッパーと Google が利益を享受したか付与の対象となった(もしくは本ライセンス契約の実施に伴って徐々に生じた)、または無期限に存続すると明示されている、法的権利、義務、および責任はいずれも、この終了による影響を受けないものとし、当該の権利、義務、および責任には第 14.7 項の規定が引き続き無期限に適用されるものとします。

10. 保証に関する免責事項

10.1 デベロッパーは、SDK の使用がデベロッパー自身の責任において行うものであること、ならびに、SDK が「現状有姿」かつ「提供可能な限度」で Google からのいかなる保証もなく提供されるものであることを明示的に了解し、これに同意します。 10.2 SDK の使用、および SDK の使用を通じてダウンロードまたは他の方法で入手したデータの使用は、デベロッパー自身の裁量と責任において行うものとします。また、デベロッパーは、当該の使用に起因する、自身のコンピュータ システムまたは他のデバイスに対するあらゆる損害、あるいはデータの喪失について、単独で責任を負うものとします。 10.3 さらに Google は、商品性、特定目的への適合性、および権利侵害がないことに関する黙示的な保証および条件を含め(ただしこれらに限定されない)、明示的であるか黙示的であるかを問わず、あらゆる種類の保証および条件をすべて明示的に否定します。

11. 責任の制限

11.1 デベロッパーは、デベロッパーが被る可能性のあるあらゆる直接損害、間接損害、偶発的損害、特別損害、結果的損害、または懲罰的損害(データの喪失を含む)について、当該の損失が生じる可能性を Google またはその代理人が通知されていたかどうか、認識できたかどうかにかかわらず、Google、その子会社および関連会社、ならびにそのライセンサーがいかなる責任法理の下でもデベロッパーに対して責任を負わないことを明示的に了解し、これに同意します。

12. 補償

12.1 デベロッパーは、法律で認められる最大限の範囲で、Google、その関係会社、役員、従業員、代理人に対し、SDK の著作権や知的財産権の侵害、デベロッパーの知的財産権の侵害、デベロッパーの権利の侵害、デベロッパーの権利の侵害、取引の権利の侵害、取引の権利の侵害、取引の権利の侵害、取引に関わるあらゆる損失、法的責任、損害、費用、経費(合理的な弁護士費用を含む)について、Google、その関係会社、役員、従業員、代理人を防御、補償、免責することに同意します。

13. 本ライセンス契約の変更

13.1 Google は、SDK の新しいバージョンを配布する際、本ライセンス契約に変更を加えることができます。かかる変更を行った場合、Google は、SDK を提供するウェブサイト上に本ライセンス契約の改訂版を公開します。 14.1 本ライセンス契約は、デベロッパーと Google との間の法的な合意のすべてを構成し、デベロッパーによる SDK の使用(書面による別の契約の下で Google がデベロッパーに提供するサービスを除く)について規定し、SDK に関するデベロッパーと Google との間のあらゆる事前の合意に完全に取って代わります。 14.2 デベロッパーは、Google が本ライセンス契約に定める法的な権利または救済措置(あるいは、適用される法律の下で Google が享受できる法的な権利または救済措置)を行使または執行しなかった場合でも、Google の権利が正式に放棄されたとは見なされないこと、ならびに Google が以後も引き続き当該権利および救済措置を行使または執行できることに同意します。 14.3 本件に関する判断を下す権限を有する司法裁判所により、本ライセンス契約のいずれかの規定が無効であると裁定された場合、当該規定は、本ライセンス契約の残りの規定に影響を与えることなく本ライセンス契約から削除されるものとします。本ライセンス契約の残りの規定は、以後も引き続き有効かつ執行可能であるものとします。 14.4 デベロッパーは、Google を親会社とする企業グループに属する各企業が本ライセンス契約の第三受益者となること、ならびに、当該の企業が自らに利益(または有利な権利)をもたらす本ライセンス契約の規定を直接執行する権利および当該の規定に依拠する権利を有することを了承し、これに同意します。上記を除き、他のいかなる個人または法人も、本ライセンス契約の第三受益者とはならないものとします。 14.5 輸出規制。SDK は、米国の輸出管理法令の適用対象です。デベロッパーは、SDK に適用される国内外のすべての輸出管理法令を遵守する必要があります。対象となる法律には、仕向地、最終使用者、最終用途に対する制限も含まれています。 14.6 デベロッパーおよび Google はいずれも、相手当事者から事前に書面による承認を得ずに、本ライセンス契約の下で付与される権利を譲渡または移転することはできません。デベロッパーおよび Google はいずれも、相手当事者から事前に書面による承認を得ずに、本ライセンス契約に基づく自身の責任または義務を他者に委任することはできません。 14.7 本ライセンス契約、および本ライセンス契約に基づくデベロッパーと Google との関係は、抵触法の規定にかかわらず、カリフォルニア州の法律に準拠するものとします。デベロッパーおよび Google は、本ライセンス契約から生じる法的事項を解決するにあたり、カリフォルニア州サンタクララ郡の裁判所が専属管轄権を有することに同意します。上記にかかわらず、デベロッパーは、Google が任意の司法管轄区において差し止め命令による救済(または同等の緊急法的救済)を求める申し立てを行うことが認められることに同意します。2021 年 7 月 27 日
をダウンロード

verify_app_multiplatform_public_20250602.apk