Собственный API Deezer под Linux: невозможно создать простое приложение

Я попытался создать простое приложение, которое будет подключаться к Deezer и воспроизводить одну песню. Я получил токен доступа и написал эту программу.
Целевая машина: linux x86_64
Версия API: v1.0.1

#include <iostream>
#include <deezer-api.h>
#include <deezer-player.h>

#define ACCESS_TOKEN "ACCESS TOKEN HERE"

int main(int argc, char **argv)
{
    dz_connect_configuration cfg = {0};
    cfg.app_id = "APP ID HERE";
    cfg.product_id = "product_id";
    cfg.product_build_id = "0.0.0";

    dz_connect_handle dz_handle = dz_connect_new(&cfg);
    if (dz_handle == nullptr)
    {
        return 100;
    }

    auto err_code = dz_connect_activate(dz_handle, nullptr);
    if (err_code > DZ_ERROR_NO_ERROR_ASYNC)
    {
        return err_code;
    }

    err_code = dz_connect_set_access_token(dz_handle, nullptr, nullptr, ACCESS_TOKEN);
    if (err_code > DZ_ERROR_NO_ERROR_ASYNC)
    {
        return err_code;
    }

    auto dz_player_handle = dz_player_new(dz_handle);
    if (dz_player_handle == nullptr)
    {
        return 200;
    }

    err_code = dz_player_activate(dz_player_handle, nullptr);
    if (err_code > DZ_ERROR_NO_ERROR_ASYNC)
    {
        return err_code;
    }

    err_code = dz_player_load(dz_player_handle, nullptr, nullptr, "dzmedia:///track/3135556");
    if (err_code > DZ_ERROR_NO_ERROR_ASYNC)
    {
        return err_code;
    }

    err_code = dz_player_play(dz_player_handle, nullptr, nullptr, DZ_PLAYER_PLAY_CMD_START_TRACKLIST, DZ_TRACKLIST_AUTOPLAY_MANUAL, DZ_INDEX_IN_PLAYLIST_CURRENT);
    if (err_code > DZ_ERROR_NO_ERROR_ASYNC)
    {
        return err_code;
    }
    std::cin.get();
    return 0;
}

Внезапно я столкнулся с проблемами. Первый запуск показывает мне этот вывод:

398748:201417 dz_bufferevent: [dz_bufferevent_on_activation:561] не удалось открыть /var/tmp/settings.dat

Я создал этот файл, но подозреваю, что он не должен быть пустым. После второго запуска с созданным файлом /var/tmp/settings.dat я получил следующий вывод:

[399206:328658 dz_crash_handler: [dz_crash_handler_init:284] Доступен обработчик сбоев
DZ_CRASHREPORT_SERVER_URL_ON_READ_DATA: 436] Ошибка-Открыть сбой ошибки: 7
399206: 329590 DZCRASHREPORT-SERVER-DISK: [DZ_CRASHREPORT_SERVER_URL_ON_READ_DATA: 436] Ошибка-Открыть ошибку: 7
39206: 32966. 436] ОШИБКА — Ошибка при открытии: 7
399206:329726 не удалось прочитать URL-сервер, ошибка: 0
399206:336505 pulseaudio-engine: [dz_audioengine_set_output_gain:1184] not init
399206:336520 pulseaudio-engine: [dz_audioengine_set_output_gain:1184] not init
399206:336577 игрок: [dz_player_play_licence:1756] неизвестная ошибка 131079

Я не могу понять, что я сделал не так?

ОБНОВЛЕНИЕ:
Собственный API Deezer: v1.0.1-v00349200

Все равно не повезло. Пробовал разные варианты "user_profile_path":

  • .
  • ./
  • ./user - создан в рабочем каталоге с правами 777
  • /вар/темп

В папке, созданной API, не было файлов.

Еще есть ошибки:

[dz_crashreport_server_url_on_read_data:436] ОШИБКА – Ошибка при открытии: 7
[dz_crash_report_sender_retrive_server_url_on_result:213] Ошибка – не удалось прочитать URL-адрес сервера, ошибка: 0

После добавления реализации обратных вызовов я вижу это:

  1. dz_connect_set_access_token вызывает обратный вызов dz_activity_operation_callback со статусом DZ_ERROR_CONNECT_SESSION_OFFLINE_MODE
  2. dz_player_play вызывает обратный вызов dz_player_onevent_cb с событием DZ_PLAYER_EVENT_PLAYLIST_TRACK_NO_RIGHT

Что ж, я проверил, что у меня есть права на воспроизведение этого трека.


person dpleshakov    schedule 08.05.2016    source источник


Ответы (1)


сообщение "could not open" просто информативно. Файл будет создан автоматически (или обновлен при обнаружении повреждения). Проблема кажется более связанной с dz_connect_configuration, вы должны установить "user_profile_path" на допустимый путь. Здесь будут храниться временные файлы пользователя. С уважением, Кирилл

ОБНОВЛЕНИЕ:

Несколько советов, которые также могут помочь:

  • Моя ошибка, одного звонка не хватает: dz_connect_cache_path_set(dz_handle, NULL, NULL, <user_profile_path>);

  • DZ_INDEX_IN_PLAYLIST_CURRENT нужно заменить на 0. Согласен, это не очевидно...

  • Убедитесь, что созданный вами access_token имеет автономный_доступ при вызове https://connect.deezer.com/oauth/auth.php?app_id=YOUR_APP_ID&redirect_uri=YOUR_REDIRECT_URI&perms=basic_access,email,offline_access (см.: http://developers.deezer.com/api/oauth и http://developers.deezer.com/api/permissions)

ОБНОВЛЕНИЕ 2. После моего последнего ответа я опубликовал пример кода на Github: https://github.com/deezer/native-sdk-samples

Предлагаю быстро посмотреть :)

Что я заметил в вашем полном коде, который вы прислали мне в частном порядке, так это то, что:

  • Вы не вызываете dz_connect_offline_mode(...,false); Это фактически инициирует процесс входа в Native SDK.

  • Вы не ждете, пока DZ_CONNECT_EVENT_USER_LOGIN_OK загрузится и проиграет трек.

С наилучшими пожеланиями,

Кирилл

person CyrilP    schedule 09.05.2016
comment
Спасибо за ответ, @CyrilP. Насчет settings.dat: приложение не создает/не обновляет этот файл. С рут-доступом такая же проблема. Установка "user_profile_path" на ./ или /var/tmp/ ничего не меняет, у меня та же проблема. - person dpleshakov; 09.05.2016
comment
Три новых пункта должны действительно помочь. Вы подтверждаете, что уже пробовали их все вместе? Если вы подтвердите, я предлагаю вам отправить электронное письмо по адресу [email protected] с вашим access_token. С уважением, Кирилл - person CyrilP; 16.05.2016
comment
Привет @CyrilP! Да, я сделал это, но все равно не повезло. У меня такие же ошибки. - person dpleshakov; 22.05.2016