Поделиться медиаконтентом

Альбомами, созданными в вашем приложении, можно делиться с другими пользователями, разрешая им оставлять комментарии или добавлять в альбом свои мультимедийные объекты.

Чтобы поделиться альбомом через Google Photos Library API, ваше приложение должно выполнить следующие действия:

  1. Создавать альбомы от имени пользователя.
  2. Откройте доступ к альбому.

Область аутентификации

Чтобы делиться контентом, приложение должно запросить область авторизации photoslibrary.sharing.

Как поделиться альбомом

Прежде чем поделиться альбомом, учтите следующее:

  • Приложение может делиться только теми альбомами, которые оно создало. Альбомы, созданные другими приложениями, в том числе Google Фото, не могут быть предоставлены вашим приложением.
  • Когда ваше приложение делится альбомом через Library API, генерируется URL для доступа, по которому любой пользователь может открыть альбом.
  • Владелец альбома, которым поделились через API, может отключить доступ по ссылке или закрыть доступ к альбому в приложении "Google Фото". В результате ваше приложение не сможет добавлять в альбом новых пользователей.

Чтобы поделиться альбомом:

  1. Следуйте рекомендациям по UX и получите явное согласие пользователя на создание общего альбома.
  2. Создайте альбом и запишите его albumId. Если вы уже создали альбом, вы можете получить его albumId, составив список альбомов пользователя.
  3. Вызовите albums.share, используя нужный albumId и задав параметры доступа.
  4. Запишите значение shareToken в ответе. Токен общего доступа – это идентификатор общего альбома, который можно использовать в разных аккаунтах пользователей.
  5. Теперь другой пользователь может выполнить аутентификацию в вашем приложении, а затем присоединиться к общему альбому, покинуть его или получить сведения о нем, используя его shareToken.

Настройки доступа

При предоставлении доступа к альбому с помощью параметра 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. Это свойство возвращается при предоставлении доступа к альбомам, их перечислении или получении.

В таблице ниже перечислены свойства shareInfo.

Свойства
sharedAlbumOptions Параметры, определяющие, может ли пользователь добавлять мультимедийные объекты в общий альбом или комментировать его.
shareableUrl

Ссылка на общий альбом Google Фото. Любой пользователь, у которого есть ссылка, может просматривать содержимое альбома, поэтому будьте осторожны.

Поле shareableUrl возвращается, только если для альбома включен доступ по ссылке. Если пользователь уже присоединился к альбому, для которого не включен доступ по ссылке, он может использовать productUrl альбома.

Ссылка shareableUrl становится недействительной, если владелец отключает доступ по ссылке в приложении "Google Фото" или закрывает доступ к альбому.

shareToken

Токен, который используется, чтобы присоединиться к общему альбому, покинуть его или получить сведения о нем от имени пользователя, который не является владельцем.

Ссылка shareToken становится недействительной, если владелец отключает доступ по ссылке в приложении "Google Фото" или закрывает доступ к альбому.

isJoinable True, если пользователи могут присоединиться к альбому.
isJoined True, если пользователь присоединился к альбому. Это всегда верно для владельца альбома.
isOwned True, если пользователь является владельцем альбома.

Вы закрываете доступ к альбому

Чтобы закрыть доступ к альбому, который ранее был опубликован через ваше приложение, вызовите метод albums.unshare, используя albumId альбома.

Помимо того, что альбом перестанет быть общим, произойдет следующее:

  • Все, кроме владельца, потеряют доступ к альбому. Это относится и к тем, кому вы открыли доступ к альбому через приложение "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
}

Как присоединиться к общему альбому

Ваше приложение может присоединиться к общему альбому от имени пользователя с помощью токена доступа к альбому. Для этого должны выполняться следующие условия:

  • Ваше приложение создало альбом и поделилось им.
  • Пользователь, которого вы хотите добавить в альбом, не является его владельцем. Это означает, что поле isOwned в объекте shareInfo альбома имеет значение false.
  • Токен действителен.
  • Поле isJoinable в файле shareInfo альбома имеет значение 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
}

Как покинуть общий альбом

Ваше приложение может покинуть общий альбом от имени пользователя, используя токен доступа к альбому. Для этого должны выполняться следующие условия:

  • Приложение создало альбом и поделилось им.
  • Пользователь уже присоединился к альбому. То есть поле isJoined в объекте shareInfo альбома имеет значение true.
  • Пользователь, подключенный к вашему приложению, не является владельцем альбома. Это означает, что в поле isOwned в shareInfo альбома указано значение 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"
  }
}