WEMIX3.0
Search…
Android SDK
이 페이지에서는 dApp 에서 WEMIX Wallet 과 연동하기 위한 Android SDK 를 설명합니다.

  • API 23: Android 6.0(Marshmallow) 이상

별도의 가입 절차 없이 기본적으로 HTTP(s) 통신이 가능한 환경에서 동작이 가능합니다.

Add the following to your build.gradle file:
dependencies {
implementation 'com.github.wemixarchive:wemix-wallet-sdk-android:0.8.0'
}

SDK 를 사용하기 위해서는 인터넷 통신 권한이 필요합니다. AndroidManifest.xml 파일에 아래와 같이 Permission을 추가합니다.
<uses-permission android:name="android.permission.INTERNET" />

필요한 경우 네트워크를 변경할 수 있습니다. 기본 네트워크는 Mainnet이지만 현재 사용할 수 없습니다.
반드시 Testnet으로 설정하십시오.
<meta-data android:name="A2A_SERVER_DOMAIN" android:value="a2a.test.wemix.com" />

Android SDK에서 App2App 요청은 크게 Proposal, Result 의 순서로 진행이 됩니다.
  • Proposal 은 dApp에서 실행할 작업을 요청하는 단계로 총 5가지 종류의 요청이 존재하며 요청 시 자동으로 WEMIX Wallet 앱이 실행이 됩니다.
  • Result 는 함수 호출을 통해 결과값을 받고 확인합니다.

App2App 요청하기 전에 SDK 사용하기 위한 준비 작업을 설명합니다.

SDK 를 초기화 합니다.
Parameters
Name
Type
Description
activity or fragment
Activity or fragment
Activity or fragment instance
proposalResultHandler
ProposalResultHandler
요청 응답 결과를 받을 콜백함수입니다. 결과는 onResult 함수의 A2AResponse 를 통해 확인 할수 있습니다.

