字节小程序

1. 添加同盾域名

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

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

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

注意:

  • 如果线上版本小程序仅会访问同盾生产环境,那么添加第一个生产域名即可
  • 同盾字节跳动小程序设备指纹 SDK 仅支持客户端基础库版本1.15.0 以上**的字节跳动系列 App 客户端,在小程序后台可以设置最低基础库版本,当低于该版本的用户打开时会提示用户升级 App

2. 插入 canvas 节点

同盾小程序设备指纹中使用了 canvas 指纹技术,由于目前小程序的限制,我们无法通过 JS 来动态创建 DOM 节点,所以需要在集成时手动加入。假设我们想在 index 页面中采集设备信息,那么就需要在 pages/index/index.ttml 文件末尾添加以下代码:

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

注意:

  • 样式文件让设备指纹 SDK 立即隐藏这个节点,SDK 会在用户感知不到的时间内完成采集
  • 请勿修改 canvas-id,修改会导致 SDK 无法正常工作

3. 初始化 SDK

我们的设备指纹对象存活在一个 Page(或 Component)的生命周期中,所以在每一个需要获取设备信息的页面都需要创建一个实例。比如:在 pages/index/index.js 中,先在文件顶部引用 SDK 文件:

import FMAgent from '../../fmsdk/fm-xxx-es.saas.js'

然后在 Page 的 onLoad 回调中初始化对象:

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

初始化成功可以在 console 里看到一条日志:
FMAgent: init succeeded.

关于 FMAgent 的配置

在上面代码中,可以看到初始化对象时,需要传入一个配置对象。因为这个配置在整个 app 中应该都是相同的,所以在 demo 中我们把配置放在了 app 对象的 globalData 里,我们强烈建议你也这么做

partnerCodeappName 为必要参数,如果没有传入则初始化时会抛出异常

app.js 中:

App({
	......
	globalData: {
		......
		_fmOpt: {
			partnerCode: "", // 请填入您的 partner code
			appName: "", // 请填入您的 app name
			// 谨慎配置,确认是生产环境的情况下才需要设置下面的值,测试沙盒环境下面配置需要删掉
			env: "PRODUCTION"
		}
	}
})

4. 获取blackbox

在设备指纹对象初始化完成后,就可以获取设备信息了。我们的设备指纹 SDK 采用类字节跳动 API 的调用模式,支持传入 successfailcomplete 三个回调及其它配置字段:

fmagent.getInfo({
    page: that, // 请传入 FMAgent 所在的 Page 或 Component 对象(确保原生的小程序对象,第三方框架 Taro 配置:Taro.getCurrentPages()[Taro.getCurrentPages().length - 1],暂不支持其他框架)
    openid: '', // 请传入加密的用户 openid
    // 如果您开通了 unionid 功能,请传入加密的用户 unionid
    // 否则留空即可
    unionid: '', 
    success: function (res) {
    // 成功回调,res 为 blackBox 字符串
    },
    fail: function (res) {
    // 失败回调,res 为各种 exception 对象
    },
    complete: function (res) {
    // 完成回调,res 为blackBox字符串或者各种exception 对象
    }
})

API参数说明

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