FinClip为企业提供小程序生态圈技术产品,开发者可在FinClip小程序开发帮助中心找到相关FinClip小程序指引

# Windows 集成

集成样例代码

可以在这里获取集成样例代码https://github.com/finogeeks/finclip-win32-demo (opens new window)

# 1. 获取 SDK KEY 及 SDK SECRET

使用 SDK 需要申请 SDK KEY 及 SDK SECRET ,只有在 SDK 初始化的时候配置了正确的 SDK KEY 及 SDK SECRET ,才能初始化成功并正常使用。

# 1.1 创建应用

注册用户需要登录「应用管理-新增合作应用」,完成应用创建;
image.png

# 1.2 获取 SDK KEY 及 SDK SECRET

创建应用并添加 Bundle ID后,若需要导出对应的 SDK KEY 与 SDK SECRET,请选择对应 Bundle ID 后的「复制」,即可通过 ctrl+vcommand+v 进行粘贴操作;
image.png

其中:

  • SDK KEY:是合作应用能使用小程序SDK的凭证,如果 SDK KEY 校验失败,则 SDK 的所有 API 都无法使用。
  • SDK SECERT:是访问服务的安全证书,不要给第三方。

提示

关于创建应用与获取 SDK KEY 及 SDK SECRET 的详细操作,见「介绍-操作指引-企业端操作指引-7.关联移动应用」一节。

# 2. 导入SDK

  1. 参考 安装第三方依赖 (opens new window)

# 3. SDK初始化

# 3.1 配置SDK并初始化

  IPackerFactory* factory = GetPackerFactory();
  IFinConfigPacker* configpacker = factory->GetFinConfigPacker();
  IFinConfig* config = configpacker->NewConfig();
  config->SetAppStore(app_store);
  config->SetApiPrefix("/api/v1/mop");
  config->SetAppKey(appkey.c_str());
  config->SetSecret(secret.c_str());
  config->SetDomain(domain.c_str());
  config->SetEncryptType(1);
  config->SetFinger("");
  config->SetAppWindowStyle(0);

  configpacker->AddConfig(config);
  Initialize(hInst, configpacker);

# 3.2 启动小程序

  int               appstore     = 1;
  IPackerFactory*   factory      = GetPackerFactory();
  IFinConfigPacker* configpacker = factory->GetFinConfigPacker();
  IFinConfig*       config       = configpacker->GetConfig(appstore);
  config->SetAppWindowStyle(std::stol(wtype));
  IFinPacker* packer = factory->GetFinPacker();
  packer->BeginPacker();
  packer->Add("appId", Utf8Encode(wappid).c_str());
  packer->Add("query", "1");
  packer->EndPacker();
  int   len = packer->GetBufferSize() + 1;
  auto* ret = new unsigned char[len];
  memset(ret, 0, len);
  packer->Dump(ret, &len);
  delete[] ret;
  StartApplet(hWnd_container, appstore, Utf8Encode(wappid).c_str(), "", packer, "", FinclipAppletCallback);

# 3.3 关键窗口消息处理

当使用嵌入模式, 小程序窗口嵌入在宿主窗口中, 当宿主窗口状态发生变化时, 部分消息的处理需要调用 SDK 提供的接口进行处理。

# 3.3.1 WM_SIZE

WM_SIZE是宿主窗口大小发生变化时的消息, 小程序窗口大小也需要跟着变化, 调用SetAppletPos通知小程序。

参考处理方式:

  RECT rect;
  GetClientRect(hWnd_container, &rect);
  SetAppletPos(Utf8Encode(std::wstring(appid)).c_str(),
                0,
                0,
                rect.right - rect.left,
                rect.bottom - rect.top,
                true);

# 3.3.2 WM_DESTROY

根据MSDN描述, WM_DESTROY是窗口已经关闭时发送的消息。 当宿主窗口关闭后,需要调用CloseApplet释放sdk内部的资源。

参考处理方式:

        if (hWnd == hWnd_container) {
            // 收到WM_DESTROY消息, 表示容器窗口被销毁, 需要释放SDK的资源
            // hWnd: 小程序所嵌入的窗口句柄
            // true 表示销毁小程序, false: 小程序窗口与宿主窗口解绑并隐藏
            CloseApplet(hWnd, true);
            hWnd_container = nullptr;
            return 0;
        }
        // demo(宿主)窗口关闭
        if (hWnd == gHwnd) {
            PostQuitMessage(0);
        }
© 2021 凡泰极客

👋🏻 嘿,你好!

「FinClip」是一套基于云原生框架设计的小程序容器。能够让任何移动应用在集成小程序SDK之后,获得可用、安全的小程序运行能力。

>> 点我免费注册体验

查看产品文档
了解与 FinClip 相关的一切信息

产品博客 👈  了解产品更新与核心功能介绍
资源下载 👈  获取小程序 SDK 与开发工具
文档中心 👈  查询 FinClip 小程序开发指南与答疑

商务咨询热线
预约 FinClip 产品介绍,咨询商务报价或私有化部署事宜

400-066-00210755-86967467

获取产品帮助
联系 FinClip 技术顾问,获取产品资料或加入开发者社群

联系线上
人工客服

或 👉  点击这里,提交咨询工单