요청에 대한 결과를 받기 위해서는 해당 함수를 Acitivity 또는 Fragment 의 onActivityResult 함수에서 호출을 해주어야 합니다.
ProposalResultHandler interface
요청에 대한 결과를 받는 interface 입니다. WemixWalletSDK 생성 시 입력 값입니다.
Method Name
Parameters
Description
onAuthInitFailed
요청이 실패 시 호출됩니다.
statusCode
요청 실패 코드 (Http Status Code)
onNotInstall
WEMIX Wallet 이 설치되어 있지 않는 경우 호출됩니다.
intent
PlayStore가 호출됩니다.
onProposalResult
사용자 인증 후 호출됩니다.
resultCode
인증이 성공되면 Activity.RESULT_OK, 사용자 취소인 경우 Activity.RESULT_CANCELED
requestId
요청에 대한 고유 ID 입니다.
Initializing example
private final ProposalResultHandler resultHandler = new ProposalResultHandler(){
@Override
public void onAuthInitFailed(int statusCode){
// 요청 실패
}
@Override
public void onNotInstall(final Intent intent){
// WEMIX Wallet 설치되어 있지 않음. 스토어로 이동
startActivity(this, intent);
}
@Override
public void onProposalResult(int resultCode, String requestId) {
if(resultCode == Activity.RESULT_OK){
// 요청 대한 결과정보 요청
walletSdk.getResult(requestId, new ResponseResultHandler() {
@Override
public void onResult(String requestId, A2AResponse response) {
// response.getResult().getAddress() <= Only Auth
// response.getResult().getTransactionHash()
}
});
}else if(resultCode == Activity.RESULT_CANCELED){
// 사용자 취소
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState){
...
WemixWalletSDK walletSdk = new WemixWalletSDK(this, resultHandler);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data){
if(walletSdk.handleResult(requestCode, resultCode, data)){
return;
}
super.onActivityResult(requestCode, resultCode, data);
}

WemixWalletSDK.proposal(MetaData, SendData) 를 사용하며 SendData 에 따라 5가지 요청을 제공합니다.
  • null : 지갑주소 요청
  • SendWemix : WEMIX 전송 요청
  • SendToken : TOKEN 전송 요청
  • SendNFT : NFT 전송 요청
  • ExecuteContract : Contract 실행 요청

Proposal 을 요청하기 위해서는 dApp의 정보가 필요합니다. dApp 의 정보는 MetaData class 로 제공되어야 합니다.
MetaData(name, description, url, icon)
Parameter Name
Type
Description
Nullable
name
String
dApp 이름
false
description
String
요청 설명. Reserved
true
url
String
dApp 대표 URL. Reserved
true
icon
String
dApp 로고 이미지 URL. Reserved
true
Metadata metadata = new Metadata("app name", "description", null, null, null, null);

지갑 주소를 요청합니다. 요청에 대해 사용자 승인이 완료되면 해당 지갑의 주소를 확인할 수 있습니다.
Example
walletSdk.proposal(metadata, null);

사용가 보유한 WEMIX 특정 주소로 전송하는 요청입니다. 요청에 대해 사용자 승인이 완료되면 해당 요청의 transactionHash 를 확인할 수 있습니다.
SendWemix(from, to, amount)
Parameter Name
Type
Description
from
String
전송자의 주소. 지갑 사용자가 맞는지 확인용
to
String
받는 사용자의 주소명
amount
String
보낼 WEMIX 수량 (단위 wei)
Example
SendWemix sendWemix = new SendWemix(
"0x7A8519fE4A25521e4f7692489149BEe8864c6935",
"0x23a80bdE8dCDDEf6829beD0d5d966BDBf6cB44C3",
"1000000000000000000" // 1 WEMIX
);
walletSdk.proposal(metadata, sendWemix);

사용자가 보유한 토큰을 특정 주소로 전송하는 요청입니다. 요청에 대해 사용자 승인이 완료되면 해당 요청의 transactionHash 를 확인할 수 있습니다.
SendToken(from, to , value, contract)
Parameter Name
Type
Description
from
String
전송자의 주소. 지갑 사용자가 맞는지 확인용
to
String
받는 사용자의 주소명
value
String
보낼 토큰 수량 (decimal 포함)
contract
String
토큰 contract 주소
Example
SendToken sendToken = new SendToken(
"0x7A8519E4A25521e4f7692489149BEe8864c6935",
"0x23a80bdE8dCDDEf6829beD0d5d966BDBf6cB44C3",
"10000000000", // In case decimal 10, 1 TOKEN
"0xF6fF95D53E08c9660dC7820fD5A775484f77183A"
);
walletSdk.proposal(metadata, sendToken);

사용자가 보유한 NFT를 특정 주소로 전송하는 요청입니다. 요청에 대해 사용자 승인이 완료되면 해당 요청의 transactionHash 를 확인할 수 있습니다.
SendNFT(from, to, contract, tokenId)
Parameter Name
Type
Description
from
String
전송자의 주소. 지갑 사용자가 맞는지 확인용
to
String
받는 사용자의 주소명
contract
String
NFT contract 주소
tokenId
String
전송하려는 NFT token Id
Example
SendNFT sendNFT = new SendNFT(
"0x7A8519fE4A25521e4f7692489149BEe8864c6935",
"0x23a80bdE8dCDDEf6829beD0d5d966BDBf6cB44C3",
"0xF6fF95D53E08c9660dC7820fD5A775484f77183A",
"13" // token id
);
walletSdk.proposal(metadata, sendNFT);

사용자가 특정 컨트랙트의 함수를 실행하도록 하는 요청입니다. 요청에 대해 사용자 승인이 완료되면 해당 요청의 transactionHash 를 확인할 수 있습니다.
ContractExecute(from, to, abi, params)
Parameter Name
Type
Description
from
String
전송자의 주소. 지갑 사용자가 맞는지 확인용
to
String
contract 주소
contract
String
함수의 abi (json string)
params
String
함수에 제공할 파라미터들 (json string)
Example
String abi = "{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\" ...";
String params = "[\"0xcad9042cf49684939a2f42c2d916d1b6526635c2\", \"500000000000\"]";
ExecuteContract executeContract = new ExecuteContract(
"0x7A8519fE4A25521e4f7692489149BEe8864c6935",
"0xF6fF95D53E08c9660dC7820fD5A775484f77183A",
abi,
parmas
);
walletSdk.proposal(metadata, executeContract);

요청에 대해 사용자가 승인 이후 ProposalResultHandler.onProposalResult 으로 requestId 넘어오면 WemixWalletSDK.getResult(requestId, ResponseResultHander) 를 사용하여 요청에 대한 결과를 확인합니다.

요청에 대한 결과를 받는 인터페이스 입니다.
Method Name
Parameters
Description
onResult
요청이 실패 시 호출됩니다.
requestId
요청에 대한 고유 ID 입니다
response
응답 결과
walletSdk.getResult(requestId, new ResponseResultHandler() {
@Override
public void onResult(String requestId, A2AResponse response) {
// response.getResult().getAddress() <= Only Auth
// response.getResult().getTransactionHash()
}
});
Copy link
On this page
요구 사항
환경설정
Adding dependency with Gradle
Adding Permission
네트워크 설정
API
SDK Initialize
Proposal
Result