解释:由于宿主应用并不一定强制用户登录,因此用户也有可能处于未登录状态。此时开发者可能不希望通过实现登录强制用户登录,而是希望直接使用用户的设备标识来关联用户,存储一些非敏感的数据。因此智能小程序提供了一个swanid的标识,开发者可将其视作用户的设备标识,swanid的机制说明如下:

开发者可通过swan.getSwanId()方法:
Object object
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| success | Function | 否 | 接口调用成功的回调函数 | |
| fail | Function | 否 | 接口调用失败的回调函数 | |
| complete | Function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
| 参数 | 类型 | 说明 |
|---|---|---|
| errno | String | errno |
| data | Object | {swanid} |
在开发者工具中打开
在开发者工具中打开
在 WEB IDE 中打开
扫码体验
代码示例
请使用百度APP扫码
{{item.key}} {{item.value}}
Page({data: {infoList: [{key: 'swanid',value: ''}, {key: 'swanid_old',value: ''}, {key: 'swanid_old_signature',value: ''}, {key: 'swanid_signature',value: ''}]},getSwanId(e) {swan.getSwanId({success: res => {console.log('res', res.data);// 更新数据this.updateInfoList(res.data);},fail: err => {swan.showToast({title: '获取失败'});}});},clearSwanId() {this.updateInfoList({});},updateInfoList(res) {let infoList = this.getData('infoList');for (let i = 0; i < infoList.length; ++i) {if (res[infoList[i].key] === '') {infoList[i].value = '暂无';}else {infoList[i].value = res[infoList[i].key];}}this.setData('infoList', infoList);}});
/*** 生成签名* appkey 小程序标识* secret_key 小程序私钥* swanid 用户swanid*/func generageSignature(appKey, secrectKey, swanID string) string {plainText := fmt.Sprintf("appkey=%ssecret_key=%sswanid=%s", appKey, secrectKey, swanID)md5Sum := md5.Sum([]byte(plainText))return hex.EncodeToString(md5Sum[:])}
/*** 生成 signature 校验码* appKey 小程序标识* secretKey 小程序私钥* swanId 用于 swanId*/function generageSignature($appKey, $secrectKey, $swanId){$plainText = sprintf("appkey=%ssecret_key=%sswanid=%s", $appKey, $secrectKey, $swanId);return md5($plainText);}
| 错误码 | 说明 |
|---|---|
| 201 | 解析失败,请检查调起协议是否合法 |
| 1001 | 执行失败 |
| 10001 | 内部错误 |
| 10002 | 网络无连接 |
| 错误码 | 说明 |
|---|---|
| 202 | 解析失败,请检查参数是否正确 |
| 10001 | 内部错误 |
| 10002 | 网络无连接 |
| 10004 | 用户拒绝(user not login) |
| 10005 | 系统拒绝 |