C++ SDK使用说明
物联网平台提供的C++ SDK,可帮助开发人员通过C++程序更便捷地操作物联网平台。本文介绍云端C++ SDK的安装和配置,及使用C++ SDK调用云端API的示例。
新版C++ SDK存在兼容性问题,建议您使用旧版C++ SDK。
安装SDK
安装必备依赖库
使用C++ SDK访问云端API前,请先安装必备的依赖库,包含依赖库如下:
安装方式如下:
使用Homebrew安装。
说明仅Mac系统下支持该命令的安装方式。
brew install boost cpprestsdk openssl
使用yum安装。
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系统:
使用git-bash执行以下命令,从Github克隆源码。
git clone https://github.com/alibabacloud-sdk-cpp/iot-20180120.git
使用Visual Studio进行编译:
在项目根目录下创建cmake_build文件夹。
打开CMake软件,选择Browse Source为源代码目录(https://github.com/alibabacloud-sdk-cpp/iot-20180120.git)。
选择Browse build为构建目录cmake_build,单击configure。
单击generate,构建VS解决方案。
编译安装C++ SDK:
进入cmake_build目录,使用Visual Studio打开darabonba_core.sln解决方案。
选择构建Release输出,并打开配置管理器选中INSTALL。
单击构建 > 生成解决方案,完成SDK安装。
升级版SDK更多信息,请参见alibabacloud-cpp-sdk。
初始化SDK
创建
Alibabacloud_OpenApi::Config
配置类实例,存放SDK初始化信息(AccessKey ID、AccessKey Secret、地域ID等)。通过
Alibabacloud_Iot20180120::Client(config)
方法加载SDK信息,创建客户端实例,完成SDK客户端初始化。后续调用API的Request和Response参数从
Alibabacloud_Iot20180120
中获取。
以华东2(上海)地域及其服务接入地址为例,初始代码如下。实际场景设置中,需使用您的物联网平台服务所在地域。
#include <alibabacloud/iot_20180120.hpp>
#include <alibabacloud/open_api.hpp>
#include <map>
Alibabacloud_Iot20180120::Client createClient(shared_ptr<string> accessKeyId, shared_ptr<string> accessKeySecret) {
shared_ptr<Alibabacloud_OpenApi::Config> config = make_shared<Alibabacloud_OpenApi::Config>(map<string, boost::any>({
// 您的AccessKey ID
{"accessKeyId", !accessKeyId ? boost::any() : boost::any(*accessKeyId)},
// 您的AccessKey Secret
{"accessKeySecret", !accessKeySecret ? boost::any() : boost::any(*accessKeySecret)}
}));
// 访问的域名
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的调用请求和调用结果。
调用步骤
已完成SDK客户端初始化。具体内容,请参见初始化SDK。
创建对应API的调用请求,生成
${API名称}+"Request"
类对象实例request。通过对象实例request,设置API所需的请求参数值。
创建
${API名称}+"Response"
类的对象实例response承载响应结果:使用Client对象实例client的${API名称}(request)
方法,获取API对应request的响应结果,包含服务端响应的body和headers。通过对象实例response的body成员对象,可获取对应返回参数的值。
例如:
requestId :String requestId = response.body.getRequestId();
用于获取阿里云为API请求生成的唯一标识符,其中RequestId为API的通用返回参数。通用返回参数还包含Success、ErrorMessage和Code。使用
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<string> accessKeyId, shared_ptr<string> accessKeySecret) {
shared_ptr<Alibabacloud_OpenApi::Config> config = make_shared<Alibabacloud_OpenApi::Config>(map<string, boost::any>({
// 您的AccessKey ID。
{"accessKeyId", !accessKeyId ? boost::any() : boost::any(*accessKeyId)},
// 您的AccessKey Secret。
{"accessKeySecret", !accessKeySecret ? boost::any() : boost::any(*accessKeySecret)}
}));
// 访问的域名。
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格式的返回结果。