swan.getSwanId

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

  • 用户在同一台设备上使用同一个开发者所开发的不同智能小程序,得到的是相同的 swanid ;
  • 用户在同一台设备上使用不同开发者所开发的不同智能小程序,得到的 swanid 是不同的。

开发者可通过swan.getSwanId()方法:

  • 获取 swanid ,swanid 长度不超过 100 个字符;
  • 获取 swanid _signature ,并可通过对比该值与采用 signature 计算方法得到的计算值是否一致来判断 swanid 是否有效。

方法参数

Object object

object 参数说明

属性名类型必填默认值说明
successFunction接口调用成功的回调函数
failFunction接口调用失败的回调函数
completeFunction接口调用结束的回调函数(调用成功、失败都会执行)

success 返回参数说明

参数类型说明
errnoStringerrno
dataObject{swanid}

示例

在开发者工具中打开

在开发者工具中打开

在 WEB IDE 中打开

扫码体验

代码示例

百度智能小程序

请使用百度APP扫码

图片示例

swan.getSwanId - 图2

代码示例

  • SWAN
  • JS
  1. <view class="wrap">
  2. <view class="card-area">
  3. <view class="list-area border-bottom" s-for="item in infoList">
  4. <text class="list-item-key-4">{{item.key}}</text>
  5. <text class="list-item-value">{{item.value}}</text>
  6. </view>
  7. <view class="button-group">
  8. <button bind:tap="getSwanId" type="primary" hover-stop-propagation="true">点击获取用户设备标识</button>
  9. <button bind:tap="clearSwanId" hover-stop-propagation="true">清空</button>
  10. </view>
  11. </view>
  12. </view>
  1. Page({
  2. data: {
  3. infoList: [{
  4. key: 'swanid',
  5. value: ''
  6. }, {
  7. key: 'swanid_old',
  8. value: ''
  9. }, {
  10. key: 'swanid_old_signature',
  11. value: ''
  12. }, {
  13. key: 'swanid_signature',
  14. value: ''
  15. }]
  16. },
  17. getSwanId(e) {
  18. swan.getSwanId({
  19. success: res => {
  20. console.log('res', res.data);
  21. // 更新数据
  22. this.updateInfoList(res.data);
  23. },
  24. fail: err => {
  25. swan.showToast({
  26. title: '获取失败'
  27. });
  28. }
  29. });
  30. },
  31. clearSwanId() {
  32. this.updateInfoList({});
  33. },
  34. updateInfoList(res) {
  35. let infoList = this.getData('infoList');
  36. for (let i = 0; i < infoList.length; ++i) {
  37. if (res[infoList[i].key] === '') {
  38. infoList[i].value = '暂无';
  39. }
  40. else {
  41. infoList[i].value = res[infoList[i].key];
  42. }
  43. }
  44. this.setData('infoList', infoList);
  45. }
  46. });

signature 计算方法

  • GOLANG
  • PHP
  1. /**
  2. * 生成签名
  3. * appkey 小程序标识
  4. * secret_key 小程序私钥
  5. * swanid 用户swanid
  6. */
  7. func generageSignature(appKey, secrectKey, swanID string) string {
  8. plainText := fmt.Sprintf("appkey=%ssecret_key=%sswanid=%s", appKey, secrectKey, swanID)
  9. md5Sum := md5.Sum([]byte(plainText))
  10. return hex.EncodeToString(md5Sum[:])
  11. }
  1. /**
  2. * 生成 signature 校验码
  3. * appKey 小程序标识
  4. * secretKey 小程序私钥
  5. * swanId 用于 swanId
  6. */
  7. function generageSignature($appKey, $secrectKey, $swanId){
  8. $plainText = sprintf("appkey=%ssecret_key=%sswanid=%s", $appKey, $secrectKey, $swanId);
  9. return md5($plainText);
  10. }

错误码

Android

错误码说明
201解析失败,请检查调起协议是否合法
1001执行失败
10001内部错误
10002网络无连接

iOS

错误码说明
202解析失败,请检查参数是否正确
10001内部错误
10002网络无连接
10004用户拒绝(user not login)
10005系统拒绝