随笔 - 2649  文章 - 2452  评论 - 0  阅读 - 74060

设备 - (v1)ActivateDevice

ActivateDevice

建议使用 WMPFBoot.init + WMPFDeviceApi.activateDevice 接口.

除特殊说明外,所有其他接口都需在该接口调用成功后才能使用,失败时请重试。

用于激活设备。每次 WMPF 启动后都需要调用一次。

调用参数

在完成接入流程的所有步骤后,方可获取到 productIdkeyVersiondeviceIdsignature

属性 必填 类型 说明 最低版本
productId int 产品 id
keyVersion int 密钥版本
deviceId string 设备 id
signature string 签名(不需要换行符)
hostAppId string 移动应用的 AppId ,微信开放平台申请
features string[] 声明使用的特性。目前支持:voip-device WMPF 1.2.0
  • 注:对于同一台设备,hostAppId、productId、keyVersion、deviceId 在生产环境应保持不变。如果在开发调试过程中,这几个参数和上次激活时发生变化,会报错 DEVICE_CHANGED,需要手动清除 WMPF Service Apk 的应用数据。

features

返回参数

属性 说明
invokeToken 调用凭证,用于后续操作

示例代码

val request = WMPFActivateDeviceRequest().apply {
    this.baseRequest = WMPFBaseRequestHelper.checked()
    this.productId = productId
    this.keyVersion = keyVerion
    this.deviceId = deviceId
    this.signature = signature.replace(Regex("[\t\r\n]"), "")
    this.hostAppId = hostAppId
}

val result =
    WMPFIPCInvoker.invokeAsync<IPCInvokerTask_ActivateDevice, WMPFActivateDeviceRequest, WMPFActivateDeviceResponse>(
        request,
        IPCInvokerTask_ActivateDevice::class.java,
        object : IPCInvokeCallbackEx<WMPFActivateDeviceResponse> {
            override fun onBridgeNotFound() {
                it.onError(Exception("bridge not found"))
            }

            override fun onCallback(response: WMPFActivateDeviceResponse) {
                if (isSuccess(response)) {
                    if (response != null && !response.invokeToken.isNullOrEmpty()) {
                        initInvokeToken(response.invokeToken)
                    }

                    it.onSuccess(response)
                } else {
                    it.onError(TaskErrorException(createTaskError(response)))
                }
            }

            override fun onCaughtInvokeException(exception: java.lang.Exception?) {
                if (exception != null) {
                    it.onError(exception)
                } else {
                    it.onError(java.lang.Exception("null"))
                }
            }
        })

if (!result) {
    it.onError(Exception("invoke activateDevice fail"))
}

注意

  • 强烈推荐注册 onBridgeNotFound 、onCallback 失败回调,一旦激活失败,请重试。
  • 可以先通过 ActiveStatus 判断是否设备是否已激活。
  • signature err 是指后台发现签名中的参数与本接口传入的参数不匹配。在检验签名无误的情况下,建议按照下列指引检查:
    • 确认 WMPF 升级到 v1.1.5 及以上版本;
    • 确认生成签名时的 productId、deviceId 和所使用密钥的版本(keyVersion) 与 ActivateDevice 传入的参数一致。
    • 在开发者后台生成签名时,生成签名环境的 openssl 版本推荐使用 1.1.1,已确定 1.0.x 和 3.0.x 版本会有问题,其它版本开发者可自行尝试。
  • 签名校验成功只能说明签名中包含的参数和校验时提供的参数一致,并不代表 ActivateDevice 不会报错。
posted on   AtlasLapetos  阅读(1)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
< 2025年3月 >
23 24 25 26 27 28 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 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示