セッションを作成、管理する

セッションは Picker API の中心であり、ユーザーが Google フォトのライブラリから写真や動画を選択するための安全で制御された方法を提供します。このガイドでは、セッションを作成、管理、効果的にポーリングして、アプリでシームレスな写真選択を可能にする方法について説明します。

始める前に

  • アプリを構成する: API を有効にして認証を設定します。詳細な手順については、アプリを構成するをご覧ください。
  • フローを確認する: 写真選択プロセス全体の概要については、Picker API の使用を開始するをご覧ください。
  • 必要な認可スコープを確認する: セッションの操作には photospicker.mediaitems.readonly スコープが必要です。スコープの詳細については、認可スコープをご覧ください。

セッションのライフサイクル

Picker API には、セッションの作成、情報の取得、削除を行うメソッドが用意されています。ユーザーを認証したら、セッションを使用して写真選択のライフサイクルを管理できます。

  1. セッションを作成して、ユーザーがメディア アイテムを選択できるようにします。
  2. セッションをポーリングして、ユーザーがメディア アイテムの選択を完了したかどうかを確認します。
  3. メディア アイテムを一覧表示して取得する
  4. セッションを削除してクリーンアップします。

セッションの作成

セッションを作成して、ユーザーが Google フォト アプリから直接写真を安全に選択し、アプリに共有できるようにします。

sessions.create は新しいセッションを生成し、ユーザーに提示できる一意の pickerUri を返します。セッションは、ユーザーがメディア アイテムを正常に選択するか、セッションがタイムアウトするまでアクティブな状態が維持されます。

セッションの制限

セッション数の上限に注意してください。Picker API は、責任ある使用を確実にし、不正使用を防ぐために、作成できるセッション数に上限を適用します。通常の状況では、これらの上限に達する可能性は低いです。ただし、問題を回避するために、セッションを事前にクリーンアップして追跡する必要があります。

セッションのポーリングとモニタリング

セッションが作成されたら、sessions.get エンドポイントを定期的にポーリングしてセッションのステータスを取得します。ユーザーが選択を完了すると、レスポンスの mediaItemsSet プロパティは true を返します。

効率的なポーリングを使用してください。sessions.get レスポンスには pollingConfig オブジェクトが含まれます。不要な呼び出しを回避し、スムーズなユーザー エクスペリエンスを実現するには、次のフィールドを使用します。

  • pollInterval: 最適なポーリング間隔
  • timeoutIn: タイムアウト時間

詳細については、ポーリング フローの例をご覧ください。

セッションの削除とクリーンアップ

sessions.delete はセッションを削除します。通常は、ユーザーがメディアの選択を完了した後や、セッションがタイムアウトした場合のクリーンアップに使用されます。

ユーザーがメディア アイテムを選択し、アプリがメディア アイテムのバイト数を取得したら、セッションを削除することをおすすめします。

ポーリング フローの例

以下に、セッションの作成とポーリングの例を示します。ユーザーを最初に認証した後、新しいセッションを作成します。

  1. セッションを作成する: sessions.create を呼び出して新しいセッションを開始し、pickerUri を取得します。
  2. pickerUri をユーザーに提示する: URL を表示するか、ユーザーがスキャンできる QR コードを生成します。ユーザーの選択体験の概要をご覧ください。
  3. セッションをポーリングする:
    1. pollingConfig の推奨値の pollInterval を使用します。
    2. mediaItemsSet が true かどうかを確認します。
      1. true の場合は、選択したメディア アイテムのリスト表示に進みます。
      2. false の場合は、timeoutIn に達するまでポーリングを続けます。
    3. タイムアウトとキャンセルを適切に処理します。
GET https://photoslibrary.googleapis.com/v1/sessions/{sessionId}

以下はレスポンスの例です。

{
  "id": string,
  "pickerUri": string,
  "pollingConfig": {
    object (PollingConfig)
  },
  "mediaItemsSet": boolean
}

pickerUri をユーザーに提示し、セッションのポーリングを開始します。

レスポンスで次の点を確認します。

  • mediaItemsSet: ユーザーがメディア アイテムの選択を完了した場合は true
  • pollingConfig.pollInterval: 次のポーリングまでの推奨待ち時間
  • pollingConfig.timeoutIn: タイムアウトするまでの合計待ち時間

mediaItemsSet が false で、timeoutIn に達していない場合は、pollInterval を待ってから再度ポーリングします。

mediaItemsSet が true の場合、選択したメディア アイテムを一覧表示します。

timeoutIn に達した場合は、タイムアウトを適切に処理します。