在区块链DApp的开发流程中,钱包连接是用户交互的核心入口——从授权登录、获取链上账户,到发起交易、签名操作,几乎所有核心功能都依赖第三方加密钱包完成身份校验与交易执行,TP钱包作为国内用户基数最大的多链加密钱包之一,其开放的自定义URL Scheme协议,为开发者提供了低门槛、高兼容的APP唤起方案,本文将从底层原理拆解、代码实现细节到生产环境的避坑指南,全面讲解网站唤起TP钱包的完整流程,帮助开发者快速落地这一关键功能。
核心原理拆解
网站唤起TP钱包的本质是利用移动端浏览器的URL Scheme跳转机制:
- 每个原生APP都对应一个唯一的自定义协议头(TP钱包为
tpwallet://); - 当浏览器加载该协议链接时,系统会尝试唤起对应的原生APP;
- 若用户未安装APP,系统会拦截跳转,此时通过超时判断(通常1000ms左右),即可触发下载引导,实现“唤起APP/引导下载”的无缝体验。
前提准备
在开发前需完成以下准备工作,避免后续踩坑:
- 确认最新官方协议规则:TP钱包的协议参数会随版本更新调整,务必参考官方文档:TokenPocket开发者中心,重点关注
URL Scheme格式、功能参数(如连接DApp、发起转账的参数规则); - 适配移动端环境:TP钱包仅支持移动端(iOS/Android),开发阶段建议用真机测试,模拟器可能无法唤起原生APP,导致调试异常;
- 准备官方下载链接:若用户未安装TP钱包,需跳转至官方下载页:https://www.tokenpocket.pro/,切勿使用第三方下载链接,避免安全风险;
- 环境校验:开发时可通过
navigator.userAgent判断是否为移动端,非移动端可隐藏唤起按钮,或提示用户使用手机访问。
代码实现
基础版:唤起TP钱包主APP(无参数)
这是最常用的方案,适用于仅需要打开钱包,后续由用户手动操作的场景,代码兼容iOS/Android,同时处理“唤起失败→引导下载”的逻辑:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">唤起TP钱包示例</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<!-- 唤起TP钱包按钮 -->
<button id="openTpBtn" style="padding: 10px 20px; font-size: 16px; cursor: pointer;">打开TP钱包</button>
<script>
document.getElementById('openTpBtn').addEventListener('click', function() {
// 核心配置:TP钱包协议与下载地址
const TP_SCHEME = 'tpwallet://'; // 官方固定协议头
const DOWNLOAD_URL = 'https://www.tokenpocket.pro/'; // 官方下载页
const startTime = Date.now(); // 记录点击时间,用于判断唤起结果
let iframe = null;
// 方案1:使用隐藏iframe唤起(适配大部分Android浏览器)
try {
iframe = document.createElement('iframe');
iframe.style.display = 'none';
iframe.src = TP_SCHEME;
document.body.appendChild(iframe);
} catch (e) {
console.log('iframe唤起失败,尝试方案2');
}
// 方案2:使用window.location.href唤起(适配iOS Safari)
const fallbackToHref = () => {
window.location.href = TP_SCHEME;
};
// 超时判断:1000ms内未跳转视为唤起失败(iOS系统APP切换延迟约800ms)
setTimeout(() => {
// 移除iframe,避免页面残留
if (iframe && document.body.contains(iframe)) {
document.body.removeChild(iframe);
}
// 判断唤起是否成功:若时间差小于1500ms,说明浏览器拦截或未安装
if (Date.now() - startTime < 1500) {
// 优先用window.location.href唤起(iOS Safari对iframe限制严格)
window.location.href = TP_SCHEME;
// 再延迟500ms仍未跳转,说明未安装,引导下载
setTimeout(() => {
window.location.href = DOWNLOAD_URL;
}, 500);
}
}, 1000);
});
</script>
</body>
</html>
注:代码中加入了双方案兼容,优先用iframe适配Android,失败则切换为window.location.href适配iOS Safari,超时时间调整为1000ms,更符合iOS系统的APP切换延迟。
进阶版:带参数唤起特定功能
若需唤起TP钱包执行具体操作(如连接DApp、发起转账),需在协议后拼接符合官方规则的参数,以下是两个常用场景的示例:
场景1:连接DApp(获取钱包授权)
当用户点击“连接钱包”时,唤起TP钱包并弹出授权弹窗,示例代码:
// 连接DApp的协议参数(需按官方规则编码)
const DAPP_NAME = encodeURIComponent('我的区块链DApp'); // 你的网站名称
const DAPP_URL = encodeURIComponent(window.location.origin); // 当前网站域名
// 拼接协议:tpwallet://connect?dapp_name=xxx&dapp_url=xxx
const TP_CONNECT_SCHEME = `tpwallet://connect?dapp_name=${DAPP_NAME}&dapp_url=${DAPP_URL}`;
// 替换基础代码中的TP_SCHEME为上述变量即可
官方规则:连接协议的参数必须包含
dapp_name和dapp_url,且需通过encodeURIComponent编码,避免特殊字符导致解析失败。
场景2:发起转账(示例:EOS转账)
若需直接唤起TP钱包发起转账,可使用转账协议,示例代码:
// 转账参数(需根据实际业务修改)
const CHAIN = 'eos'; // 链名称(如eth、trx等)
const TO_ADDRESS = '接收钱包地址'; // 收款方地址
const AMOUNT = '1.0'; // 转账金额
const SYMBOL = 'EOS'; // 代币符号
const MEMO = '测试转账'; // 备注
const DAPP_NAME = encodeURIComponent('我的DApp');
const DAPP_URL = encodeURIComponent(window.location.origin);
// 拼接转账协议
const TP_TRANSFER_SCHEME = `tpwallet://transfer?chain=${CHAIN}&to=${TO_ADDRESS}&amount=${AMOUNT}&symbol=${SYMBOL}&memo=${MEMO}&dapp_name=${DAPP_NAME}&dapp_url=${DAPP_URL}`;
注:转账协议的参数规则需参考官方文档,不同链的参数可能有差异,切勿直接使用示例参数。
关键注意事项(生产环境避坑)
- 协议时效性:TP钱包会定期更新协议规则(如新增链支持、调整参数格式),建议开发者每周查看官方开发者中心,或通过TP钱包的官方社群获取最新规则,避免使用旧协议导致功能失效;
- 浏览器兼容性:
- iOS Safari的WKWebView对iframe跳转限制严格,优先使用
window.location.href方案唤起; - 部分国内浏览器(如微信内置浏览器)会拦截外部APP跳转,需引导用户使用系统浏览器打开页面;
- iOS Safari的WKWebView对iframe跳转限制严格,优先使用
- 安全校验:
- 敏感操作(如转账)需对来源网站做校验,可在参数中加入签名(如用DApp私钥对请求参数签名),防止恶意构造请求;
- 唤起转账时,需在TP钱包内再次确认转账信息(金额、地址、链),避免用户误操作;
- 用户体验优化:
- 唤起前添加提示:如“即将打开TP钱包,请确认已安装”,避免用户误点击;
- 唤起失败时明确提示:若超过1500ms未跳转,弹出“未检测到TP钱包,请先下载安装”的提示,而非直接跳转下载页;
- 针对不同链的用户,可显示对应链的TP钱包下载链接(如EOS用户下载EOS版TP),提升转化率;
- 回调处理:若需在TP钱包操作完成后返回网站,需在参数中加入回调地址(部分协议支持),如
&callback_url=${encodeURIComponent(window.location.href)},TP钱包操作完成后会自动跳转回网站。
通过自定义URL Scheme唤起TP钱包,是区块链DApp实现钱包交互的核心方案,其优势在于无需跳转至第三方页面,用户体验流畅,本文从原理到代码,再到生产环境的避坑指南,覆盖了开发者落地该功能的全流程,实际开发中,开发者需结合TP钱包官方文档,根据自身业务需求(如连接、转账、签名)调整协议参数,同时注意兼容性与安全校验,确保功能稳定运行,以一个NFT交易平台为例,当用户点击“连接钱包”按钮时,通过上述方案唤起TP钱包,用户授权后即可获取钱包地址,进而完成NFT的购买操作,整个流程无需中断,大幅提升用户转化率。
转载请注明出处:qbadmin,如有疑问,请联系()。
本文地址:https://www.cas-fs.com/cqnnz/5225.html
