文档

C++ SDK使用说明

更新时间:

物联网平台提供的C++ SDK,可帮助开发人员通过C++程序更便捷地操作物联网平台。本文介绍云端C++ SDK的安装和配置,及使用C++ SDK调用云端API的示例。

使用前必读

本文操作步骤以普通用户权限为例。如果您在操作过程中涉及到管理员权限才能执行的操作,可尝试使用sudo命令执行。

说明

新版C++ SDK存在兼容性问题,建议您使用旧版C++ SDK。

安装SDK

安装必备依赖库

使用C++ SDK访问云端API前,请先安装必备的依赖库,包含依赖库如下:

安装方式如下:

  • 使用Homebrew安装。

    说明

    仅Mac系统下支持该命令的安装方式。

    brew install boost cpprestsdk openssl
  • 使用yum安装。

    sudo yum install boost-devel openssl-devel
  • 使用apt-get安装。

    # install boost
    sudo add-apt-repository ppa:mhier/libboost-latest -y
    sudo apt-get update
    sudo apt-get install libboost-all-dev
    
    sudo apt-get install libcpprest-dev libcurl4-openssl-dev libssl-dev
  • 使用vcpkg安装。

    vcpkg install boost openssl-windows cpprestsdk

安装IoT C++ SDK

  • Linux系统:

    # 从git代码仓库拉取C++ SDK源码。
    git clone https://github.com/alibabacloud-sdk-cpp/iot-20180120.git
    
    # 执行安装脚本命令。
    sh iot-20180120/scripts/install.sh
  • Windows系统:

    1. 使用git-bash执行以下命令,从Github克隆源码。

      git clone https://github.com/alibabacloud-sdk-cpp/iot-20180120.git
    2. 使用Visual Studio进行编译:

      1. 安装CMakeVisual Studio

      2. 在项目根目录下创建cmake_build文件夹。

      3. 打开CMake软件,选择Browse Source源代码目录(https://github.com/alibabacloud-sdk-cpp/iot-20180120.git)

      4. 选择Browse build为构建目录cmake_build,单击configure

      5. 单击generate,构建VS解决方案。

    3. 编译安装C++ SDK:

      1. 进入cmake_build目录,使用Visual Studio打开darabonba_core.sln解决方案。

      2. 选择构建Release输出,并打开配置管理器选中INSTALL

      3. 单击构建 > 生成解决方案,完成SDK安装。

升级版SDK更多信息,请参见alibabacloud-cpp-sdk

初始化SDK

  1. 创建Alibabacloud_OpenApi::Config配置类实例,存放SDK初始化信息(AccessKey IDAccessKey Secret、地域ID等)。

  2. 通过Alibabacloud_Iot20180120::Client(config)方法加载SDK信息,创建客户端实例,完成SDK客户端初始化。

    后续调用API的RequestResponse参数从Alibabacloud_Iot20180120中获取。

以华东2(上海)地域及其服务接入地址为例,初始代码如下。实际场景设置中,需使用您的物联网平台服务所在地域。

#include <alibabacloud/iot_20180120.hpp>
#include <alibabacloud/open_api.hpp>
#include <map>

Alibabacloud_Iot20180120::Client createClient() {
    shared_ptr<Alibabacloud_OpenApi::Config> config = make_shared<Alibabacloud_OpenApi::Config>(map<string, boost::any>({
        // 您的AccessKey ID
        {"accessKeyId", std::getenv("ACCESS_KEY_ID") != nullptr ? boost::any(std::getenv("ACCESS_KEY_ID")) : boost::any()},
        // 您的AccessKey Secret
        {"accessKeySecret", std::getenv("ACCESS_KEY_SECRET") != nullptr ? boost::any(std::getenv("ACCESS_KEY_SECRET")) : boost::any()}
    }));
    // 访问的域名
    config->regionId = make_shared<string>("cn-shanghai");
    return Alibabacloud_Iot20180120::Client(config);
}

参数

说明

accessKeyId

您阿里云账号的AccessKey ID

您可在阿里云官网控制台AccessKey管理中创建或查看您的AccessKey。

accessKeySecret

您阿里云账号的AccessKey Secret

regionId

您的物联网平台服务的地域ID,用于拼接服务接入地址,格式为:iot.${RegionId}.aliyuncs.com。

您可在物联网平台控制台左上方,查看当前服务所在地域。

地域ID的表达方法,请参见支持的地域

发起调用

物联网平台云端SDK为每个API封装两个类,分别命名为${API名称}+"Request"${API名称}+"Response",分别用于承载API的调用请求和调用结果。

调用步骤

  1. 已完成SDK客户端初始化。具体内容,请参见初始化SDK

  2. 创建对应API的调用请求,生成${API名称}+"Request"类对象实例request

  3. 通过对象实例request,设置API所需的请求参数值。

  4. 创建${API名称}+"Response"类的对象实例response承载响应结果:使用Client对象实例client${API名称}(request)方法,获取API对应request的响应结果,包含服务端响应的bodyheaders

  5. 通过对象实例responsebody成员对象,可获取对应返回参数的值。

    例如:requestId :String requestId = response.body.getRequestId();用于获取阿里云为API请求生成的唯一标识符,其中RequestId为API的通用返回参数。通用返回参数还包含SuccessErrorMessageCode

  6. 使用catch()方法处理异常报错。

物联网平台云端API,请参见API列表。有关request中请求参数说明,及response中返回参数说明,请参见对应API文档。

本文以调用Pub接口发布消息到Topic为例。请求参数信息,请参见Pub

重要

以下代码中${iotInstanceId}为实例ID值。您可在物联网平台控制台的实例概览页面,查看当前实例的ID值

  • 若有ID值,必须传入该ID值,否则调用API会失败。

  • 若无实例概览页面或ID值,则无需传入ID值。您需删除IotInstanceId相关的请求代码,或传入空值"",否则调用API会失败。

实例的详细说明,请参见实例概述。购买实例方法,请参见购买企业版实例。常见问题,请参见物联网平台实例相关问题

shared_ptr<Alibabacloud_Iot20180120::Client> client = make_shared<Alibabacloud_Iot20180120::Client>(createClient(make_shared<string>("ACCESS_KEY_ID"), make_shared<string>("ACCESS_KEY_SECRET")));
shared_ptr<Alibabacloud_Iot20180120::PubRequest> request = make_shared<Alibabacloud_Iot20180120::PubRequest>(map<string, boost::any>({
    {"iotInstanceId", boost::any(string("${iotInstanceId}"))},
    {"qos", boost::any(0)},
    {"productKey", boost::any(string("${productKey}"))},
    {"messageContent", boost::any(string("eyJ0ZXN0IjoidGFzayBwdWIgYnJvYWRjYXN0In0"))},
    {"topicFullName", boost::any(string("/${productKey}/${deviceName}/user/get"))}
}));
shared_ptr<Alibabacloud_Iot20180120::PubResponse> response = make_shared<Alibabacloud_Iot20180120::PubResponse>(client->pub(request));

完整代码示例

说明

实际场景中,请参照上文的参数说明,替换对应参数值。

#include <alibabacloud/iot_20180120.hpp>
#include <alibabacloud/open_api.hpp>
#include <boost/any.hpp>
#include <darabonba/console.hpp>
#include <darabonba/util.hpp>
#include <iostream>
#include <map>

using namespace std;

Alibabacloud_Iot20180120::Client createClient() {
  shared_ptr<Alibabacloud_OpenApi::Config> config = make_shared<Alibabacloud_OpenApi::Config>(map<string, boost::any>({
    // 您的AccessKey ID。
    {"accessKeyId", std::getenv("ACCESS_KEY_ID") != nullptr ? boost::any(std::getenv("ACCESS_KEY_ID")) : boost::any()},
    // 您的AccessKey Secret。
    {"accessKeySecret", std::getenv("ACCESS_KEY_SECRET") != nullptr ? boost::any(std::getenv("ACCESS_KEY_SECRET")) : boost::any()}
  }));
  // 访问的域名。
  config->endpoint = make_shared<string>("iot.cn-shanghai.aliyuncs.com");
  return Alibabacloud_Iot20180120::Client(config);
}


int main(int argc, char *args[]) {
  args++;
  try {
      shared_ptr<Alibabacloud_Iot20180120::Client> client = make_shared<Alibabacloud_Iot20180120::Client>(createClient(make_shared<string>("ACCESS_KEY_ID"), make_shared<string>("ACCESS_KEY_SECRET")));
      shared_ptr<Alibabacloud_Iot20180120::PubRequest> pubRequest = make_shared<Alibabacloud_Iot20180120::PubRequest>(map<string, boost::any>({
        {"iotInstanceId", boost::any(string("${iotInstanceId}"))},
        {"qos", boost::any(0)},
        {"productKey", boost::any(string("${productKey}"))},
        {"messageContent", boost::any(string("eyJ0ZXN0IjoidGFzayBwdWIgYnJvYWRjYXN0In0"))},
        {"topicFullName", boost::any(string("/${productKey}/${deviceName}/user/get"))}
      }));
      shared_ptr<Alibabacloud_Iot20180120::PubResponse> response = make_shared<Alibabacloud_Iot20180120::PubResponse>(client->pub(pubRequest));
      Darabonba_Console::Client::log(make_shared<string>(Darabonba_Util::Client::toJSONString(make_shared<map<string, boost::any>>(resp->toMap()))));
  } catch(exception& e) {
      std::cout << e.what << std::endl;
  }
}   

附录:示例代码

前往物联网平台云端SDK示例中心查看或下载API调用的示例代码。示例代码中包含Java、Python、PHP、Node.js、Go、C++和.NET等版本SDK示例。

阿里云OpenAPI开发者门户提供API在线调试工具。在API调试页面,您可以快速检索和体验调用API。系统会根据您输入的参数同步生成各语言SDK的代码示例。各语言SDK代码示例显示在页面右侧SDK示例页签下供您参考。在调用结果页签下,可查看API调用的真实请求URL和JSON格式的返回结果。

  • 本页导读 (1)
文档反馈