アプリで作成したアルバムはユーザー間で共有でき、それらのユーザーがアルバムにコメントしたり、自分のメディア アイテムを投稿したりできるようにするオプションもあります。
Google Photos Library API を使用してアルバムを共有するには、アプリで次のことを行う必要があります。
- ユーザーに代わってアルバムを作成します。
- アルバムを共有に設定します。
必要な認証スコープ
コンテンツを共有するには、アプリで photoslibrary.sharing
認可スコープをリクエストする必要があります。
アルバムの共有
アルバムを共有する前に、次の点を考慮してください。
- アプリが共有できるのは、アプリが作成したアルバムのみです。他のアプリ(Google フォトなど)で作成したアルバムは、アプリで共有できません。
- アプリが Library API を介してアルバムを共有すると、誰でもアルバムにアクセスできる共有可能な URL が生成されます。
- API 経由で共有されたアルバムの場合、アルバムのオーナーは、リンクの共有を無効にしたり、Google フォト アプリでアルバムの共有を停止したりすると、アプリが新規ユーザーに参加できなくなる可能性があります。
アルバムを共有するには:
- UX ガイドラインに沿って、共有アルバムの作成についてユーザーから明示的な同意を得る。
- アルバムを作成し、その
albumId
を記録します。アルバムをすでに作成している場合は、ユーザーのアルバムを一覧表示することで、そのalbumId
を取得できます。 - 設定する共有オプションとともに適切な
albumId
を使用して、albums.share
を呼び出します。 - レスポンスの
shareToken
値を記録します。共有トークンは、さまざまなユーザー アカウントで使用できる共有アルバムの識別子です。 - これで、別のユーザーがアプリで認証され、
shareToken
を使用して共有アルバムのjoin、退出、または詳細の取得ができるようになります。
共有オプション
sharedAlbumOptions
パラメータを使用してアルバムを共有するときに、次のオプションを設定できます。オプションが明示的に設定されていない場合は、デフォルト値が使用されます。
プロパティ | デフォルト値 | 説明 |
---|---|---|
isCollaborative |
false |
他の Google フォト ユーザーが共有アルバムにコンテンツを追加できるかどうかを設定します。 |
isCommentable |
false |
他の Google フォト ユーザーが共有アルバムにコメントできるかどうかを設定します。 |
リクエストの例
次のリクエストでは、オプションを指定して albums.share
を呼び出してアルバムを共有します。アルバムの共有プロパティを示すレスポンスで、shareInfo
プロパティが返されます。
REST
アルバムを共有するための POST リクエストのヘッダーは次のようになります。
POST https://photoslibrary.googleapis.com/v1/albums/album-id:share Content-type: application/json Authorization: Bearer oauth2-token
リクエストの本文で、共有オプションを指定します。
{ "sharedAlbumOptions": { "isCollaborative": "true", "isCommentable": "true" } }
このリクエストにより、次のレスポンスが返されます。
{ "shareInfo": { "sharedAlbumOptions": { "isCollaborative": "true", "isCommentable": "true" }, "shareableUrl": "shareable-url", "shareToken": "share-token", "isJoinable": "true-if-users-can-join-album", "isJoined": "true-if-user-is-joined-to-album", "isOwned": "true-if-user-owns-album" } }
Java
try { SharedAlbumOptions options = // Set the options for the album you want to share SharedAlbumOptions.newBuilder() .setIsCollaborative(true) .setIsCommentable(true) .build(); ShareAlbumResponse response = photosLibraryClient.shareAlbum(albumId, options); // The response contains the shareInfo object, a url, and a token for sharing ShareInfo info = response.getShareInfo(); // Link to the shared album String url = info.getShareableUrl(); String shareToken = info // The share token which other users of your app can use to join the album you shared .getShareToken(); SharedAlbumOptions sharedOptions = info // The options set when sharing this album .getSharedAlbumOptions(); } catch (ApiException e) { // Handle error }
PHP
// Set the options for the album you want to share $options = new SharedAlbumOptions(); $options->setIsCollaborative(true); $options->setIsCommentable(true); try { $response = $photosLibraryClient->shareAlbum($albumId, ['sharedAlbumOptions' => $options]); // The response contains the shareInfo object, a url, and a token for sharing $shareInfo = $response->getShareInfo(); // Link to the shared album $url = $shareInfo->getShareableUrl(); // The share token which other users of your app can use to join the album you shared $shareToken = $shareInfo->getShareToken(); // The options set when sharing this album $sharedOptions = $shareInfo->getSharedAlbumOptions(); } catch (\Google\ApiCore\ApiException $e) { // Handle error }
共有アルバムのプロパティ
アプリによって作成、共有されているアルバムの場合、album
を返すすべてのレスポンスには追加のプロパティ shareInfo
が含まれます。このプロパティは、アルバムの共有、一覧表示、retrieving時に返されます。
次の表に、shareInfo
プロパティを示します。
プロパティ | |
---|---|
sharedAlbumOptions |
共有アルバムへのメディア アイテムの追加やコメントの追加を許可するかどうかを記述するオプション。 |
shareableUrl |
共有の Google フォト アルバムへのリンク。リンクを知っているユーザーなら誰でもアルバムのコンテンツを閲覧できるため、取り扱いには注意が必要です。
オーナーが Google フォト アプリでリンクの共有をオフにした場合、またはアルバムが共有されていない場合、 |
shareToken |
オーナー以外のユーザーの代わりに、共有アルバムのjoin、退出、詳細の取得に使用するトークン。 オーナーが Google フォト アプリでリンクの共有をオフにした場合、またはアルバムが共有されていない場合、 |
isJoinable |
ユーザーがアルバムに参加できる場合は True 。 |
isJoined |
ユーザーがアルバムに参加している場合は True 。これは、アルバムのオーナーは常に true です。 |
isOwned |
ユーザーがアルバムを所有している場合は True 。 |
アルバムの共有停止
アプリが以前に共有したアルバムの共有を解除するには、アルバムの albumId
を使用して albums.unshare
を呼び出します。
アルバムは共有されなくなるほか、次のようになります。
- オーナー以外のユーザーはアルバムにアクセスできなくなります。これには、Google フォト アプリでアルバムを明示的に共有したユーザーも含まれます。
- オーナー以外が追加したコンテンツはすべてアルバムから削除されます。
- ユーザーが以前にアルバムのコンテンツをライブラリに追加している場合、そのコンテンツはライブラリに保持されます。
- アルバムの共有トークンと共有可能な URL が無効になります。
リクエストの例
REST
アルバムの共有を停止するための POST リクエスト ヘッダーは次のとおりです。
POST https://photoslibrary.googleapis.com/v1/albums/album-id:unshare Content-type: application/json Authorization: Bearer oauth2-token
リクエストの本文は空にする必要があります。
リクエストが成功すると、HTTP 成功ステータス コードとともに空のレスポンスが返されます。リクエストが成功しなかった場合は、HTTP エラー ステータス コードとエラー メッセージが返されます。
Java
try { // If this call is not successful, an exception is raised photosLibraryClient.unshareAlbum(albumId); } catch (ApiException e) { // Handle error }
PHP
try { // Mark the album as private and no longer shared // If this call is not successful, an exception is raised $photosLibraryClient->unshareAlbum($albumId); } catch (\Google\ApiCore\ApiException $e) { // Handle error }
共有アルバムと共有トークンの取得
アプリがアルバムを共有すると、共有トークンなどの共有アルバムの詳細が返されます。これらの詳細は、後で次の方法で取得することもできます。
現在アプリに接続しているユーザーがオーナーである場合、またはアルバムに参加している場合は、次のようにします。
albums.get
で、適切なalbumId
を使用する。albums.list
の場合(アルバム内にメディア アイテムがある場合)。sharedAlbums.list
では、ユーザーが参加している、または所有しているすべての共有アルバムが返されます。アプリによって作成されたアルバムのみを取得するには、excludeNonAppCreatedData
パラメータを使用します。sharedAlbums.get
では、共有トークンを使用します。
アプリに接続しているユーザーがアルバムに参加していない場合は、有効な共有トークンを使用して sharedAlbums.get
で共有アルバムの詳細を取得できます。
リクエストの例
REST
shareToken
のアルバムを取得するリクエストは次のとおりです。
GET https://photoslibrary.googleapis.com/v1/sharedAlbums/share-token
リクエストが成功すると、共有された
album
の詳細が返されます。
Java
try { // Get a shared album from its share token Album sharedAlbum = photosLibraryClient.getSharedAlbum(shareToken); String id = sharedAlbum.getId(); String title = sharedAlbum.getTitle(); // ... } catch (ApiException e) { // Handle error }
PHP
try { // Get the album from a share token $album = $photosLibraryClient->getSharedAlbum($shareToken); // Get some properties of an album $productUrl = $album->getProductUrl(); $title = $album->getTitle(); } catch (\Google\ApiCore\ApiException $e) { // Handle error }
共有アルバムに参加する
アプリは、アルバムの共有トークンを使用して、ユーザーに代わって共有アルバムに参加できます。そのためには、次の条件を満たす必要があります。
- アプリがアルバムを作成して共有した。
- アルバムに参加しようとしているユーザーがアルバムのオーナーではありません。つまり、アルバムの
shareInfo
のisOwned
フィールドが false になっています。 - 共有トークンが有効である。
- アルバムの
shareInfo
のisJoinable
フィールドが true になっている。
REST
以下は、共有アルバムに参加するための POST リクエスト ヘッダーです。
POST https://photoslibrary.googleapis.com/v1/sharedAlbums:join Content-type: application/json Authorization: Bearer oauth2-token
リクエストの本文で shareToken
を指定します。
{ "shareToken": "share-token" }
POST リクエストは、ユーザーに代わってアプリが参加した共有 album
を返します。
Java
try { // Join the shared album using the share token obtained when sharing the album // If this call is not successful, an exception is raised JoinSharedAlbumResponse response = photosLibraryClient.joinSharedAlbum(shareToken); Album joinedAlbum = response.getAlbum(); } catch (ApiException e) { // Handle error }
PHP
try { $response = $photosLibraryClient->joinSharedAlbum($shareToken); // Join the shared album using the share token obtained when sharing the album // If this call is not successful, an exception is raised $joinedAlbum = $response->getAlbum(); } catch (\Google\ApiCore\ApiException $e) { // Handle error }
共有アルバムから退出する
アプリは、アルバムの共有トークンを使用して、ユーザーに代わって共有アルバムから退出できます。そのためには、次の条件を満たす必要があります。
- アプリによってアルバムが作成され、共有されました。
- ユーザーは現在アルバムに参加しています。つまり、アルバムの
shareInfo
のisJoined
フィールドが true になっています。 - アプリに接続したユーザーがアルバムのオーナーではありません。つまり、アルバムの
shareInfo
のisOwned
フィールドは false です。
REST
共有アルバムから退出するための POST リクエスト ヘッダーは次のとおりです。
POST https://photoslibrary.googleapis.com/v1/sharedAlbums:leave Content-type: application/json Authorization: Bearer oauth2-token
リクエストの本文で shareToken
を指定します。
{ "shareToken": "share-token" }
リクエストが成功すると、HTTP 成功ステータス コードとともに空のレスポンスが返されます。リクエストが成功しなかった場合は、HTTP エラー ステータス コードとエラー メッセージが返されます。
Java
try { // Leave a shared album using its share token // If this call is not successful, an exception is raised photosLibraryClient.leaveSharedAlbum(shareToken); } catch (ApiException e) { // Handle error }
PHP
try { // Leave the shared album using the share token obtained when sharing the album // If this call is not successful, an exception is raised $photosLibraryClient->leaveSharedAlbum($shareToken); } catch (\Google\ApiCore\ApiException $e) { // Handle error }
共有メディア アイテムのプロパティ
アプリで共有されているアルバムに属するメディア アイテムには、追加のプロパティ contributorInfo
が含まれています。このプロパティは、共有アルバムのコンテンツをリストする場合にのみ指定します。
contributorInfo
プロパティには、メディア アイテムをアルバムに追加したユーザーの名前と、そのプロフィール画像のベース URL が含まれます。
次の例をご覧ください。
{ "id: "media-item-id", ..., "mediaMetadata": { ... } "contributorInfo": { "profilePictureBaseUrl": "profile-picture-base-url_use-only-with-parameters", "displayName": "name-of-user" } }