# 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 不会报错。