Загрузка изображений через 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 этапа:

  1. Получение URL для загрузки изображения.
  2. Загрузка изображения.
  3. Сохранение изображения в альбом приложения.

Этап 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.