更新时间:2024-07-30 GMT+08:00

场景1:初始化

描述

在第三方APP启动时,需要先初始化SDK,才能调用SDK的功能接口,该接口只需调用一次。

业务流程

SDK初始化时,先修改HwmSdk文件夹下HwmSdk.exe文件的名称,再调用Init接口,然后处理回调函数OnInitResult。

  1. 修改exe文件名称

    修改HwmSdk文件夹下HwmSdk.exe文件名称为MySdk.exe。

  2. 接口调用

    1. 构建数据结构HwmInitInfo。
      1. 定义派生类demoNotifyProc继承于基类HwmAgentNotify,新建派生类对象。
        1
        static demoNotifyProc *notifyObj = new demoNotifyProc();
        
      1. 定义派生类demoCallbackProc继承于基类HwmAgentCallback,新建派生类对象。
        1
        static demoCallbackProc *callbackObj = new demoCallbackProc();
        
      1. 构建其他变量。
    2. 调用Init接口,完成配置初始化,第1步中的数据作为参数。

  3. 处理回调函数

    处理回调函数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);
 
}

典型场景和接口参考中的示例代码仅作为示例用的伪代码,不能直接使用。