应用侧C++ SDK使用指南
物联网平台提供CPP语言的应用侧SDK供开发者使用。本文介绍应用侧 C++SDK的安装和配置,以及使用C++ SDK调用应用侧API的示例。
在Linux系统上安装SDK
- 获取依赖包。
- 所需的这些第三方软件包在大部分系统的包管理工具中都有提供,例如基于Debian/Ubuntu的系统。
sudo apt-get install libcurl4-openssl-dev libboost-all-dev libssl-dev libcpprest-dev
- spdlog需要从源码进行安装。
git clone https://github.com/gabime/spdlog.git cd spdlog mkdir build cd build cmake -DCMAKE_POSITION_INDEPENDENT_CODE=ON .. // 用以生成动态库 make sudo make install
- 所需的这些第三方软件包在大部分系统的包管理工具中都有提供,例如基于Debian/Ubuntu的系统。
- 编译安装。
git clone https://github.com/huaweicloud/huaweicloud-sdk-cpp-v3.git cd huaweicloud-sdk-cpp-v3 mkdir build cd build cmake .. make sudo make install
完成上述操作后,C++ SDK安装目录为“ /usr/local”。
在Windows系统上安装SDK
- 安装vcpkg并使用vcpkg安装所需软件包。
vcpkg install curl cpprestsdk boost openssl spdlog
- 使用CLion进行编译。
- 使用CLion打开huaweicloud-sdk-cpp-v3目录。
- 选择“File > Settings”。
- 选择“Build > Execution > Deployment > CMake”。
- 在CMake options中加入以下配置。
-DCMAKE_TOOLCHAIN_FILE={your vcpkg install dir}/scripts/buildsystems/vcpkg.cmake
- 右键CMakeLists.txt选择“Load CMake Project”。
- 配置clion的编译工具链为MSVC: 在2.c的CMake配置页面选择Toolchain为Visual Studio,不能选择mingw等其他编译器(windows平台下依赖msvc编译器, 选择mingw等其他编译器编译会报错)。另外,用户还可以选择编译出来的二进制文件是Debug模式还是Release模式, 选择Build Type进行下拉选择即可。
- 配置目标文件的架构和平台: windows平台支持编译不同CPU架构(x64, x86)的sdk链接库文件,用户可以根据实际需要进行配置,单击“Build > Execution, Deployment > Toolchains”,在Architecture选项可以下拉选择支持的CPU架构。
- 选择“Build”开始编译,编译结果会在clion控制台进行打印。
- 安装 C++ SDK。编译完成后选择“Build > Install”,完成后,C++ SDK安装目录为“C:\Program File (x86)\huaweicloud-sdk-cpp-v3”。
代码示例
以调用查询设备列表接口为例,以下代码示例向您展示使用C++ SDK的主要步骤:
- 创建认证。
- 创建IoTDAClient实例并初始化。
- 实例化请求对象。
- 调用查询设备列表接口。
#include <cstdio> #include <iostream> #include <huaweicloud/core/exception/Exceptions.h> #include <huaweicloud/core/Client.h> #include <huaweicloud/iotda/v5/IoTDAClient.h> using namespace HuaweiCloud::Sdk; using namespace HuaweiCloud::Sdk::Core; using namespace HuaweiCloud::Sdk::Core::Utils; using namespace HuaweiCloud::Sdk::Core::Exception; using namespace HuaweiCloud::Sdk::Iotda::V5; using namespace HuaweiCloud::Sdk::Iotda::V5::Model; using namespace std; int main(void) { // region_id:如果是上海一,请填写"cn-east-3";如果是北京四,请填写"cn-north-4";如果是华南广州,请填写"cn-south-1" std::string regionId = "<YOUR REGION ID>"; std::string projectId = "<YOUR PROJECTID>"; // ENDPOINT:请在控制台的"总览"界面的"平台接入地址"中查看“应用侧”的https接入地址。 std::string endpoint = "<YOUR ENDPOINT>"; std::string ak; std::string sk; #if defined(WIN32) || defined(__WIN32__) || defined(_WIN32) || defined(_MSC_VER) ak = getenv("HUAWEICLOUD_SDK_AK"); sk = getenv("HUAWEICLOUD_SDK_SK"); #elif defined(linux) || defined(__linux) || defined(__linux__) char* envVar; #define INIT_ENV_VAR(ID, NAME) \ do { \ if (envVar = secure_getenv(#NAME)) { \ ID = std::string(envVar); \ } \ } while (0) INIT_ENV_VAR(ak, HUAWEICLOUD_SDK_AK); INIT_ENV_VAR(sk, HUAWEICLOUD_SDK_SK); #undef INIT_ENV_VAR #endif auto basicCredentials = std::make_unique<BasicCredentials>(); // 标准版企业版请使用衍生算法,基础版删除该代码 basicCredentials->setDerivedPredicate(Constants::DEFAULT_DERIVED_PREDICATE); basicCredentials->withAk(ak) .withSk(sk) .withProjectId(projectId); auto client = HuaweiCloud::Sdk::Iotda::V5::IoTDAClient::newBuilder() .withCredentials(std::unique_ptr<Credentials>(basicCredentials.release())) .withRegion(Region(regionId, endpoint)) .build(); // Initialize request parameters HuaweiCloud::Sdk::Iotda::V5::Model::ListDevicesRequest request = HuaweiCloud::Sdk::Iotda::V5::Model::ListDevicesRequest(); try { std::string stringValue; std::cout << "************ListDevice***********" << std::endl; // 调用查询设备列表接口 std::shared_ptr<HuaweiCloud::Sdk::Iotda::V5::Model::ListDevicesResponse> listRes = client->listDevices(request); std::cout << listRes->getHttpBody() << std::endl; } catch (HostUnreachableException& e) { // handle exception std::cout << e.what() << std::endl; } catch (SslHandShakeException& e) { std::cout << e.what() << std::endl; } catch (RetryOutageException& e) { std::cout << e.what() << std::endl; } catch (CallTimeoutException& e) { std::cout << e.what() << std::endl; } catch (ServiceResponseException& e) { std::cout << "StatusCode: " << e.getStatusCode() << std::endl; std::cout << "ErrorCode: " << e.getErrorCode() << std::endl; std::cout << "ErrorMsg: " << e.getErrorMsg() << std::endl; std::cout << "RequestId: " << e.getRequestId() << std::endl; } return 0; }
- 如果您是在Linux系统中运行该代码,请复制上述文件到iotda_test.cpp。然后执行如下命令:
$ g++ -o iotda_test iotda_test.cpp --std=c++14 -liotda_v5 -lcore -lcrypto -lboost_system -lcpprest $ ./iotda_test # 下方会显示实际运行结果$
如果您是在Windows系统下使用cmake来管理工程,则需要在CMakeLists.txt 中引入sdk core包和服务包的相关依赖。可以参考下面的CMakeLists.txt 文件:
cmake_minimum_required(VERSION 3.16) project(demo) find_package(CURL REQUIRED) set(CMAKE_CXX_STANDARD 14) set(LINK_DIR "C:/Program Files (x86)/huaweicloud_cpp_sdk_v3/bin;") set(BIN_DIR "C:/Program Files (x86)/huaweicloud_cpp_sdk_v3/lib;") set(SERVICE_DIR "C:/Program Files (x86)/huaweicloud_cpp_sdk_v3/include;") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DBOOST_UUID_FORCE_AUTO_LINK") link_directories(${BIN_DIR}) include_directories(${SERVICE_DIR}) add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>") add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>") add_executable(demo main.cpp) target_link_libraries(demo PUBLIC core iotda_v5)
更多
项目源码及更多详细的使用指导请参考华为云开发者 C++ 软件开发工具包(C++ SDK)。
推荐您使用API在线调试工具API Explorer ,API Explorer 支持快速调试和检索,调试API的同时,可以根据您的参数实时生成各种开发语言的SDK示例代码,方便您直接根据示例代码使用SDK。