C++ linux下的Deezer本机API:无法创建简单应用程序

C++ linux下的Deezer本机API:无法创建简单应用程序,c++,linux,deezer,C++,Linux,Deezer,我试图创建一个简单的应用程序,它可以连接到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) {

我试图创建一个简单的应用程序,它可以连接到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;
}
#包括
#包括
#包括
#定义访问令牌“此处访问令牌”
int main(int argc,字符**argv)
{
dz_connect_配置cfg={0};
cfg.app_id=“此处的app id”;
cfg.product_id=“product_id”;
cfg.product\u build\u id=“0.0.0”;
dz_connect_handle dz_handle=dz_connect_new(&cfg);
if(dz_handle==nullptr)
{
返回100;
}
自动错误代码=dz_连接激活(dz_手柄,空PTR);
如果(错误代码>DZ错误\u无错误\u异步)
{
返回错误代码;
}
err_code=dz_connect_set_access_token(dz_handle,nullptr,nullptr,access_token);
如果(错误代码>DZ错误\u无错误\u异步)
{
返回错误代码;
}
自动dz_播放器手柄=dz_播放器新(dz_手柄);
如果(dz_玩家_句柄==nullptr)
{
返回200;
}
err_code=dz_player_activate(dz_player_句柄,nullptr);
如果(错误代码>DZ错误\u无错误\u异步)
{
返回错误代码;
}
err_code=dz_player_load(dz_player_句柄,nullptr,nullptr,“dzmedia:///track/3135556");
如果(错误代码>DZ错误\u无错误\u异步)
{
返回错误代码;
}
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);
如果(错误代码>DZ错误\u无错误\u异步)
{
返回错误代码;
}
std::cin.get();
返回0;
}
我突然遇到了问题。 第一次运行显示了以下输出:

398748:201417 dz_bufferevent:[dz_bufferevent_启动:561]无法打开/var/tmp/settings.dat

我创建了这个文件,但我怀疑它不应该是空的。 使用/var/tmp/settings.dat创建的第二次运行后,我得到以下输出:

399206:328658 dz_crash_handler:[dz_crash_handler_init:284]可用的崩溃处理程序
399206:329404 dzcrashreport服务器磁盘:[dz_crashreport_服务器_url_on_read_数据:436]错误-打开失败错误:7
399206:329533 dzcrashreport服务器磁盘:[dz_crashreport_服务器_url_on_read_数据:436]错误-打开失败错误:7
399206:329590 dzcrashreport服务器磁盘:[dz_crashreport_服务器_url_on_read_数据:436]错误-打开失败错误:7
399206:329664 dzcrashreport服务器磁盘:[dz_crashreport_服务器_url_on_read_数据:436]错误-打开失败错误:7
399206:329726 dzcrashreport服务器磁盘:[dz_crashreport_服务器_url_on_read_数据:436]错误-打开失败错误:7
399206:329736 dzcrashreport发送方:[dz_崩溃报告_发送方_检索_服务器_url_关于_结果:213]错误-无法读取url服务器错误:0
399206:336505脉冲音频引擎:[dz_audioengine_set_output_gain:1184]未初始化
399206:336520脉冲音频引擎:[dz_audioengine_set_output_gain:1184]未初始化
399206:336577玩家:[dz玩家游戏许可证:1756]未知错误131079

我不明白,我做错了什么

更新:
Deezer原生API:v1.0.1-v00349200

还是不走运。尝试了不同版本的
“用户\u配置文件\u路径”

  • ./
  • ./user-在工作目录中创建,具有777权限
  • /var/tmp
API创建的文件夹中没有文件

仍然有错误:

[dz_crashreport_server_url_on_read_data:436]错误-打开失败错误:7
[dz_崩溃_报告_发件人_检索_服务器_url_on_结果:213]错误-无法读取url服务器错误:0

在添加回调实现后,我看到了以下内容:

  • dz\u connect\u set\u access\u token
    callback
    dz\u activity\u operation\u callback
    状态为
    dz\u ERROR\u connect\u SESSION\u OFFLINE\u MODE
  • dz_player_play
    调用回调
    dz_player_onevent_cb
    事件
    dz_player_event_PLAYLIST_TRACK_NO_RIGHT
  • 嗯,我检查了我是否有权播放这首曲目。

    消息“无法打开”只是提供信息。 该文件将自动创建(或在检测到损坏时更新)。 问题似乎更多地与dz_connect_配置有关,您必须将
    “用户配置文件路径”
    设置为有效路径。这是存储用户临时文件的地方。 当做 西里尔

    更新:

    以下几点提示也有帮助:

    • 我搞错了,一个电话似乎不见了:
      dz_连接缓存路径集(dz_句柄,NULL,NULL,)

    • 当前播放列表中的
      DZ\u索引必须替换为
      0
      。我同意这一点并不明显

    • 检查您创建的访问令牌在调用
      https://connect.deezer.com/oauth/auth.php?app_id=YOUR_APP_ID&redirect_uri=YOUR_REDIRECT_URI&perms=basic_access,电子邮件,脱机访问
      (cf:and)

    更新2: 自上次回答后,我在Github上发布了一个示例代码:

    我建议您快速查看:)

    我注意到您私下发给我的完整代码是:

    • 您没有调用
      dz_connect_offline_模式(…,false)
      它实际上会触发本机SDK的登录过程

    • 您没有等待
      DZ_CONNECT_EVENT_USER_LOGIN_OK
      加载并播放曲目

    致以最良好的祝愿


    西里尔

    谢谢你的回复,@cyrip。关于settings.dat:应用程序不创建/更新此文件。与root访问相同的问题。将
    “user\u profile\u path”
    设置为
    /
    /var/tmp/
    不会改变任何事情,我遇到了同样的问题。这三个新点应该真的很有帮助。你确认你已经试过所有的方法了吗?如果您确认,我建议您发送电子邮件至deezerdevs@deezer