# PrefetchDeviceToken

> 建议使用 [WMPFMiniProgramDeviceApi.prefetchDeviceToken](/doc/oplatform/Miniprogram_Frame/api/cli/miniprogramdevice/prefetchDeviceToken) 接口.

> WMPF 2.1.0 开始，本接口不需要 `ActivateDevice` 即可使用。

预拉取设备凭证。

在某些需要使用设备凭证的场景，可以提前拉取设备凭证。预拉取后，在凭证有效期内（目前为 1 小时），框架使用时可以直接从缓存读取，不需要重新请求。

例如：发起小程序音视频通话（for 硬件）前，预拉取设备凭证可以降低发起通话的耗时。

**WMPF 1.2.0 版本开始支持。**

## 注意事项

- **注册是否成功以返回值里的 `errMsg` 为准（errMsg 非空为失败）**，而不以接口调用是否成功。

## 调用参数

无

## 返回参数

| 属性   | 类型   | 说明     |
|--------|--------|----------|
| errMsg | string | 错误详情 |

## 示例代码

```kotlin
fun prefetchDeviceToken(): Single {
    return Single.create {
        val request = WMPFPrefetchDeviceTokenRequest().apply {
            this.baseRequest = WMPFBaseRequestHelper.checked()
        }

        val result = WMPFIPCInvoker.invokeAsync(
            request,
            IPCInvokerTask_PrefetchDeviceToken::class.java,
            object : IPCInvokeCallbackEx {
                override fun onCallback(response: WMPFPrefetchDeviceTokenResponse) {
                    if (isSuccess(response)) {
                        it.onSuccess(response)
                    } else {
                        it.onError(TaskErrorException(createTaskError(response)))
                    }
                }

                override fun onBridgeNotFound() {
                    it.onError(Exception("bridge not found"))
                }

                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 prefetchDeviceToken fail"))
        }
    }
}
```
