Нативный 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] Доступен обработчик сбоев
399206: 329404 dzcrashreport-server-disk: [dz_crashreport_server_url_on_read_data: 436] ОШИБКА — Ошибка при открытии: 7
399206: 329533 dzcrashreport-server-disk: [dz_crashreport_server_url_on_read_data: 436] ОШИБКА — Ошибка открытия: 7
399206: 329590 dzcrashreport-server-disk: [dz_crashreport_server_url_on_read_data: 436] ОШИБКА — Ошибка открытия: 7
399206: 329664 dzcrashreport-server-disk: [dz_crashreport_server_url_on_read_data: 436] ОШИБКА — Ошибка открытия: 7
399206: 329726 dzcrashreport-server-disk: [dz_crashreport_server_url_on_read_data: 436] ОШИБКА — Ошибка открытия: 7
399206: 329736 отправитель dzcrashreport-отправителя: [dz_crash_report_sender_retrieve_server_url_on_result: 213] Ошибка — не удалось прочитать сервер URL.
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

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

ОБНОВИТЬ:
Deezer Native API: v1.0.1-v00349200

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

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

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

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

[dz_crashreport_server_url_on_read_data: 436] ОШИБКА — Ошибка открытия: 7
[dz_crash_report_sender_retrieve_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

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

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 имеет offline_access включить при звонке 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 загрузить и воспроизвести трек.

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

Сирил

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]