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

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

始める前に

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

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

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

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

セッションの作成

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

sessions.create は新しいセッションを生成し、ユーザーに提示できる一意の pickerUri を返します。セッションは、ユーザーがメディア アイテムを正常に選択するか、セッションがタイムアウトするまでアクティブな状態が維持されます。ウェブベースのアプリの場合、pickerUri/autoclose を追加すると、ユーザーが選択を完了した後に Google フォトのウィンドウまたはタブが自動的に閉じられます。詳しくは、写真の選択: ユーザーに表示されるものをご覧ください。

セッションの制限

セッションの上限に注意してください。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 に達した場合は、タイムアウトを適切に処理します。