Альбомами, созданными в вашем приложении, можно делиться с другими пользователями, разрешая им оставлять комментарии или добавлять в альбом свои мультимедийные объекты.
Чтобы поделиться альбомом через Google Photos Library API, ваше приложение должно выполнить следующие действия:
- Создавать альбомы от имени пользователя.
- Откройте доступ к альбому.
Область аутентификации
Чтобы делиться контентом, приложение должно запросить область авторизации photoslibrary.sharing.
Как поделиться альбомом
Прежде чем поделиться альбомом, учтите следующее:
- Приложение может делиться только теми альбомами, которые оно создало. Альбомы, созданные другими приложениями, в том числе Google Фото, не могут быть предоставлены вашим приложением.
- Когда ваше приложение делится альбомом через Library API, генерируется URL для доступа, по которому любой пользователь может открыть альбом.
- Владелец альбома, которым поделились через API, может отключить доступ по ссылке или закрыть доступ к альбому в приложении "Google Фото". В результате ваше приложение не сможет добавлять в альбом новых пользователей.
Чтобы поделиться альбомом:
- Следуйте рекомендациям по UX и получите явное согласие пользователя на создание общего альбома.
- Создайте альбом и запишите его
albumId. Если вы уже создали альбом, вы можете получить егоalbumId, составив список альбомов пользователя. - Вызовите
albums.share, используя нужныйalbumIdи задав параметры доступа. - Запишите значение
shareTokenв ответе. Токен общего доступа – это идентификатор общего альбома, который можно использовать в разных аккаунтах пользователей. - Теперь другой пользователь может выполнить аутентификацию в вашем приложении, а затем присоединиться к общему альбому, покинуть его или получить сведения о нем, используя его
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 Фото. Любой пользователь, у которого есть ссылка, может просматривать содержимое альбома, поэтому будьте осторожны. Поле Ссылка |
shareToken |
Токен, который используется, чтобы присоединиться к общему альбому, покинуть его или получить сведения о нем от имени пользователя, который не является владельцем. Ссылка |
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"
}
}