该SDK用于拉起PE钱包,实现APP与PE,H5与PE之间相互调用,使用PE进行相关action操作。
提示:该SDK仅仅支持3.4.0以上版本的PE钱包。
1:下载 peopensdk.aar
2:导入project下的app中的libs中编译
3.在app下的build.gradle中添加:
android {
...
repositories{
flatDir(dirs: 'libs')
}
}
dependencies {
...
implementation(name:'peopensdk',ext:'aar')
}
目前支持以下操作:
- transfer: 拉起PE钱包转账,类似微信、支付宝转账;
- pushTransactions: push actions 进行交易;
- authLogin: 授权登陆.
调起PE钱包后,如需要监听结果,可使用PEListener监听回调:
new PEListener() {
@Override
public void onSuccess(String data) {
//成功
}
@Override
public void onError(String data) {
//错误
}
@Override
public void onCancel(String data) {
//取消
}
}
App使用示例
PEManager.getInstance().transfer(MainActivity.this, getTransferData(), new PEListener() {
@Override
public void onSuccess(String data) {
Log.i("onSuccess",data);
Toast.makeText(MainActivity.this, data,Toast.LENGTH_SHORT).show();
}
@Override
public void onError(String data) {
Log.i("onError",data);
Toast.makeText(MainActivity.this, data,Toast.LENGTH_SHORT).show();
}
@Override
public void onCancel(String data) {
Log.i("onCancel",data);
Toast.makeText(MainActivity.this, data,Toast.LENGTH_SHORT).show();
}
});
H5使用示例
window.location.href="transfer://pull.activity?param='XXX'"
param是下面data实例UrlEncode编码之后的结果
由于钱包无法直接通知H5,H5需要轮询Dapp Server收到的callbackUrl结果,来判断处理结果。
Transfer Data 格式实例
{
"amount": "1.0001",// 金额
"contract": "octtothemoon",//合约
"from": "oraclechain4",//转账人
"memo": "hi",//memo
"precision": 4,//精度
"symbol": "OCT",//token
"to": "testtesttest",//收款人
"action": "transfer",// 转账时赋值为transfer
"blockchain": "eosType",//底层“eosType、bosType”
"callbackUrl": "https://newdex.io/api/account/walletVerify",//通知服务端结果的回调url,例如https://newdex.io/api/account/walletVerify?result=1&protocol=pe_sdk&ref=PocketECO&serialNumber=app_123452312121&action=transfer&version=1.0×tamp=1553140313645&txID=xxx,其中result(0为用户取消,1为成功,2为失败)
"dappIcon": "http://newdex.io/static/logoicon.png", // dapp图标Url,用于在钱包APP中展示
"dappName": "Newdex",// dapp名字,用于在钱包APP中展示
"desc": "transfer",// 交易的说明信息,钱包在付款UI展示给用户
"protocol": "pe_sdk",// 协议名
"serialNumber": "app_123452312121",//此次业务流水号,唯一标示
"version": "1.0"//协议版本号
}
Transfer 成功后的回调示例
{
"action": "transfer",
"data": {
"txID": "efd04f98fc6a4698e9e205a247886afe7dbb13c5a0ab3a4adc29d73bbf4c3426"
},
"message": "Success",
"protocol": "pe_sdk",
"ref": "PocketECO",
"serialNumber": "app_123452312121",
"timestamp": "1553140058177",
"version": "1.0"
}
Transfer 取消后的回调示例
{
"action": "transfer",
"message": "Cancel",
"protocol": "pe_sdk",
"ref": "PocketECO",
"serialNumber": "app_123452312121",
"version": "1.0"
}
Transfer 异常后的回调示例
{
"action": "transfer",
"message": "ERROR:assertion failure with message: 6000031 TO_ACCOUNT_DOES_NOT_EXIST",
"protocol": "pe_sdk",
"ref": "PocketECO",
"serialNumber": "app_123452312121",
"timestamp": "1553140313645",
"version": "1.0"
}
App使用示例
PEManager.getInstance().pushTransactions(MainActivity.this, getPushTransactionData(),new PEListener() {
@Override
public void onSuccess(String data) {
Toast.makeText(MainActivity.this, dataToast.LENGTH_SHORT).show();
}
@Override
public void onError(String data) {
Toast.makeText(MainActivity.this, data,Toast.LENGTH_SHORT).show();
}
@Override
public void onCancel(String data) {
Toast.makeText(MainActivity.this, data,Toast.LENGTH_SHORT).show();
}
});
H5使用示例
window.location.href="push://pull.activity?param='XXX'"
param是下面data实例UrlEncode编码之后的结果
由于钱包无法直接通知H5,H5需要轮询Dapp Server收到的callbackUrl结果,来判断处理结果。
pushTransactions Data示例
{
"actions": [{ // actions 数组 为EOS、BOS标准action内容
"account": "eosio.token",
"authorization": [{
"actor": "oraclechain4",
"permission": "active"
}],
"data": {
"from": "oraclechain4",
"to": "testtesttest",
"quantity": "0.0001 EOS",
"memo": "pushTransactions111"
},
"name": "transfer"
}, {
"account": "eosio.token",
"authorization": [{
"actor": "oraclechain4",
"permission": "active"
}],
"data": {
"from": "oraclechain4",
"to": "testtesttest",
"quantity": "0.0001 EOS",
"memo": "pushTransactions222"
},
"name": "transfer"
}],
"action": "pushTransactions",
"blockchain": "eosType",
"callbackUrl": "https://newdex.io/api/account/walletVerify",
"dappIcon": "http://newdex.io/static/logoicon.png",
"dappName": "Newdex",
"desc": "pushActions",
"protocol": "pe_sdk",
"serialNumber": "app_123452312121",
"version": "1.0"
}
pushTransactions 成功后的回调示例
{
"action": "transfer",
"data": {
"txID": "efd04f98fc6a4698e9e205a247886afe7dbb13c5a0ab3a4adc29d73bbf4c3426"
},
"message": "Success",
"protocol": "pe_sdk",
"ref": "PocketECO",
"serialNumber": "app_123452312121",
"timestamp": "1553140058177",
"version": "1.0"
}
pushTransactions 取消后的回调示例
{
"action": "transfer",
"message": "Cancel",
"protocol": "pe_sdk",
"ref": "PocketECO",
"serialNumber": "app_123452312121",
"version": "1.0"
}
pushTransactions 异常后的回调示例
{
"action": "transfer",
"message": "ERROR:assertion failure with message: 6000031 TO_ACCOUNT_DOES_NOT_EXIST",
"protocol": "pe_sdk",
"ref": "PocketECO",
"serialNumber": "app_123452312121",
"timestamp": "1553140313645",
"version": "1.0"
}
App使用示例
PEManager.getInstance().authLogin(MainActivity.this, getAuthLoginData(), new PEListener() {
@Override
public void onSuccess(String data) {
Toast.makeText(MainActivity.this, data,Toast.LENGTH_SHORT).show();
}
@Override
public void onError(String data) {
Toast.makeText(MainActivity.this, data,Toast.LENGTH_SHORT).show();
}
@Override
public void onCancel(String data) {
Toast.makeText(MainActivity.this, data, Toast.LENGTH_SHORT).show();
}
});
H5使用示例
window.location.href="login://pull.activity?param='XXX'"
param是下面data实例UrlEncode编码之后的结果
由于钱包无法直接通知H5,H5需要轮询Dapp Server收到的callbackUrl结果,来判断处理结果。
authLogin Data示例
{
"action": "login",
"blockchain": "eosType",
"callbackUrl": "https://newdex.io/api/account/walletVerify",
"dappIcon": "http://newdex.io/static/logoicon.png",
"dappName": "Newdex",
"desc": "login",
"protocol": "pe_sdk",
"serialNumber": "app_123452312121",
"version": "1.0"
}
authLogin 成功后的回调示例
{
"action": "login",
"data": {
"account": "oraclechain4",
"public_key": "EOS78rMUpjdDMJuKhMwSrZCdviBf2FB6BvF2bhMmGpiCJQuPwLSvK",
"sign": "SIG_K1_KazMJhgxeZ7e7LR7sNHFZtbSxXEPUNyXg9gPuoZTxbieyFosoMXtQn8eGovSe2svLSCXpFkz2KVhGhrPnJPPzuupXKkn8E" //钱包对登录相关数据进行签名结果
},
"message": "Success",
"protocol": "pe_sdk",
"ref": "PocketECO",
"serialNumber": "app_123452312121",
"timestamp": "1553149375817",
"version": "1.0"
}
钱包对登录相关数据进行签名
// 生成sign算法
let data = timestamp + account + serialNumber + ref
sign = ecc.sign(data, privateKey)
接收到成功后的回调结果,需要验证sign签名数据,若验证成功,将该账户设为已登录状态。
authLogin 取消后的回调示例
{
"action": "login",
"message": "Cancel",
"protocol": "pe_sdk",
"ref": "PocketECO",
"serialNumber": "app_123452312121",
"version": "1.0"
}
authLogin 异常后的回调示例
{
"action": "login",
"message": "Error",
"protocol": "pe_sdk",
"ref": "PocketECO",
"serialNumber": "app_123452312121",
"version": "1.0"
}