京东小程序(仅支持中文)

添加同盾域名

小程序对各种请求接口都做了域名限制,所以需要在小程序网站后台页面中添加同盾域名才可以保证小程序能正常给同盾设备指纹服务器发送信息

在 设置-开发设置-服务器域名的 request 合法域名 中添加:

环境域名
生产环境(必须)https://cn-fp.apitd.net
测试环境https://fptest.tongdun.net

小程序代码集成

1、插入canvas节点

同盾小程序设备指纹中使用了 canvas 指纹技术,需要在集成时手动加入。假设我们想在 index 页面中采集设备信息,那么就需要在 pages/index/index.jxml 文件末尾添加以下代码:

{

  <view>
    <canvas canvas-id='tdcanvas' style="visibility: hidden;position: fixed;z-index: -999;left: 9999px;"></canvas>
  </view>
  
}

2、初始化js

在每一个需要获取设备信息的页面创建一个实例。比如:在pages/index/index.js中,先在文件顶部引用sdk:

import FMAgent from '../../fmsdk/fm-xxx-es.min.js'
配置FMAgent

partnerCodeappName为必要参数,如果没有传入则初始化时会抛出异常。
app.js中:

App({
  ......
  globalData: {
    ......
    _fmOpt: {
      partnerCode: "", // 请填入您的partner code
      appName: "", // 请填入您的app name 同一个公司的不同小程序请填入不同的AppName
      // 谨慎配置,生产环境的情况下使用'PRODUCTION',测试沙盒环境请使用'SANDBOX'
      env: "PRODUCTION"
    }
  }
})

然后在pageonLoad回调中初始化对象:

// 示例
onLoad: function() {
    var that = this
    var fmagent = new FMAgent(app.globalData._fmOpt) // 这里需要传入一些必要配置
    ......
}
 

note:初始化成功可以在console里看到一条日志:

FMAgent: init succeeded.

3、获取blackbox

在设备指纹对象初始化完成后,就可以获取设备信息了。

fmagent.getInfo({
  page: that, // that为当前页面对象
  // 请传入加密的用户unionid(需保证加密后的unionid与原始unionid是一一对应关系)
  unionid: '', 
  success: function (res) {},// 成功回调,res为blackbox字符串
  fail: function (res) {},// 失败回调,res为各种exception对象
  complete: function (res) {}
})

注意:在提交blackbox时,请选择表单提交,避免blackBox被urlEncode,导致查询结果异常

API参数说明

参数类型描述示例是否必填
pageObject当前所在的page对象或component对象that
unionidstring加密后的用户unionid(加密算法可以随意选择,我们建议使用MD5或者SHA256)(切记不可以传自定义默认值,没有值请传空字符串,否则会导致碰撞)ef54040ea9cb5998230777ec7240b21e400a7ab5272af07a9ca2ed958fe66157
getInfoTypestring获取blackbox的模式('1':优先使用缓存的blackbox,'2':优先使用实时采集的blackbox,'3':优先使用未过期的blackbox至过期,默认模式为'1')'1'
timeoutInteger获取blackbox超时(默认2500,包括采集和发送请求的总时长,范围:2500-16000)6000
successfunction获取成功回调function(res) {/返回值为string类型,即black_box的值/}
failfunction获取失败回调function(res) {/返回值为string类型,即black_box的值/}
completefunction获取完成回调function(res) {/返回值为string类型,即black_box的值/}

fail的原因可能为:

传入的timeout不是数字类型;

获取systemInfo错误,返回值为jd.getSystemInfoSync()的报错;

注意:
blackbox存在有效期,所以请不要自行对blackbox做缓存,在我们SDK内部有缓存机制,所以请在需要blackbox的地方,调用getInfo接口即可。