Сигнатура метода

Обратите внимание, что публикация топика работает только для приложений, получивших аппрув. Для получения аппрува на работу виджета требуется прислать заявку на api-support@ok.ru

Это устаревшая версия SDK, которое рекомендуется использоваться только для приложений, запускаемых не в iframe
Для игр, запускаемых на Одноклассниках, рекомендуем использовать мультиплатформенное SDK

Метод для публикации топика в ленте пользователя с помощью виджета публикации.

OKSDK.Widgets.post(returnUrl, options)

Где:

  • returnUrl - URL, на который будет отправлен пользователь при закрытии окна с виджетом. Необязательный параметр;
  • options - дополнительные параметры виджета:
    • attachment - содержание публикуемого топика;
    • popup - выполнять ли автоматическое центрирование и подгонку размеров окна;
    • silent - закрывать окно автоматически после окончания операции. Игнорируется, если указан returnUrl;
    • utext - дать возможность пользователю указать свой текст в публикуемом медиатопике;
    • nohead - отображать ли вверху виджета шапку Одноклассников.

Полное описание дополнительных параметров доступно здесь, а также возможные блоки контента, которые можно указывать в топике, можно найти на странице виджета публикации.

Return URL message

Если при вызове виджета был указан параметр returnUrl и не указан параметр options.silent, то после выхода пользователя из окна виджета (успешная публикация, отмена публикации, ошибка публикации), он будет перенаправлен на указанный URL с передачей в URL дополнительных параметров.

Список параметров следующий:

  • result - результат работы виджета, объект со следующими возможными полями:
    • type - общий результат работы виджета, возможны следующие значения:
      • success - публикация выполнена успешно;
      • error - при попытке публикации произошла ошибка, либо публикация была отменена пользователем.
    • code - код произошедшей при публикации ошибки. В случае ошибки смотрите её описание на странице обработка ошибок
    • message - описание произошедшей ошибки;
    • id - id опубликованного топика. Если у вашего приложения нет аппрува, то id будет равен 0;
    • signature - подпись запроса для валидации.

Пример при успешной публикации топика

https://return.url/
   ?result={"type":"success","id":"123456789123456","signature":"5c1a50d97a870c2****9d68cda15756"}

Пример при отмене публикации пользователем

https://return.url/
   ?result={"type":"error","code":12,"message":"Operation was cancelled by user"}

Пример при ошибке публикации

https://return.url/
   ?result={"type":"error","code":104,"message":"Bad signature "}

Window postMessage

Если при вызове виджета не был указан параметр returnUrl и был указан параметр options.silent, то после выхода пользователя из окна виджета (успешная публикация, отмена публикации, ошибка публикации) в родительское окно будет отправлен postMessage с информацией о результате работы виджета.

Параметры сообщения (message.data) аналогичны тем, что передаются в параметре result при указании return URL.

Пример при успешной публикации

{
    "id": "69704158565649"
}

Пример при отмене публикации пользователем

{
    "error_code": "12",
    "error_msg": "Operation was cancelled by user",
    "message": "Operation was cancelled by user",
    "error": "12"
}

Пример при ошибке публикации

{
    "column": "0",
    "error_code": "4",
    "error_msg": "Invalid JSON at line 0 and column 0",
    "message": "Invalid JSON at line 0 and column 0",
    "error": "4",
    "line": "0"
}

Таким образом, можно задать eventListener, который будет каким-то образом обрабатывать это сообщение:

    window.addEventListener('message', function (widgetMessage) {
        console.log(JSON.stringify(widgetMessage.data));
        // обрабатываете сообщение от виджета здесь
    }, false);
    

Пример вызова

Пример вызова с returnUrl

OKSDK.Widgets.post(
    "https://some-return-url.com",
    {
        "attachment": {
            "media": [
                {
                    "type": "text",
                    "text": "Смотри какая новость"
                },
                {
                    "type": "link",
                    "url": "https://mail.ru/"
                }
            ]
        }
    }
)

Пример вызова с postMessage

OKSDK.Widgets.post(
    null,
    {
        "attachment": {
            "media": [
                {
                    "type": "text",
                    "text": "Играй и получай бонусы!"
                },
                {
                    "type": "app-ref",
                    "appId": 194424064
                }
            ]
        },
        "silent": true
    }
)

В результате вызова метода пользователю будет показано окно с превью топика, где он может подтвердить или отменить его публикацию:

Виджет публикации