メディアの共有

アプリで作成したアルバムはユーザー間で共有でき、それらのユーザーがアルバムにコメントしたり、自分のメディア アイテムを投稿したりできるようにするオプションもあります。

Google Photos Library API を使用してアルバムを共有するには、アプリで次のことを行う必要があります。

  1. ユーザーに代わってアルバムを作成します。
  2. アルバムを共有に設定します

必要な認証スコープ

コンテンツを共有するには、アプリで photoslibrary.sharing 認可スコープをリクエストする必要があります。

アルバムの共有

アルバムを共有する前に、次の点を考慮してください。

  • アプリが共有できるのは、アプリが作成したアルバムのみです。他のアプリ(Google フォトなど)で作成したアルバムは、アプリで共有できません。
  • アプリが Library API を介してアルバムを共有すると、誰でもアルバムにアクセスできる共有可能な URL が生成されます。
  • API 経由で共有されたアルバムの場合、アルバムのオーナーは、リンクの共有を無効にしたり、Google フォト アプリでアルバムの共有を停止したりすると、アプリが新規ユーザーに参加できなくなる可能性があります。

アルバムを共有するには:

  1. UX ガイドラインに沿って、共有アルバムの作成についてユーザーから明示的な同意を得る。
  2. アルバムを作成し、その albumId を記録します。アルバムをすでに作成している場合は、ユーザーのアルバムを一覧表示することで、その albumId を取得できます。
  3. 設定する共有オプションとともに適切な albumId を使用して、albums.share を呼び出します。
  4. レスポンスの shareToken 値を記録します。共有トークンは、さまざまなユーザー アカウントで使用できる共有アルバムの識別子です。
  5. これで、別のユーザーがアプリで認証され、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 フォト アルバムへのリンク。リンクを知っているユーザーなら誰でもアルバムのコンテンツを閲覧できるため、取り扱いには注意が必要です。

shareableUrl フィールドは、アルバムでリンクの共有が有効になっている場合にのみ返されます。リンク共有されていないアルバムにユーザーがすでに参加している場合は、代わりにアルバムの productUrl を使用してアクセスできます。

オーナーが Google フォト アプリでリンクの共有をオフにした場合、またはアルバムが共有されていない場合、shareableUrl は無効になります。

shareToken

オーナー以外のユーザーの代わりに、共有アルバムのjoin退出詳細の取得に使用するトークン。

オーナーが Google フォト アプリでリンクの共有をオフにした場合、またはアルバムが共有されていない場合、shareToken は無効になります。

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
}

共有アルバムに参加する

アプリは、アルバムの共有トークンを使用して、ユーザーに代わって共有アルバムに参加できます。そのためには、次の条件を満たす必要があります。

  • アプリがアルバムを作成して共有した。
  • アルバムに参加しようとしているユーザーがアルバムのオーナーではありません。つまり、アルバムの shareInfoisOwned フィールドが false になっています。
  • 共有トークンが有効である。
  • アルバムの shareInfoisJoinable フィールドが 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
}

共有アルバムから退出する

アプリは、アルバムの共有トークンを使用して、ユーザーに代わって共有アルバムから退出できます。そのためには、次の条件を満たす必要があります。

  • アプリによってアルバムが作成され、共有されました。
  • ユーザーは現在アルバムに参加しています。つまり、アルバムの shareInfoisJoined フィールドが true になっています。
  • アプリに接続したユーザーがアルバムのオーナーではありません。つまり、アルバムの shareInfoisOwned フィールドは 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"
  }
}