セッションは Picker API の中心となるもので、ユーザーが Google フォト ライブラリから写真や動画を安全かつ制御された方法で選択できるようにします。このガイドでは、アプリでシームレスな写真選択を可能にするために、セッションを作成、管理し、効果的にポーリングする方法について説明します。
始める前に
- アプリを構成する: API を有効にして、認証を設定します。詳細な手順については、アプリを構成するをご覧ください。
- フローを理解する: Picker API の使用を開始するで、写真選択プロセス全体の概要を確認します。
- 必要な認証スコープを確認する: セッションの操作には
photospicker.mediaitems.readonly
スコープが必要です。スコープの詳細については、承認スコープをご覧ください。
セッションのライフサイクル
Picker API には、セッションの作成、セッションに関する情報の取得、セッションの削除を行うメソッドが用意されています。ユーザーを認証したら、セッションを使用して写真選択のライフサイクルを管理できます。
- ユーザーがメディア アイテムを選択できるように、セッションを作成します。
- セッションをポーリングして、ユーザーがメディア アイテムの選択を完了したタイミングを確認します。
- メディア アイテムを一覧表示して取得する。
- セッションを削除してクリーンアップします。
セッションの作成
ユーザーが Google フォト アプリから直接安全に写真を選択し、アプリケーションに共有できるように、セッションを作成します。
sessions.create
は新しいセッションを生成し、ユーザーに提示できる一意の pickerUri
を返します。セッションは、ユーザーがメディア アイテムを正常に選択するか、セッションがタイムアウトするまでアクティブな状態が維持されます。ウェブベースのアプリの場合、pickerUri
に /autoclose
を追加すると、ユーザーが選択を完了した後に Google フォトのウィンドウまたはタブが自動的に閉じられます。詳しくは、写真の選択: ユーザーに表示されるものをご覧ください。
セッションの制限
セッションの上限に注意してください。Picker API は、責任ある使用を確保し、不正使用を防ぐため、作成できるセッション数に上限を設けています。通常、これらの上限に達することはありません。ただし、問題を回避するために、セッションを追跡し、セッションを事前にクリーンアップする必要があります。
セッションのポーリングとモニタリング
セッションが作成されたら、sessions.get
エンドポイントを定期的にポーリングして、セッションのステータスを取得します。ユーザーが選択を完了すると、レスポンスの mediaItemsSet
プロパティが true
を返します。
効率的なポーリングを使用してください。sessions.get
レスポンスには pollingConfig
オブジェクトが含まれます。次のフィールドを使用して、不要な呼び出しを回避し、スムーズなユーザー エクスペリエンスを実現します。
pollInterval
: 最適なポーリング間隔timeoutIn
: タイムアウト期間
詳しくは、ポーリング フローの例をご覧ください。
セッションを削除してクリーンアップする
sessions.delete
はセッションを削除します。通常、ユーザーがメディアの選択を終了した後や、セッションがタイムアウトした場合のクリーンアップに使用されます。
ユーザーがメディア アイテムを選択し、アプリがメディア アイテムのバイトを取得したら、セッションを削除することをおすすめします。
ポーリング フローの例
これは、セッションを作成してポーリングする例です。ユーザーを初めて認証したら、新しいセッションを作成します。
- セッションを作成する:
sessions.create
を呼び出して新しいセッションを開始し、pickerUri
を取得します。 - ユーザーに
pickerUri
を提示する: URL を表示するか、ユーザーがスキャンする QR コードを生成します。ユーザーの選択エクスペリエンスの概要をご覧ください。 - セッションをポーリングする:
pollingConfig
から推奨される pollInterval を使用します。mediaItemsSet
が true かどうかを確認します。true
の場合、選択したメディア アイテムのリストに進みます。false
の場合は、timeoutIn
に達するまでポーリングを続行します。
- タイムアウトとキャンセルを適切に処理します。
GET https://photoslibrary.googleapis.com/v1/sessions/{sessionId}
以下はレスポンスの例です。
{
"id": string,
"pickerUri": string,
"pollingConfig": {
object (PollingConfig)
},
"mediaItemsSet": boolean
}
ユーザーに pickerUri
を提示し、セッションのポーリングを開始します。
レスポンスで次の点を確認します。
mediaItemsSet
: ユーザーがメディア アイテムの選択を完了した場合は truepollingConfig.pollInterval
: 次のポーリングまでの推奨待機時間pollingConfig.timeoutIn
: タイムアウトするまでの合計待機時間
mediaItemsSet
が false で、timeoutIn
に達していない場合は、pollInterval
を待ってから再度ポーリングします。
mediaItemsSet
が true の場合、選択したメディア アイテムのリストに進みます。
timeoutIn
に達した場合は、タイムアウトを適切に処理します。