场景1:初始化
描述
在第三方APP启动时,需要先初始化SDK,才能调用SDK的功能接口,该接口只需调用一次。
业务流程
SDK初始化时,先修改HwmSdk文件夹下HwmSdk.exe文件的名称,再调用Init接口,然后处理回调函数OnInitResult。
- 修改exe文件名称
修改HwmSdk文件夹下HwmSdk.exe文件名称为MySdk.exe。
- 接口调用
- 构建数据结构HwmInitInfo。
- 定义派生类demoNotifyProc继承于基类HwmAgentNotify,新建派生类对象。
1
static demoNotifyProc *notifyObj = new demoNotifyProc();
- 定义派生类demoCallbackProc继承于基类HwmAgentCallback,新建派生类对象。
1
static demoCallbackProc *callbackObj = new demoCallbackProc();
- 构建其他变量。
- 定义派生类demoNotifyProc继承于基类HwmAgentNotify,新建派生类对象。
- 调用Init接口,完成配置初始化,第1步中的数据作为参数。
- 构建数据结构HwmInitInfo。
- 处理回调函数
处理回调函数OnInitResult。
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
/** *初始化接口,拉起应用 */ int CdemoBeforeLoginDlg::Init() { //组装入参结构体 hwmsdkagent::HwmInitInfo initParam; memset(&initParam, 0, sizeof(HwmInitInfo)); //(win32平台不需要)x64平台需要设置sdk路径,即exe文件路径,对exe文件重命名后,需要对应修改 //将路径转换为UTF8格式后拷贝给initParam,此处省略转换代码 strcpy_s(initParam.exePath, HWM_MAX_FILE_PATH_LEN, GetHwmSdkExePath().c_str()); //指定日志路径,将路径转换为UTF8格式后拷贝给initParam,此处省略转换代码 strcpy_s(initParam.logPath, HWM_MAX_FILE_PATH_LEN, GetLogPath().c_str()); //指定数据路径,将路径转换为UTF8格式后拷贝给initParam,此处省略转换代码 strcpy_s(initParam.userDataPath, HWM_MAX_FILE_PATH_LEN, GetUserDataPath().c_str()); strncpy_s(initParam.appId, GetAppId.c_str(), HWM_MAX_APPID_LEN); initParam.notify = notifyObj; initParam.callback = callbackObj; initParam.authType = hwmsdkagent::HWM_AUTH_TYPE_APPID; int ret = hwmsdkagent::Init(&initParam); return ret; } |
exePath参数取值是HwmSdk目录的上级父目录,例如HwmSdk目录是E:\Hello_World\debug\win32\HwmSdk时,exePath的取值是E:\Hello_World\debug\win32\。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
/** * 初始化回调 */ void demoCallbackProc::OnInitResult(hwmsdk::HwmErrCode ret, const char* msg, HwmSdkInfo *sdkInfo) { CString codeStr; codeStr.Format(_T("%d"), ret); string msgStr = CTools::UTF82MultiByte(msg); string verStr = ""; if (sdkInfo != NULL) { verStr = CTools::UTF82MultiByte(sdkInfo->version); } CString tips = _T("OnInitResult code:") + codeStr + _T(", msg:") + CString(msgStr.c_str()) + _T(" version:") + CString(verStr.c_str()); AfxMessageBox(tips); } |
典型场景和接口参考中的示例代码仅作为示例用的伪代码,不能直接使用。