Bitget 深链接
BKConnect 是基于深链接的技术实现,帮助开发者从 Dapp 中打开 Bitget 移动端钱包并跳转到指定位置(携带参数),以实现与 Bitget 移动端钱包的快速稳定交互。
Bitget 移动端应用支持深链接 URL
💡
Tip
提示:Android 仅支持https://bkcode.vip?{params}
。
bitkeep://bkconnect?{params}
https://bkcode.vip?{params}
公共参数
请求参数
version -string
BKConnect 版本dappName -string
DApp 名称dappIcon -string
DApp 图标action-string-Require
actionID-string-Require
操作 UUIDredirectUrl -string
回调 URL
响应参数
status-string
0 成功,1 失败actionID-string
操作 UUID,与请求相同
打开 DApp
action
=DApp
name | value type | Require | note |
---|---|---|---|
url | string | Require | DApp 链接 |
无响应
IOS
//example https://bkcode.vip?action=dapp&url=https://app.uniswap.org/#/swap
static NSString * kdappScheme = @"https://app.uniswap.org/#/swap";
static NSString * kscheme = @"bitkeep://bkconnect?";
static NSString * khscheme = @"https://bkcode.vip?";
///跳转页面
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[self getUrl]] options:@{} completionHandler:nil];
/// Get the redirected url
- (NSString *)getUrl {
NSMutableString *url = [NSMutableString string];
[url appendString:khscheme];
[url appendString:[self getDappParameterUrl]];
NSString *urlScheme = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
return urlScheme;
}
- (NSString *)getDappParameterUrl {
NSDictionary *parameDict = @{@"action" : @"dapp",
@"url" : kdappScheme,
};
NSMutableString *paramString = [NSMutableString string];
[parameDict.allKeys enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSString *paramStr = [NSString stringWithFormat:@"%@=%@",obj,parameDict[obj] ? : @""];
[paramString appendString:paramStr];
if ((idx + 1) != parameDict.allKeys.count) {
[paramString appendString:@"&"];
}
}];
return paramString;
}
Android
Uri uri = new Uri.Builder()
.scheme("bitkeep")
.authority("bkconnect")
.appendQueryParameter("action", "dapp")
.appendQueryParameter("url", url)
.appendQueryParameter("version", "1") ///
.build();
try {
Intent intent1 = new Intent(
Intent.ACTION_VIEW,
uri
);
startActivity(intent1);
}catch (Exception e){
Log.e("startActivityFail",e.toString());
}
Flutter
//example https://bkcode.vip?action=dapp&url=https://app.uniswap.org/#/swap
final kdappScheme = "https://app.uniswap.org/#/swap";
final queryParameters = {
'action': 'dapp',
'url': kdappScheme,
};
Uri scheme = Uri(scheme: 'bitkeep', queryParameters: queryParameters);
if(await canLaunchUrl(scheme)){
await launchUrl(scheme);
} else {
KLog.e('launch app fail');
}
H5
https://bkcode.vip?action=dapp&url={dapp_url}
切换网络
在 url 中添加_needChain=xxxx
:
- ETH:
{DAppLink}?_needChain=eth
- BSC:
{DAppLink}?_needChain=bnb
- Heco:
{DAppLink}?_needChain=ht
提示:需要重新加载页面
获取账户
action
=getAccount
name | value type | Require | note |
---|---|---|---|
chain | string | Require | 链名称,从链配置中选择 |
响应:
address-string
IOS
/*
example
//https://bkcode.vip?chain=eth&action=getAccount
*/
static NSString * kscheme = @"bitkeep://bkconnect?";
static NSString * khscheme = @"https://bkcode.vip?";
///跳转页面
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[self getUrl]] options:@{} completionHandler:nil];
/// 获取跳转的url
/// Get the redirected url
- (NSString *)getUrl {
NSMutableString *url = [NSMutableString string];
[url appendString:khscheme];
[url appendString:[self getAccountParameterUrl]];
NSString *urlScheme = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
return urlScheme;
}
//chain 指定链,例如 eth,btc,trx
- (NSString *)getAccountParameterUrl {
NSDictionary *parameDict = @{@"action" : @"getAccount",
@"chain" : @"eth",
};
NSMutableString *paramString = [NSMutableString string];
[parameDict.allKeys enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSString *paramStr = [NSString stringWithFormat:@"%@=%@",obj,parameDict[obj] ? : @""];
[paramString appendString:paramStr];
if ((idx + 1) != parameDict.allKeys.count) {
[paramString appendString:@"&"];
}
}];
return paramString;
}
Android
Uri uri = new Uri.Builder()
.scheme("bitkeep")
.authority("bkconnect")
.appendQueryParameter("action", "getAccount")
.appendQueryParameter("dappIcon", icon)
.appendQueryParameter("actionId", actionId)
.appendQueryParameter("redirectUrl", redirectUrl)
.appendQueryParameter("dappName", name)
.appendQueryParameter("chain", chain)
.appendQueryParameter("version", "1")
.build();
try {
Intent intent1 = new Intent(
Intent.ACTION_VIEW,
uri
);
startActivity(intent1);
}catch (Exception e){
Log.e("startActivityFail",e.toString());
}
Flutter
/*
example
//https://bkcode.vip?chain=eth&action=getAccount
*/
//chain 指定链,例如 eth,btc,trx
final queryParameters = {
'action': 'getAccount',
'chain' : 'eth',
};
Uri scheme = Uri(scheme: 'bitkeep', queryParameters: queryParameters);
if(await canLaunchUrl(scheme)){
await launchUrl(scheme);
} else {
KLog.e('launch app fail');
}
}
H5
https://bkcode.vip?chain={chain}&action=getAccount
添加代币
action
=addAsset
name | value type | Require | note |
---|---|---|---|
chain | string | Require | 链名称,从链配置中选择 |
contract | string | Require | 默认 0x |
symbol | string | Require | 代币符号 |
响应:
status-string
0 成功,1 失败
IOS
/*
example: https://bkcode.vip?chain=eth&contract=0x3hdh37xxxxxx&symbol=tokennamexxxxx&action=addAsset
*/
static NSString * kscheme = @"bitkeep://bkconnect?";
static NSString * khscheme = @"https://bkcode.vip?";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[self getUrl]] options:@{} completionHandler:nil];
/// Get the redirected url
- (NSString *)getUrl {
NSMutableString *url = [NSMutableString string];
[url appendString:khscheme];
[url appendString:[self getAddAssetParameterUrl]];
NSString *urlScheme = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
return urlScheme;
}
//action addAsset //require
//chain String //eth,btc,trx
//contract String //default 0x
//symbol String //Token name
- (NSString *)getAddAssetParameterUrl {
NSDictionary *parameDict = @{@"action" : @"addAsset",
@"chain" : @"eth",
@"contract" : @"0x3hdh37xxxxxx",
@"symbol" : @"tokennamexxxxx",
};
NSMutableString *paramString = [NSMutableString string];
[parameDict.allKeys enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSString *paramStr = [NSString stringWithFormat:@"%@=%@",obj,parameDict[obj] ? : @""];
[paramString appendString:paramStr];
if ((idx + 1) != parameDict.allKeys.count) {
[paramString appendString:@"&"];
}
}];
return paramString;
}
Android
Uri uri = new Uri.Builder()
.scheme("bitkeep")
.authority("bkconnect")
.appendQueryParameter("action", "send")
.appendQueryParameter("from", from)
.appendQueryParameter("to", to)
.appendQueryParameter("contract", contract)
.appendQueryParameter("amount", amount)
.appendQueryParameter("redirectUrl", redirectUrl)
.appendQueryParameter("dappName", name)
.appendQueryParameter("dappIcon", icon)
.appendQueryParameter("chain", chain)
.appendQueryParameter("memo", "xxxxxmemo")
.appendQueryParameter("actionId", actionId)
.appendQueryParameter("version", "1")
.build();
try {
Intent intent1 = new Intent(
Intent.ACTION_VIEW,
uri
);
startActivity(intent1);
}catch (Exception e){
Log.e("startActivityFail",e.toString());
}
Flutter
final queryParameters = {
'action': 'send',
'chain' : 'eth',
'contract': '0x3hdh37xxxxxx',
'to' : '0x3hxxxxdh37xxxxxx',
'amount' : '0.1',
'memo' : 'memoMesg',
};
Uri scheme = Uri(scheme: 'bitkeep', queryParameters: queryParameters);
if(await canLaunchUrl(scheme)){
await launchUrl(scheme);
} else {
// KLog.e('launch app fail');
}
H5
https://bkcode.vip?chain={chain}&contract={contract_address}&to={to_address}&amount={amount}&memo={memo}&action=addAsset
发送交易
action
=send
name | value type | Require | note |
---|---|---|---|
chain | string | Require | 链名称,从链配置中选择 |
contract | string | Require | 默认 0x |
to | string | Require | 接收者地址 |
amount | string | Require | |
memo | string | optional | 交易备注 |
响应:
hash-string
哈希值
IOS
/*
example
//https://bkcode.vip?chain=eth&contract=0x3hdh37xxxxxx&symbol=tokennamexxxxx&action=send
*/
static NSString * kscheme = @"bitkeep://bkconnect?";
static NSString * khscheme = @"https://bkcode.vip?";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[self getUrl]] options:@{} completionHandler:nil];
/// Get the redirected url
- (NSString *)getUrl {
NSMutableString *url = [NSMutableString string];
[url appendString:khscheme];
[url appendString:[self getAddAssetParameterUrl]];
NSString *urlScheme = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
return urlScheme;
}
//action send //require
//chain String //eth,btc,trx
//contract String //default 0x
//to String
//amount String //require
//memo String //optional
- (NSString *)getSendParameterUrl {
NSDictionary *parameDict = @{@"action" : @"send",
@"chain" : @"eth",
@"contract" : @"0x3hdh37xxxxxx",
@"to" : @"0x3hxxxxdh37xxxxxx",
@"amount" : @"0.1",
@"memo" : @"memoMesg",
};
NSMutableString *paramString = [NSMutableString string];
[parameDict.allKeys enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSString *paramStr = [NSString stringWithFormat:@"%@=%@",obj,parameDict[obj] ? : @""];
[paramString appendString:paramStr];
if ((idx + 1) != parameDict.allKeys.count) {
[paramString appendString:@"&"];
}
}];
return paramString;
}
Android
Uri uri = new Uri.Builder()
.scheme("bitkeep")
.authority("bkconnect")
.appendQueryParameter("action", "send")
.appendQueryParameter("from", from)
.appendQueryParameter("to", to)
.appendQueryParameter("contract", contract)
.appendQueryParameter("amount", amount)
.appendQueryParameter("redirectUrl", redirectUrl)
.appendQueryParameter("dappName", name)
.appendQueryParameter("dappIcon", icon)
.appendQueryParameter("chain", chain)
.appendQueryParameter("memo", "xxxxxmemo")
.appendQueryParameter("actionId", actionId)
.appendQueryParameter("version", "1")
.build();
try {
Intent intent1 = new Intent(
Intent.ACTION_VIEW,
uri
);
startActivity(intent1);
}catch (Exception e){
Log.e("startActivityFail",e.toString());
}
Flutter
final queryParameters = {
'action': 'send',
'chain' : 'eth',
'contract': '0x3hdh37xxxxxx',
'to' : '0x3hxxxxdh37xxxxxx',
'amount' : '0.1',
'memo' : 'memoMesg',
};
Uri scheme = Uri(scheme: 'bitkeep', queryParameters: queryParameters);
if(await canLaunchUrl(scheme)){
await launchUrl(scheme);
} else {
// KLog.e('launch app fail');
}
H5
https://bkcode.vip?chain={chain}&contract={contract_address}&to={to_address}&amount={amount}&memo={memo}&action=addAsset
签名
action
=sign
name | value type | Require | note |
---|---|---|---|
chain | string | Require | 链名称,从链配置中选择 |
signType | string | Require | [eth_sign/personal_sign/eth_signTypedData/eth_signTypedData_v3,/eth_signTypedData_v4] |
msg | string | Require | 签名消息 |
响应:
sign-string
IOS
/*
example
//https://bkcode.vip?chain=eth&msg=[{"type":"string","name":"Message","value":"Hi, Alice!"},{"type":"uint32","name":"A number","value":"1337"}]&signType=personal_sign&action=sign
///https://bkcode.vip?chain=eth&msg=%5B%7B%22type%22:%22string%22,%22name%22:%22Message%22,%22value%22:%22Hi,%20Alice!%22%7D,%7B%22type%22:%22uint32%22,%22name%22:%22A%20number%22,%22value%22:%221337%22%7D%5D&signType=personal_sign&action=sign
*/
static NSString * kscheme = @"bitkeep://bkconnect?";
static NSString * khscheme = @"https://bkcode.vip?";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[self getUrl]] options:@{} completionHandler:nil];
/// Get the redirected url
- (NSString *)getUrl {
NSMutableString *url = [NSMutableString string];
[url appendString:khscheme];
[url appendString:[self getSignParameterUrl]];
NSString *urlScheme = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
return urlScheme;
}
//action sign //require
//chain String //eth,btc,trx
//signType String //eth_sign personal_sign eth_signTypedData eth_signTypedData_v3 eth_signTypedData_v4
//msg String
- (NSString *)getSignParameterUrl {
NSDictionary *parameDict = @{@"action" : @"sign",
@"chain" : @"eth",
@"signType" : @"personal_sign",
@"msg" : @"[{\"type\":\"string\",\"name\":\"Message\",\"value\":\"Hi, Alice!\"},{\"type\":\"uint32\",\"name\":\"A number\",\"value\":\"13337\"}]",
};
NSMutableString *paramString = [NSMutableString string];
[parameDict.allKeys enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSString *paramStr = [NSString stringWithFormat:@"%@=%@",obj,parameDict[obj] ? : @""];
[paramString appendString:paramStr];
if ((idx + 1) != parameDict.allKeys.count) {
[paramString appendString:@"&"];
}
}];
return paramString;
}
Android
//signType: personal_sign eth_signTypedData eth_sign eth_signTypedData_v3 eth_signTypedData_v4
String signType = 'personal_sign';
Uri uri = new Uri.Builder()
.scheme("bitkeep")
.authority("bkconnect")
.appendQueryParameter("action", "sign")
.appendQueryParameter("redirectUrl", redirectUrl)
.appendQueryParameter("dappName", name)
.appendQueryParameter("dappIcon", icon)
.appendQueryParameter("actionId", actionId)
.appendQueryParameter("msg", signMsg)
.appendQueryParameter("chain", chain) ///optional
.appendQueryParameter("signType", signType)
.appendQueryParameter("version", "1")
.build();
try {
Intent intent1 = new Intent(
Intent.ACTION_VIEW,
uri
);
startActivity(intent1);
}catch (Exception e){
Log.e("startActivityFail",e.toString());
}
Flutter
/*
example
//https://bkcode.vip?chain=eth&msg=[{"type":"string","name":"Message","value":"Hi, Alice!"},{"type":"uint32","name":"A number","value":"1337"}]&signType=personal_sign&action=sign
///https://bkcode.vip?chain=eth&msg=%5B%7B%22type%22:%22string%22,%22name%22:%22Message%22,%22value%22:%22Hi,%20Alice!%22%7D,%7B%22type%22:%22uint32%22,%22name%22:%22A%20number%22,%22value%22:%221337%22%7D%5D&signType=personal_sign&action=sign
*/
//chain, eg: eth,btc,trx
final queryParameters = {
'action': 'sign',
'chain' : 'eth',
'signType': 'personal_sign',
'msg' : '"[{\"type\":\"string\",\"name\":\"Message\",\"value\":\"Hi, Alice!\"},{\"type\":\"uint32\",\"name\":\"A number\",\"value\":\"1337\"}]',
};
Uri scheme = Uri(scheme: 'bitkeep', queryParameters: queryParameters);
if(await canLaunchUrl(scheme)){
await launchUrl(scheme);
} else {
KLog.e('launch app fail');
}
H5
https://bkcode.vip?chain={chain}&msg={msg}&signType={sign_type}&action=sign
Last updated on