解释:由于宿主应用并不一定强制用户登录,因此用户也有可能处于未登录状态。此时开发者可能不希望通过实现登录强制用户登录,而是希望直接使用用户的设备标识来关联用户,存储一些非敏感的数据。因此智能小程序提供了一个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 | 系统拒绝 |