Загрузка изображений через API от лица приложения
Любая игра или приложение может загружать изображения в Одноклассники без привязки к пользователю и, соответственно, без запроса у пользователя прав на загрузку изображений.
Традиционный процесс загрузки изображения в игре или приложении выглядит так:
- приложение добавляет право PHOTO_CONTENT в настройках в список необходимых прав;
- приложение запрашивает у пользователя право PHOTO_CONTENT через метод FAPI.UI.showPermissions;
- если пользователь отказал в выдаче права, то приложение не может загрузки изображение;
- если пользователь согласился предоставить это право, то вы можете загружать изображения от его лица.
- у изображений, загружаемых таким образом, есть ряд ограничений. Например, для каждого пользователя надо грузить отдельное изображение.
Механизм загрузки изображений от лица игры избавляет вас от необходимости запрашивать у пользователя права, а также позволяет использовать эти изображения для любых пользователей.
Эти изображения, например, вы можете использовать в таких механиках как публикация момента через метод FAPI.UI.postMediatopic, либо публикация момента через API-метод moments.commit.
Кроме самой загрузки новых изображений вы также можете:
- получать все изображения, загруженные в альбом приложения;
- получать изображение по его id;
- удалять приложение.
API для работы с изображениями
Для работы с API изображений вам доступны методы группы appext, а именно:
- appext.appPhotoGetUploadUrl - для получения URL, на который затем производится загрузка изображения;
- appext.appPhotoCreate - для добавления загруженного изображения в альбом приложения;
- appext.appPhotoDelete - для удаления загруженного изображения;
- appext.appPhotosGet - для получения всего списка изображений в альбоме приложения;
- appext.appPhotosGetById - для получения изображения из альбома приложения по его id.
На данный момент у каждого приложения может быть не более 100 загруженных в альбом изображений. Этот лимит может быть пересмотрен в будущем
Пример загрузки изображения
Процесс загрузки нового изображения производится в 3 этапа:
- Получение URL для загрузки изображения.
- Загрузка изображения.
- Сохранение изображения в альбом приложения.
Этап 1. Получение URL для загрузки изображения
URL вы можете получить через метод appext.appPhotoGetUploadUrl.
Ответ метода выглядит так:
{
"photo_ids": [
"wobNXMobiBRCqb8+oh7vAdqFsWk3ev/5o67gVZ3ayIADZ0azWM5NEF4Ba2s5uqlz"
],
"upload_url": "https://st.mycdn.me/uploadImage?apiToken=0lQm8Z3C7htZ%2FvHSfMKFNwPETBrgK2Wu6prS8d1Gb%2BDUW7DWFoXsD9XwtvRw8%2BvKbNdZLnBvjcs5DjatA9GIzDLqy1TyahHb4oAixvdoVXbT1uJryUSkSdjeB%2FCteE%2FF&photoIds=wobNXMobiBRCqb8%2Boh7vAdqFsWk3ev%2F5o67gVZ3ayIADZ0azWM5NEF4Ba2s5uqlz",
"expires_ms": 1716287854973
}
Где:
- upload_url - URL, на который необходимо загрузить изображение;
- photo_ids - идентификатор изображения;
- expires_ms - время жизни URL для загрузки изображения.
Этап 2. Загрузка изображения
Загрузка изображения осуществляется через POST-запрос на URL, полученный на первом этапе.
Пример загрузки выглядит так:
curl --form file='@test.png' -X POST https://st.mycdn.me/uploadImage?apiToken=0lQm8Z3C7htZ%2FvHSfMKFNwPETBrgK2Wu6prS8d1Gb%2BDUW7DWFoXsD9XwtvRw8%2BvKbNdZLnBvjcs5DjatA9GIzDLqy1TyahHb4oAixvdoVXbT1uJryUSkSdjeB%2FCteE%2FF&photoIds=wobNXMobiBRCqb8%2Boh7vAdqFsWk3ev%2F5o67gVZ3ayIADZ0azWM5NEF4Ba2s5uqlz
При успешной загрузке вы получите следующий ответ:
{
"photos": {
"wbGuWMaXQAB0bcOQ1FuWAhQDQdxtqrJemOK3JgZ9JlGslESV1suthS+evx5q0Myi": {
"token":"s5UrqmIkSsnh4LYLe28jOWuZSy5BWp3banIpVih1uAm3ZL930Y9wFGVh08c63TF6LvR+sAZMLsii1uvY+RZzt6V2EnYfBqIKsw50eMyqNOJzC8MjN5AJcTqG2h9Fr46v"
}
}
}
Где:
- ключ - id загруженного изображения;
- token - токен для загрузки изображения.
Оба этих параметра нужно запомнить, так как они используются для сохранения изображения на третьем этапе.
Этап 3. Сохранение изображения в альбом приложения
После успешной загрузки изображения вам остается его только сохранить с помощью метода appext.appPhotoCreate.
В параметре photo этого метода передается id и token, полученные в предыдущем этапе:
{
"photo_id": "bGuWMaXQAB0bcOQ1FuWAhQDQdxtqrJemOK3JgZ9JlGslESV1suthS+evx5q0Myi",
"token": "s5UrqmIkSsnh4LYLe28jOWuZSy5BWp3banIpVih1uAm3ZL930Y9wFGVh08c63TF6LvR+sAZMLsii1uvY+RZzt6V2EnYfBqIKsw50eMyqNOJzC8MjN5AJcTqG2h9Fr46v"
}
Если сохранение пройдет успешно, то в ответе методы вы получите статичную ссылку на изображение, а также его финальный id.