์ด ํ์ด์ง๋ Klip์ SDK๋ฅผ ์๊ฐํฉ๋๋ค.
App2App SDK๋ ์ฌ๋ฌ๋ถ์ด ๊ฐ๋ฐํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ Klip์ ๋ ์ฝ๊ฒ ํ์ฉํ ์ ์๋๋ก ๋์์ฃผ๋ SDK์ ๋๋ค.
ํ์ฌ Klip์ Kaia ์ธ์๋ ๋ค์ํ ์ฒด์ธ ๊ธฐ๋ฐ ์์ฐ์ ๋ณด๊ด/์ ์ก ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ์์ผ๋, ๋ณธ ๋ฌธ์๋ฅผ ํตํด ์ ๊ณต๋๋ SDK๋ Kaia ๊ธฐ๋ฐ์ ์์ฐ๋ง ์กฐํ/์ ์ก์ด ๊ฐ๋ฅํ ์ ์ฐธ๊ณ ๋ถํ๋๋ฆฝ๋๋ค. Kaia ์ธ์ ๋ค๋ฅธ ์ฒด์ธ์ ์ง์ํ๋ ๊ธฐ๋ฅ์ ์ถํ ์ ๊ณต๋ ์์ ์ ๋๋ค.
์ด ๋ฌธ์ ํน์ Klip์ ๊ดํ ๋ฌธ์๋ ์ ๋ฐฉ๋ฌธํด ๋์์ ๋ฐ์ผ์ญ์์ค.
Web ํ๊ฒฝ์์ ์ฌ์ฉ๊ฐ๋ฅํ API๋ฅผ ์๊ฐ
Javascript
Android ํ๊ฒฝ์์ ์ฌ์ฉ๊ฐ๋ฅํ API๋ฅผ ์๊ฐ
Java
iOS ํ๊ฒฝ์์ ์ฌ์ฉ๊ฐ๋ฅํ API๋ฅผ ์๊ฐ
Swift
ํ๋ซํผ๋ณ SDK ๋ค์ด๋ก๋
Sample & SDK
์ด ํ์ด์ง์์๋ BApp์์ Klip์ ํ์ฉํ๊ธฐ ์ํ App2App JavaScript SDK๋ฅผ ์ค๋ช ํฉ๋๋ค.
(npm ์ด์ฉํ์ฌ ์ค์นํ๋ ๊ฒฝ์ฐ) node 10 ์ด์ ๊ถ์ฅ
Klip JavaScript SDK๋ ๋ณ๋์ ๊ฐ์ ์ ์ฐจ๊ฐ ํ์ํ์ง ์์ต๋๋ค. HTTP ํต์ ์ด ๊ฐ๋ฅํ ์ด๋ ํ๊ฒฝ์์๋ ๋์ํฉ๋๋ค. ๋ค๋ง, ๊ธฐ๋ณธ์ ์ผ๋ก Klip ์ฑ์ด ์ค์น๋ ํ๊ฒฝ์์ ํธ์ถํด์ผ ํฉ๋๋ค. Klip ์ฑ์ ์คํํ์ฌ Klip ์ฌ์ฉ์์ ์น์ธ์ ๋ฐ์์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
npm install klip-sdk ํน์ yarn add klip-sdk ์ปค๋งจ๋๋ฅผ ํตํด ์ค์น ํ
๋ค์๊ณผ ๊ฐ์ด ES module import ๋ฐฉ์์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
ํญ์์ Klip JavaScript SDK๋ฅผ ๋ค์ด๋ฐ์ต๋๋ค. ๋ค์ด ๋ฐ์ ํ์ผ์ ๋ ํฌ์งํ ๋ฆฌ์ ์์น์ํจ ํ HTMLํ์ผ์ ๋ค์๊ณผ ๊ฐ์ด ์คํธ๋ฆฝํธ ํ๊ทธ๋ฅผ ์ฝ์ ํฉ๋๋ค.
์ดํ ๊ธ๋ก๋ฒ ๋ค์์คํ์ด์ค์ ์ ์ธ๋ klipSDK ๋ณ์๋ฅผ ํ์ฉํ์ฌ ๊ฐ ๋ฉ์๋์ ์ ๊ทผํฉ๋๋ค.
App2App API ์์ฒญ์ ํฌ๊ฒ prepare, request, getResult์ ์์๋ก ์งํ์ด ๋ฉ๋๋ค.
prepare๋ ์ด๋ ํ ์์ฒญ์ ํ ์ง ์์ฒญ์ ์ ์ํ๋ ๋จ๊ณ๋ก ์ด 5๊ฐ์ง ์ข
๋ฅ์ ์์ฒญ์ด ์กด์ฌ
request๋ ํจ์ ํธ์ถ์ ํตํด Klip์ผ๋ก ํ๋ฉด์ด ์ ํ๋์ด ์ค์ ์๋ช
ํ๋ก์ธ์ค๋ฅผ ์งํ
getResult๋ ํจ์ ํธ์ถ์ ํตํด ๊ฒฐ๊ณผ๊ฐ์ ๋ฐ๊ณ ํ์ธ
์ถ๊ฐ์ ์ผ๋ก getCardList๋ BApp ๊ฐ๋ฐ์ ํธ์๋ฅผ ์ํด Klip ์ฌ์ฉ์์ NFT ๋ชฉ๋ก์ ๋ฐ์์ฌ ์ ์๋๋ก ์ ๊ณต๋๋ ํจ์์
๋๋ค.
App2App API ์์ฒญ์ ์ค๋นํ๊ณ request key๋ฅผ ๋ฐ์ต๋๋ค.
์ฌ์ฉ ๊ฐ๋ฅํ ์์ฒญ ์ ํ
Klip ์ฐ๊ฒฐ ํ์
(=์ธ์ฆ)์ ๊ฒฝ์ฐ auth
KAIA(=KLAY) ์ ์ก ํ์
์ ๊ฒฝ์ฐ sendKLAY
Token ์ ์ก ํ์
์ ๊ฒฝ์ฐ sendToken
์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ํ๋ํ๋ ์์ฒญ์ ๋๋ค.
Parameters
Example
์ฌ์ฉ์์ KAIA(=KLAY)๋ฅผ ํน์ ์ฃผ์๋ก ์ ์กํ๋ ์์ฒญ์ ๋๋ค.
Parameters
Example
์ฌ์ฉ์๊ฐ ๋ณด์ ํ ํ ํฐ์ ํน์ ์ฃผ์๋ก ์ ์กํ๋ ์์ฒญ์ ๋๋ค.
Parameters
Example
์ฌ์ฉ์๊ฐ ๋ณด์ ํ ์นด๋(NFT)๋ฅผ ํน์ ์ฃผ์๋ก ์ ์กํ๋ ์์ฒญ์ ๋๋ค.
Parameters
Example
์ฌ์ฉ์๊ฐ ํน์ ์ปจํธ๋ํธ์ ํจ์๋ฅผ ์คํํ๋๋ก ํ๋ ์์ฒญ์ ๋๋ค.
Parameters
Example
์ฌ์ฉ์๊ฐ Klip ๊ณ์ ์ผ๋ก ๋ฉ์์ง๋ฅผ ์๋ช
ํ๋ ์์ฒญ์
๋๋ค. ๊ธฐ์กด Klaytn ํ์ค์ ๋ฐ๋ผ "\x19Klaytn Signed Message:\n" + len(message)์ ์ ๋์ฌ๋ฅผ ๋ถ์ฌ ์๋ช
ํฉ๋๋ค.
Parameters
Example
Deep Link๋ฅผ ์ด์ฉํ์ฌ Klip์ ์ธ์ฆ ๋๋ ์๋ช ์ ์์ฒญํฉ๋๋ค. ์คํ ์ค์ธ ์ค๋งํธํฐ ๊ธฐ๊ธฐ์ Klip ์ฑ์ด ์ค์น๋์ง ์์๊ฑฐ๋ ์๋ ์คํํ ์ ์๋ ๊ฒฝ์ฐ 'Klip ์๊ฐ ํ์ด์ง(https://klipwallet.com)' ๋ก ์ด๋ํ์ฌ ์ฌ์ฉ์๋ Klip ์ฑ์ ๋ค์ด๋ก๋๋ฐ์ ์ ์์ต๋๋ค. requestKey์๋ prepare ๋จ๊ณ์์ Klip ์๋ฒ๋ก๋ถํฐ ๋ฐ์ ์์ฒญ ๋ฒํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
PC ํ๊ฒฝ์์ QR code๋ฅผ ์ด์ฉํ request ์คํ ์ฒ๋ฆฌ๋ ํญ๋ชฉ์ ์ฐธ์กฐํ์ญ์์ค.
Parameters
Example
App2App API ์์ฒญ์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํฉ๋๋ค. requestKey์๋ prepare ๋ฐ request ๋จ๊ณ์์ ์ฌ์ฉํ ์์ฒญ ๋ฒํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
Parameters
Example
์ฌ์ฉ์์ ์นด๋ (NFT) ๋ณด์ ๋ชฉ๋ก์ ๊ฐ์ ธ์ต๋๋ค. ์กฐํํ๊ณ ์ ํ๋ NFT ์ปจํธ๋ํธ ์ฃผ์๋ฅผ ์๊ณ ์์ด์ผ ํ๋ฉฐ, Klip์์ ์ง์ํ๋ ์ปจํธ๋ํธ๋ง ๊ฐ๋ฅํฉ๋๋ค.
Parameters
Example
์ด ๋ฌธ์ ํน์ Klip์ ๊ดํ ๋ฌธ์๋ ์ ๋ฐฉ๋ฌธํด ๋์์ ๋ฐ์ผ์ญ์์ค.
sendCardContract ์คํ ํ์
์ ๊ฒฝ์ฐ executeContract
Sign Message ์์ฒญ ํ์
์ ๊ฒฝ์ฐ signMessage - ์ด ๊ฒฝ์ฐ Klaytn ํ์ค์ ๋ฐ๋ผ "\x19Klaytn Signed Message:\n" + len(message)์ ์ ๋์ฌ๋ฅผ ๋ถ์ฌ ์๋ช
ํฉ๋๋ค.
successLink
string
์ฌ์ฉ์ ๋์๊ณผ์ ์๋ฃ ํ ๋์์ฌ BApp์ ๋ํ Deep Link (optional)
failLink
string
์ฌ์ฉ์ ๋์๊ณผ์ ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ๋์์ฌ BApp์ ๋ํ Deep Link (optional)
from
string
์ฌ์ฉ์์ Klip ๊ณ์ ์ฃผ์๊ฐ from ์ฃผ์์ ์ผ์นํ๋ ๊ฒฝ์ฐ๋ง ์งํ (optional)
successLink
string
์ฌ์ฉ์ ๋์๊ณผ์ ์๋ฃ ํ ๋์์ฌ BApp์ ๋ํ Deep Link (optional)
failLink
string
์ฌ์ฉ์ ๋์๊ณผ์ ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ๋์์ฌ BApp์ ๋ํ Deep Link (optional)
from
string
์ฌ์ฉ์์ Klip ๊ณ์ ์ฃผ์๊ฐ from ์ฃผ์์ ์ผ์นํ๋ ๊ฒฝ์ฐ๋ง ์งํ (optional)
successLink
string
์ฌ์ฉ์ ๋์๊ณผ์ ์๋ฃ ํ ๋์์ฌ BApp์ ๋ํ Deep Link (optional)
failLink
string
์ฌ์ฉ์ ๋์๊ณผ์ ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ๋์์ฌ BApp์ ๋ํ Deep Link (optional)
params
string
์คํํ ํจ์์ ์ธ์ ๋ชฉ๋ก
from
string
์ฌ์ฉ์์ Klip ๊ณ์ ์ฃผ์๊ฐ from ์ฃผ์์ ์ผ์นํ๋ ๊ฒฝ์ฐ๋ง ์งํ (optional)
successLink
string
์ฌ์ฉ์ ๋์๊ณผ์ ์๋ฃ ํ ๋์์ฌ BApp์ ๋ํ Deep Link (optional)
failLink
string
์ฌ์ฉ์ ๋์๊ณผ์ ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ๋์์ฌ BApp์ ๋ํ Deep Link (optional)
failLink
string
์ฌ์ฉ์ ๋์๊ณผ์ ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ๋์์ฌ BApp์ ๋ํ Deep Link (optional)
bappName
string
์ฌ์ฉ์์๊ฒ ํ์๋ BApp์ ์ด๋ฆ
successLink
string
์ฌ์ฉ์ ๋์๊ณผ์ ์๋ฃ ํ ๋์์ฌ BApp์ ๋ํ Deep Link (optional)
failLink
string
์ฌ์ฉ์ ๋์๊ณผ์ ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ๋์์ฌ BApp์ ๋ํ Deep Link (optional)
bappName
string
์ฌ์ฉ์์๊ฒ ํ์๋ BApp์ ์ด๋ฆ
to
string
๋ฐ๋ ์ฌ๋์ ์ฃผ์
amount
string
๋ณด๋ผ KAIA(=KLAY) ์๋ (๋จ์: KAIA, ์์์ ์ต๋ 6์๋ฆฌ ํ์ฉ)
from
string
์ฌ์ฉ์์ Klip ๊ณ์ ์ฃผ์๊ฐ from ์ฃผ์์ ์ผ์นํ๋ ๊ฒฝ์ฐ๋ง ์งํ (optional)
bappName
string
์ฌ์ฉ์์๊ฒ ํ์๋ BApp์ ์ด๋ฆ
to
string
๋ฐ๋ ์ฌ๋์ ์ฃผ์
amount
string
๋ณด๋ผ ํ ํฐ ์๋ (๋จ์: ํ ํฐ์ default ๋จ์, ์์์ ์ต๋ 6์๋ฆฌ ํ์ฉ)
contract
string
ํ ํฐ ์ปจํธ๋ํธ ์ฃผ์
bappName
string
์ฌ์ฉ์์๊ฒ ํ์๋ BApp์ ์ด๋ฆ
to
string
๋ฐ๋ ์ฌ๋์ ์ฃผ์
id
string
NFT id
contract
string
NFT ์ปจํธ๋ํธ ์ฃผ์
bappName
string
์ฌ์ฉ์์๊ฒ ํ์๋ BApp์ ์ด๋ฆ
to
string
์ปจํธ๋ํธ์ ์ฃผ์
value
string
์ปจํธ๋ํธ ์คํํ๋ฉด์ ๊ฐ์ด ๋ณด๋ผ KAIA(=KLAY) ์๋ (๋จ์: kei(=peb))
abi
string
์คํํ ํจ์์ abi
bappName
string
์ฌ์ฉ์์๊ฒ ํ์๋ BApp์ ์ด๋ฆ
value
string
์๋ช ํ ๋ฉ์์ง ์๋ฌธ
from
string
์ฌ์ฉ์์ Klip ๊ณ์ ์ฃผ์๊ฐ from ์ฃผ์์ ์ผ์นํ๋ ๊ฒฝ์ฐ๋ง ์งํ (optional)
successLink
string
์ฌ์ฉ์ ๋์๊ณผ์ ์๋ฃ ํ ๋์์ฌ BApp์ ๋ํ Deep Link (optional)
requestKey
String
์์ฒญ ๋ฒํธ
onUnsupportedEnvironment
Function
๋ชจ๋ฐ์ผ ํ๊ฒฝ์ด ์๋ ๊ฒฝ์ฐ ์คํ ํ ์ฝ๋ฐฑ ํจ์ (optional)
requestKey
String
์์ฒญ ๋ฒํธ
contract
String
์กฐํํ ์นด๋์ ์ปจํธ๋ํธ ์ฃผ์
eoa
String
์กฐํํ ์ฌ์ฉ์ ์ฃผ์
cursor
String
์กฐํํ ์ปค์๊ฐ์ ๋๋ค. ๋ง์ฝ, ์กฐํํ ์นด๋์ ๋ณด์ ๋ชฉ๋ก์ด 100๊ฐ ์ด์์ด๋ฉด, ๋ค์ 100๊ฐ ์ ๋ณด๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค.(optional)
-
-
Klip REST API ์๋ฌ์ฝ๋์ ๋์ผ
import { prepare, request, getResult, getCardList } from 'klip-sdk'<script src="./lib/klipSDK-2.3.2.min.js"></script>klipSDK.prepare(...)
klipSDK.request(...)
klipSDK.getResult(...)
klipSDK.getCardList(...)const bappName = 'my app'
const successLink = 'myApp://...' // Android ํ๋ซํผ์ ๊ฒฝ์ฐ, 'intent://...' ๋ก ์์ฑ
const failLink = 'myApp://...' // Android ํ๋ซํผ์ ๊ฒฝ์ฐ, 'intent://...' ๋ก ์์ฑ
const res = await prepare.auth({ bappName, successLink, failLink })
if (res.err) {
// ์๋ฌ ์ฒ๋ฆฌ
} else if (res.request_key) {
// request_key ๋ณด๊ด
}const bappName = 'my app'
const from = '0xB21F0285d27beb2373EC...'
const to = '0xD8b1dC332...'
const amount = '13.2'
const successLink = 'myApp://...' // Android ํ๋ซํผ์ ๊ฒฝ์ฐ, 'intent://...' ๋ก ์์ฑ
const failLink = 'myApp://...' // Android ํ๋ซํผ์ ๊ฒฝ์ฐ, 'intent://...' ๋ก ์์ฑ
const res = await prepare.sendKLAY({ bappName, from, to, amount, successLink, failLink })
if (res.err) {
// ์๋ฌ ์ฒ๋ฆฌ
} else if (res.request_key) {
// request_key ๋ณด๊ด
}const bappName = 'my app'
const from = '0xB21F0285d27beb2373EC...'
const to = '0xD8b1dC332...'
const amount = '10.123'
const contract = '0x813FB7677BbBAA...'
const successLink = 'myApp://...' // Android ํ๋ซํผ์ ๊ฒฝ์ฐ, 'intent://...' ๋ก ์์ฑ
const failLink = 'myApp://...' // Android ํ๋ซํผ์ ๊ฒฝ์ฐ, 'intent://...' ๋ก ์์ฑ
const res = await prepare.sendToken({ bappName, from, to, amount, contract, successLink, failLink })
if (res.err) {
// ์๋ฌ ์ฒ๋ฆฌ
} else if (res.request_key) {
// request_key ๋ณด๊ด
}const res = await prepare.sendCard({ bappName, from, to, id, contract, successLink, failLink })
if (res.err) {
setErrorMsg(res.err)
} else {
setRequestKey(res.request_key)
}const bappName = 'my app'
const from = '0xB21F0285d27beb2373EC...'
const to = '0xD8b1dC332...'
const value = '800000000'
const abi = "{\"constant\":false,\"inputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"buyCard\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"}"
const params = "[\"2829\"]"
const successLink = 'myApp://...' // Android ํ๋ซํผ์ ๊ฒฝ์ฐ, 'intent://...' ๋ก ์์ฑ
const failLink = 'myApp://...' // Android ํ๋ซํผ์ ๊ฒฝ์ฐ, 'intent://...' ๋ก ์์ฑ
const res = await prepare.executeContract({ bappName, from, to, value, abi, params, successLink, failLink })
if (res.err) {
// ์๋ฌ ์ฒ๋ฆฌ
} else if (res.request_key) {
// request_key ๋ณด๊ด
}const bappName = 'my app'
const value = 'original message ...'
const from = '0xB21F0285d27beb2373EC...'
const successLink = 'myApp://...' // Android ํ๋ซํผ์ ๊ฒฝ์ฐ, 'intent://...' ๋ก ์์ฑ
const failLink = 'myApp://...' // Android ํ๋ซํผ์ ๊ฒฝ์ฐ, 'intent://...' ๋ก ์์ฑ
const res = await prepare.signMessage({ bappName, value, from, successLink, failLink })
if (res.err) {
// ์๋ฌ ์ฒ๋ฆฌ
} else if (res.request_key) {
// request_key ๋ณด๊ด
}request(
'b37f873d-32ce-4d5d-b72e-08d528e7fb8e',
() => alert('๋ชจ๋ฐ์ผ ํ๊ฒฝ์์ ์คํํด์ฃผ์ธ์')
);getResult('b37f873d-32ce-4d5d-b72e-08d528e7fb8e')const contract = '0xB21F0285d27beb2373EC...'
const eoa = '0xD8b1dC332...'
const cursor = ''
getCardList({ contract, eoa, cursor })์ด ํ์ด์ง์์๋ App2App SDK ๋ค์ด๋ก๋ ๋งํฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. JavaScript๋ npm์ ํตํด์ ์ค์นํ ์ ์์ผ๋ฉฐ, Android ๋ฐ iOS๋ zip ์์ถ ํ์ผ์ ์ ๊ณตํฉ๋๋ค.
v2.3.3
2025.02.11
Klip SDK๋ฅผ ์ฌ์ฉํจ์ ์์ด ์ฌ์ฉ์๋ (์ฃผ)๊ทธ๋ผ์ด๋์์ค๋ฅผ ์ฌ์นญํด์๋ ์๋ฉ๋๋ค.
Klip SDK ์ฌ์ฉ์ ๋ฐ๋ผ ๋ฐ์ํ๋ ๋ชจ๋ ์ฑ ์์ ์ ์ ์ผ๋ก ์ฌ์ฉ์์๊ฒ ์์ผ๋ฉฐ, (์ฃผ)๊ทธ๋ผ์ด๋์์ค๋ ์ฌ์ฉ์ ๋๋ ์ 3์์ ๋ํด ์ด๋ ํ ์ฑ ์๋ ์ง์ง ์์ต๋๋ค.
์ฌ์ฉ์๋ Klip SDK๋ฅผ ์์ ์ ์ฉ๋๋ก ํ๋งคํ ์ ์์ต๋๋ค.
Android SDK:
iOS SDK:
์ด ๋ฌธ์ ํน์ Klip์ ๊ดํ ๋ฌธ์๋ ์ ๋ฐฉ๋ฌธํด ๋์์ ๋ฐ์ผ์ญ์์ค.
Klip SDK ์ฌ์ฉ์๊ฐ ๊ณผ๋ํ ๋คํธ์ํฌ ํธ๋ํฝ์ ๋ฐ์์ํค๋ ์๋ํ๋ ๋ฑ ๋ถ๋ฒ ํน์ ๋น์ ์์ ์ธ ๋ฐฉ์์ผ๋ก SDK๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ์๋ํ๋ ๊ฒฝ์ฐ, ์ฌ์ ๊ณ ์ง์์ด Klip SDK ๋ฐ Klip API ์ฌ์ฉ์ด ์ฐจ๋จ๋ ์ ์์ต๋๋ค.
v2.3.3
2025.02.11
v2.3.3
2025.02.11
v2.3.0
2024.11.18
v2.3.0
2024.11.18
์ด ํ์ด์ง์์๋ BApp์์ Klip์ ํ์ฉํ๊ธฐ ์ํ App2App iOS SDK๋ฅผ ์๊ฐํฉ๋๋ค.
iOS 12.0 ์ด์
Swift 5.0 ์ด์
Xcode 13.4 ์ด์
Klip iOS SDK๋ ๋ณ๋์ ๊ฐ์ ์ ์ฐจ๊ฐ ํ์ํ์ง ์์ต๋๋ค. HTTP ํต์ ์ด ๊ฐ๋ฅํ ์ด๋ ํ๊ฒฝ์์๋ ๋์ํฉ๋๋ค. ๋ค๋ง, ๊ธฐ๋ณธ์ ์ผ๋ก Klip ์ฑ์ด ์ค์น๋ ํ๊ฒฝ์์ ํธ์ถํด์ผ ํฉ๋๋ค. Klip ์ฑ์ ์คํํ์ฌ Klip ์ฌ์ฉ์์ ์น์ธ์ ๋ฐ์์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
2.3.0 ์ด์ ๋ฒ์ ๋ง ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
1. Klip SDK ๋ค์ด๋ก๋
ํ์ด์ง์์ Klip iOS SDK๋ฅผ ๋ค์ด๋ฐ์ต๋๋ค.
2. Klip SDK Framework ์ถ๊ฐ
Klip SDK Framework๋ฅผ Importํ์ฌ ๊ฐ๋ฐ ํ๋ก์ ํธ์ ์ถ๊ฐ
๊ฐ๋ฐ ์ค์ธ ํ๋ก์ ํธ๋ฅผ Xcode๋ก ์คํ
Xcode > ๊ฐ๋ฐ ํ๋ก์ ํธ์ TARGETS ์ ํ > General Tab > Framworks, Libraries, and Embedded Content Tab > ์ผ์ชฝ ํ๋จ์ + ๋ฒํผ์ ํด๋ฆญ
Source Directory์ ๋ค์ด๋ฐ์ Klip SDK ํ๋ก์ ํธ์ sdk ๋๋ ํ ๋ฆฌ๋ฅผ ์ ํ, ํด๋ฆญํ ํ Next๋ฅผ ํด๋ฆญ
์ผ์ชฝ์ Project navigator์ Frameworks์ ํด๋น SDK๊ฐ Import ๋์๋์ง ํ์ธ ํ build ์ํ
Klip SDK ์์ค๊ฐ ๊ฐ๋ฐ ํ๋ก์ ํธ์ ๋ณต์ฌ๋๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋๋ฅผ ์ง์ ์์ ํ ์ ์์ต๋๋ค.
iOS 9.0 ์ด์์์ iOS SDK๋ก Klip ๋ฑ ์ ํ๋ฆฌ์ผ์ด์ ์คํ ๊ธฐ๋ฅ์ ์ด์ฉํ๋ ค๋ฉด Info.plist ํ์ผ์ ์ค์ ์ ์ถ๊ฐํ์ฌ ์ปค์คํ ์คํด ์ ๋ณด๋ฅผ ๋ฑ๋กํด์ผ ํฉ๋๋ค.
[Info] > [Custom iOS Target Properties]์ Array ํ์ ํค(Key)์ธ LSApplicationQueriesSchemes๋ฅผ ์ถ๊ฐํ๊ณ , ํด๋น ํค์ 'Item'์ผ๋ก ์ปค์คํ ์คํด์ ์ฌ์ฉํ ๊ฐ์ธ 'klip'์ ์ถ๊ฐํฉ๋๋ค.
App2App API ์์ฒญ์ ํฌ๊ฒ prepare, request, getResult์ ์์๋ก ์งํ์ด ๋ฉ๋๋ค.
prepare๋ ์ด๋ ํ ์์ฒญ์ ํ ์ง ์์ฒญ์ ์ ์ํ๋ ๋จ๊ณ๋ก ์ด 5๊ฐ์ง ์ข
๋ฅ์ ์์ฒญ์ด ์กด์ฌ
request๋ ํจ์ ํธ์ถ์ ํตํด Klip์ผ๋ก ํ๋ฉด์ด ์ ํ๋์ด ์ค์ ์๋ช
ํ๋ก์ธ์ค๋ฅผ ์งํ
getResult๋ ํจ์ ํธ์ถ์ ํตํด ๊ฒฐ๊ณผ๊ฐ์ ๋ฐ๊ณ ํ์ธ
์ถ๊ฐ์ ์ผ๋ก getCardList๋ BApp ๊ฐ๋ฐ์ ํธ์๋ฅผ ์ํด Klip ์ฌ์ฉ์์ NFT ๋ชฉ๋ก์ ๋ฐ์์ฌ ์ ์๋๋ก ์ ๊ณต๋๋ ํจ์์ ๋๋ค.
Klip SDK๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์ธ์คํด์ค๋ฅผ ์์ฑํฉ๋๋ค.
Return Value
Example
KlipSDK.shared.prepare(request: KlipRequest, bappInfo: BAppInfo, completion: @escaping(KlipCallback<KlipTxResponse>) -> Void)
App2App API ์์ฒญ ์ฒ๋ฆฌ๋ฅผ ์ค๋นํ๊ณ request key๋ฅผ ๋ฐ๊ธํฉ๋๋ค.
Request ๊ฐ์ ์ฌ์ฉํ ๊ฐ์ฒด
Klip ์ฐ๊ฒฐ ํ์
(=์ธ์ฆ)์ ๊ฒฝ์ฐ AuthRequest
KAIA(=KLAY) ์ ์ก ํ์
์ ๊ฒฝ์ฐ KlayTxRequest
Token ์ ์ก ํ์
์ ๊ฒฝ์ฐ TokenTxRequest
Parameters
Klip ์ฌ์ฉ์์๊ฒ ๋์ ์์ฒญ์, request์ bappInfo์ ์ ๋ ฅ๋ ์ ๋ณด๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค. ์๋ต ๊ฒฐ๊ณผ์ ํฌํจ๋ request key๋ ์ฌ์ฉ์์๊ฒ ํธ๋์ญ์ ์ ์์ฒญํ๊ธฐ ์ํ ์ปจํ ์คํธ ํค์ ์ญํ ์ ์ํํ๋ฉฐ, ์ฌ์ฉ์ ๋์ ์์ฒญ ๋ฐ ๊ฒฐ๊ณผํ์ธ API์ ํจ๊ป ์ฌ์ฉ ๋ฉ๋๋ค.
Example 1. ์ฌ์ฉ์ ์ ๋ณด ํ๋ํ๊ธฐ
Example 2. KAIA(=KLAY) ์ ์กํ๊ธฐ
Example 3. Token ์ ์กํ๊ธฐ
Example 4. Card ์ ์กํ๊ธฐ
Example 5. Contract ์คํํ๊ธฐ
Example 6. Sign Message ์์ฒญํ๊ธฐ
KlipSDK.shared.request(requestKey: String) -> Void
Deep Link๋ฅผ ์ด์ฉํ์ฌ Klip์ ์ธ์ฆ ๋๋ ์๋ช
์ ์์ฒญํฉ๋๋ค. ์คํ ์ค์ธ ์ค๋งํธํฐ ๊ธฐ๊ธฐ์ Klip ์ฑ์ด ์ค์น๋์ง ์์๊ฑฐ๋ ์๋ ์คํํ ์ ์๋ ๊ฒฝ์ฐ 'Klip ์๊ฐ ํ์ด์ง(https://klipwallet.com)' ๋ก ์ด๋ํ์ฌ ์ฌ์ฉ์๋ Klip ์ฑ์ ๋ค์ด๋ก๋๋ฐ์ ์ ์์ต๋๋ค. requestKey์๋ prepare ๋จ๊ณ์์ Klip ์๋ฒ๋ก๋ถํฐ ๋ฐ์ ์์ฒญ ๋ฒํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
PC ํ๊ฒฝ์์ QR code๋ฅผ ์ด์ฉํ request ์คํ ์ฒ๋ฆฌ๋ ํญ๋ชฉ์ ์ฐธ์กฐํ์ญ์์ค.
Parameters
Example
KlipSDK.shared.getResult(requestKey: String, completion: @escaping(KlipCallback<KlipTxResponse>) -> Void)
App2App API ์์ฒญ์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํฉ๋๋ค. requestKey์๋ prepare ๋ฐ request ๋จ๊ณ์์ ์ฌ์ฉํ ์์ฒญ ๋ฒํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
Parameters
Example
KlipSDK.shared.getCardList(cardAddress: String, userAddress: String, cursor: String?, completion: @escaping(KlipCallback<CardListResponse>) -> Void)
์ฌ์ฉ์์ ๋ชจ๋ ์นด๋ ์ค ํน์ ์นด๋์ ๋ชฉ๋ก์ ๊ฐ์ ธ์ต๋๋ค.
Parameters
Example
์ด ๋ฌธ์ ํน์ Klip์ ๊ดํ ๋ฌธ์๋ ์ ๋ฐฉ๋ฌธํด ๋์์ ๋ฐ์ผ์ญ์์ค.
CardTxRequestContract ์คํ ํ์
์ ๊ฒฝ์ฐ ContractTxRequest
Sign Message ์์ฒญ ํ์
์ ๊ฒฝ์ฐ SignMessageRequest - ์ด ๊ฒฝ์ฐ Klaytn ํ์ค์ ๋ฐ๋ผ "\x19Klaytn Signed Message:\n" + len(message)์ ์ ๋์ฌ๋ฅผ ๋ถ์ฌ ์๋ช
ํฉ๋๋ค.
Klip
Klip ์ธ์คํด์ค
request
KlipRequest
์์ฒญ ํ์ ์ ๋ฐ๋ฅธ ์์ฒญ์ ๋ณด
bappInfo
BAppInfo
์์ฒญ ์ฑ ์ ๋ณด
callback
KlipCallback<KlipTxResponse>
์์ฒญ ์๋ต ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ์ฝ๋ฐฑํจ์์
๋๋ค. ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋๋ฉด, ์๋ฃ๊ฒฐ๊ณผ์ธ KlipTxResponse๋ฅผ ์ ์ก๋ฐ๊ณ , ์ฒ๋ฆฌ๊ฐ ์คํจ๋๋ฉด, ์คํจ๊ฒฐ๊ณผ์ธKlipErrorResponse๋ฅผ ์ ์ก๋ฐ์ต๋๋ค.
requestKey
String
์์ฒญ ๋ฒํธ
requestKey
String
์์ฒญ ๋ฒํธ
callback
KlipCallback<KlipTxResponse>
์์ฒญ ์๋ต ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ์ฝ๋ฐฑํจ์์
๋๋ค. ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋๋ฉด, ์๋ฃ๊ฒฐ๊ณผ์ธ KlipTxResponse๋ฅผ ์ ์ก๋ฐ๊ณ , ์ฒ๋ฆฌ๊ฐ ์คํจ๋๋ฉด, ์คํจ๊ฒฐ๊ณผ์ธKlipErrorResponse๋ฅผ ์ ์ก๋ฐ์ต๋๋ค.
cardAddress
String
์กฐํํ ์นด๋ ์ฃผ์
userAddress
String
์กฐํํ ์ฌ์ฉ์ ์ฃผ์
cursor
String
(optional) ์กฐํํ ์ปค์๊ฐ์ ๋๋ค. ๋ง์ฝ, ์กฐํํ ์นด๋์ ๋ณด์ ๋ชฉ๋ก์ด 100๊ฐ ์ด์์ด๋ฉด, ๋ค์ 100๊ฐ ์ ๋ณด๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค.
callback
KlipCallback<CardListResponse>
์์ฒญ ์๋ต ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ์ฝ๋ฐฑํจ์์
๋๋ค. ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋๋ฉด, ์นด๋๋ชฉ๋ก์ธ CardListResponse๋ฅผ ์ ์ก๋ฐ๊ณ , ์ฒ๋ฆฌ๊ฐ ์คํจ๋๋ฉด, ์คํจ ๊ฒฐ๊ณผ์ธKlipErrorResponse๋ฅผ ์ ์ก๋ฐ์ต๋๋ค.
-
-
Klip REST API ์๋ฌ์ฝ๋์ ๋์ผ
500
10
Klip SDK์์ ์๋ฌ ๋ฐ์ (ex, Http ์ฐ๊ฒฐ ์คํจ)
500
21
Klip SDK์์ ์๋ฌ ๋ฐ์ (Klip REST API ๋ฏธ์ง์ ์๋ฌ์ฝ๋)
500
22
Klip SDK์์ ์๋ฌ ๋ฐ์ (Klip Protocol ์๋ฌ)
https://github.com/ground-x/klip-a2a-ios-sdk.git <key>LSApplicationQueriesSchemes</key>
<array>
<string>klip</string>
</array>import KlipLibimport KlipSDKlet klip = KlipSDK.shared// ์ฌ์ฉ์ ์ ๋ณด ํ๋ ์์ฒญ๋ฌธ
let req: AuthRequest = AuthRequest();
// BApp ์ ๋ณด
let bappInfo: BAppInfo = BAppInfo(name : "BApp Name");
// ์๋ต ๊ฒฐ๊ณผ Callback
KlipSDK.shared.prepare(request: req, bappInfo: bappInfo) { result in
switch result {
case .success(let response):
case .failure(let error):
}
}// KAIA ์ ์ก ํธ๋์ญ์
์์ฒญ๋ฌธ
let req: KlayTxRequest = KlayTxRequest(to: "0x..receiver address..", amount: "10")
KlipSDK.shared.prepare(request: req, bappInfo: bappInfo) { result in
switch result {
case .success(let response):
case .failure(let error):
}
}// Token ์ ์ก ํธ๋์ญ์
์์ฒญ๋ฌธ
let req: TokenTxRequest = TokenTxRequest(to: "0x..receiver address..", amount: "10", contract: "0x..token contract address..")
KlipSDK.shared.prepare(request: req, bappInfo: bappInfo) { result in
switch result {
case .success(let response):
case .failure(let error):
}
}// Card ์ ์ก ํธ๋์ญ์
์์ฒญ๋ฌธ
let req: CardTxRequest = CardTxRequest(to: "0x..receiver address..", contract: "0x..card contract address..", cardId: "9")
KlipSDK.shared.prepare(request: req, bappInfo: bappInfo) { result in
switch result {
case .success(let response):
case .failure(let error):
}
}// Contract ์คํ ํธ๋์ญ์
์์ฒญ๋ฌธ
let req: ContractTxRequest = ContractTxRequest(to: "0x..contract address..", value: "10", abi: "{...}", params: "[{...}]")
KlipSDK.shared.prepare(request: req, bappInfo: bappInfo) { result in
switch result {
case .success(let response):
case .failure(let error):
}
}// Sign Message ์์ฒญ๋ฌธ
let req = SignMessageRequest(value: "message", from: "0x..contract address..")
KlipSDK.shared.prepare(request: req, bappInfo: bappInfo) { result in
switch result {
case .success(let response):
case .failure(let error):
}
}KlipSDK.shared.request(requestKey: "request key...")KlipSDK.shared.getResult(requestKey: "request key...") { result in
switch result {
case .success(let response):
case .failure(let error):
}
}KlipSDK.shared.getCardList(cardAddress: "0x..card address..", userAddress: "0x..user address..", cursor: nil) { result in
switch result {
case .success(let response):
case .failure(let error):
}
}์ด ํ์ด์ง์์๋ BApp์์ Klip์ ํ์ฉํ๊ธฐ ์ํ App2App Android SDK๋ฅผ ์๊ฐํฉ๋๋ค.
API 16: Android 4.1(Jelly Bean) ์ด์
Java 11 ์ด์
Android Studio 3.0.0 ์ด์
Android Permission : Internet Permission
Klip Android SDK๋ ๋ณ๋์ ๊ฐ์ ์ ์ฐจ๊ฐ ํ์ํ์ง ์์ต๋๋ค. HTTP ํต์ ์ด ๊ฐ๋ฅํ ์ด๋ ํ๊ฒฝ์์๋ ๋์ํฉ๋๋ค. ๋ค๋ง, ๊ธฐ๋ณธ์ ์ผ๋ก Klip ์ฑ์ด ์ค์น๋ ํ๊ฒฝ์์ ํธ์ถํด์ผ ํฉ๋๋ค. Klip ์ฑ์ ์คํํ์ฌ Klip ์ฌ์ฉ์์ ์น์ธ์ ๋ฐ์์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
Klip Android SDK Sample ์ฑ์ ์คํ ๊ฐ์ด๋๋ ํ๋ก์ ํธ์ ํฌํจ๋์ด ์๋ README.md์ ์๊ฐ๋์ด ์์ต๋๋ค.
ํ์ด์ง์์ Klip Android SDK๋ฅผ ๋ค์ด๋ฐ์ต๋๋ค.
๋ค์ด๋ฐ์ Klip SDK ํ๋ก์ ํธ์ ์์น์์ Terminal์ ์คํ
./gradlew :sdk:build ๋ช
๋ น์ ์คํํ์ฌ Klip SDK ํ๋ก์ ํธ๋ฅผ ๋น๋ (๋น๋๊ฐ ์๋ฃ๋๋ฉด <Klip SDK ํ๋ก์ ํธ>/sdk/build/outputs/aar/์์น์ ๊ฒฐ๊ณผ๋ฌผ์ธ AAR ํ์ผ์ด ์์ฑ๋จ)
๊ฐ๋ฐ ํ๋ก์ ํธ์ libs ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑ
๋น๋๋ AAR ํ์ผ์ ๊ฐ๋ฐ ํ๋ก์ ํธ์ libs ๋๋ ํ ๋ฆฌ๋ก ๋ณต์ฌ
๊ฐ๋ฐ ์ค์ธ ํ๋ก์ ํธ๋ฅผ Android Studio๋ก ์คํ
Android Studio > File > New > Import Module์ ํด๋ฆญ
Source Directory์ ๋ค์ด๋ฐ์ Klip SDK ํ๋ก์ ํธ์ sdk ๋๋ ํ ๋ฆฌ๋ฅผ ์ ํ, ํด๋ฆญํ ํ Next๋ฅผ ํด๋ฆญ
Klip SDK ํ๋ก์ ํธ์ gradle.properties
Klip SDK ์์ค๊ฐ ๊ฐ๋ฐ ํ๋ก์ ํธ์ ๋ณต์ฌ๋๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋๋ฅผ ์ง์ ์์ ํ ์ ์์ต๋๋ค. ๋ง์ฝ, ๋จ์ผ ๋ฒ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋๋ฅผ ์ ์งํ๋ ค๋ ๊ฒฝ์ฐ์๋ ์ด ๋ฐฉ๋ฒ์ด ์ ์ ํ์ง ์์ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ, ๋ฐฉ๋ฒ 1์์ ์๋ดํ ๋ด์ฉ์ ๋ฐ๋ผ ์ปดํ์ผ๋ AAR ํ์ผ์ ์ถ๊ฐํฉ๋๋ค.
Klip SDK๋ฅผ ํตํด HTTP ํต์ ์ฌ์ฉ์ ํ์ฉํ๊ธฐ ์ํด, ์ฑ์ ์ธํฐ๋ท ์ฌ์ฉ ๊ถํ์ ์ค์ ํด์ผ ํฉ๋๋ค. AndroidManifest.xml ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ด android.permission.INTERNET ๊ถํ์ ์ถ๊ฐํฉ๋๋ค.
App2App SDK Android v2.0.1 ์ดํ ๋ฒ์ ์ ์ฌ์ฉํ๋ฉด์ Android 11์ ํ๊ฒํ
ํ๋ ์ฑ(API ์์ค 30)์ ๊ฐ๋ฐํ๋ ๊ฒฝ์ฐ Klip๊ณผ ์ฐ๋์ ์ํด ํจํค์ง ์ฟผ๋ฆฌ๋ฅผ ์ถ๊ฐํด ์ํธ์์ฉ์ ์ค์ ํด์ผ ํฉ๋๋ค. AndroidManifest.xml ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ด queries ์์๋ฅผ ์ถ๊ฐํ์ธ์. (App2App SDK v2.1.0 ์ด์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ์ค์ ํ์ง ์์๋ ๋ฉ๋๋ค.)
์์ธํ ๋ด์ฉ์ ๋ฅผ ์ฐธ๊ณ ํฉ๋๋ค.
App2App API ์์ฒญ์ ํฌ๊ฒ prepare, request, getResult์ ์์๋ก ์งํ์ด ๋ฉ๋๋ค.
prepare๋ ์ด๋ ํ ์์ฒญ์ ํ ์ง ์์ฒญ์ ์ ์ํ๋ ๋จ๊ณ๋ก ์ด 5๊ฐ์ง ์ข
๋ฅ์ ์์ฒญ์ด ์กด์ฌ
request๋ ํจ์ ํธ์ถ์ ํตํด Klip์ผ๋ก ํ๋ฉด์ด ์ ํ๋์ด ์ค์ ์๋ช
ํ๋ก์ธ์ค๋ฅผ ์งํ
getResult๋ ํจ์ ํธ์ถ์ ํตํด ๊ฒฐ๊ณผ๊ฐ์ ๋ฐ๊ณ ํ์ธ
์ถ๊ฐ์ ์ผ๋ก getCardList๋ BApp ๊ฐ๋ฐ์ ํธ์๋ฅผ ์ํด Klip ์ฌ์ฉ์์ NFT ๋ชฉ๋ก์ ๋ฐ์์ฌ ์ ์๋๋ก ์ ๊ณต๋๋ ํจ์์ ๋๋ค.
Klip SDK๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์ธ์คํด์ค๋ฅผ ์์ฑํฉ๋๋ค.
Parameters
Return Value
Example
App2App API ์์ฒญ ์ฒ๋ฆฌ๋ฅผ ์ค๋นํ๊ณ request key๋ฅผ ๋ฐ๊ธํฉ๋๋ค.
Request ๊ฐ์ ์ฌ์ฉํ ๊ฐ์ฒด
Klip ์ฐ๊ฒฐ ํ์
(=์ธ์ฆ)์ ๊ฒฝ์ฐ AuthRequest
KAIA(=KLAY) ์ ์ก ํ์
์ ๊ฒฝ์ฐ KlayTxRequest
Token ์ ์ก ํ์
์ ๊ฒฝ์ฐ TokenTxRequest
Parameters
Throws
Klip ์ฌ์ฉ์์๊ฒ ๋์ ์์ฒญ์, request์ bappInfo์ ์ ๋ ฅ๋ ์ ๋ณด๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค. ์๋ต ๊ฒฐ๊ณผ์ ํฌํจ๋ request key๋ ์ฌ์ฉ์์๊ฒ ํธ๋์ญ์ ์ ์์ฒญํ๊ธฐ ์ํ ์ปจํ ์คํธ ํค์ ์ญํ ์ ์ํํ๋ฉฐ, ์ฌ์ฉ์ ๋์ ์์ฒญ ๋ฐ ๊ฒฐ๊ณผํ์ธ API์ ํจ๊ป ์ฌ์ฉ๋ฉ๋๋ค.
Example 1. ์ฌ์ฉ์ ์ ๋ณด ํ๋ํ๊ธฐ
Example 2. KAIA(=KLAY) ์ ์กํ๊ธฐ
Example 3. Token ์ ์กํ๊ธฐ
Example 4. Card ์ ์กํ๊ธฐ
Example 5. Contract ์คํํ๊ธฐ
Example 6. Sign Message ์คํํ๊ธฐ
์ด ๋ฌธ์ ํน์ Klip์ ๊ดํ ๋ฌธ์๋ ์ ๋ฐฉ๋ฌธํด ๋์์ ๋ฐ์ผ์ญ์์ค.
Deep Link๋ฅผ ์ด์ฉํ์ฌ Klip์ ์ธ์ฆ ๋๋ ์๋ช ์ ์์ฒญํฉ๋๋ค. ์คํ ์ค์ธ ์ค๋งํธํฐ ๊ธฐ๊ธฐ์ Klip ์ฑ์ด ์ค์น๋์ง ์์๊ฑฐ๋ ์๋ ์คํํ ์ ์๋ ๊ฒฝ์ฐ 'Klip ์๊ฐ ํ์ด์ง(https://klipwallet.com)' ๋ก ์ด๋ํ์ฌ ์ฌ์ฉ์๋ Klip ์ฑ์ ๋ค์ด๋ก๋๋ฐ์ ์ ์์ต๋๋ค. requestKey์๋ prepare ๋จ๊ณ์์ Klip ์๋ฒ๋ก๋ถํฐ ๋ฐ์ ์์ฒญ ๋ฒํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
PC ํ๊ฒฝ์์ QR code๋ฅผ ์ด์ฉํ request ์คํ ์ฒ๋ฆฌ๋ ํญ๋ชฉ์ ์ฐธ์กฐํ์ญ์์ค.
Parameters
Throws
Example
App2App API ์์ฒญ์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํฉ๋๋ค. requestKey์๋ prepare ๋ฐ request ๋จ๊ณ์์ ์ฌ์ฉํ ์์ฒญ ๋ฒํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
Parameters
Throws
Example
์ฌ์ฉ์์ ๋ชจ๋ ์นด๋ ์ค ํน์ ์นด๋์ ๋ชฉ๋ก์ ๊ฐ์ ธ์ต๋๋ค.
Parameters
Throws
Example
์๋ฌ์ฝ๋๋ KlipCallback์ ์คํจ์ ์๋ต๊ฒฐ๊ณผ์ธ KlipErrorResponse์ getErrorCode()ํจ์๋ฅผ ํตํด ํ์ธํ ์ ์์ต๋๋ค.
์ด ๋ฌธ์ ํน์ Klip์ ๊ดํ ๋ฌธ์๋ ์ ๋ฐฉ๋ฌธํด ๋์์ ๋ฐ์ผ์ญ์์ค.
๊ฐ๋ฐ ํ๋ก์ ํธ์ build.gradle์ ๋๋ ํ ๋ฆฌ ์ฐธ์กฐ ๋ฐ ๋ํ๋์ ์ค์ ์ ์ถ๊ฐ
๊ฐ๋ฐ ํ๋ก์ ํธ์ build.gradle์ ๋ํ๋์ ์ค์ ์ ์ถ๊ฐ
CardTxRequestContract ์คํ ํ์
์ ๊ฒฝ์ฐ ContractTxRequest
Sign Message ์์ฒญ ํ์
์ ๊ฒฝ์ฐ SignMessageRequest - ์ด ๊ฒฝ์ฐ Klaytn ํ์ค์ ๋ฐ๋ผ "\x19Klaytn Signed Message:\n" + len(message)์ ์ ๋์ฌ๋ฅผ ๋ถ์ฌ ์๋ช
ํฉ๋๋ค.
context
Context
์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ
Klip
Klip ์ธ์คํด์ค
request
KlipRequest
์์ฒญ ํ์ ์ ๋ฐ๋ฅธ ์์ฒญ์ ๋ณด
bappInfo
BAppInfo
์์ฒญ ์ฑ ์ ๋ณด
callback
KlipCallback<KlipResponse>
์์ฒญ ์๋ต ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ์ฝ๋ฐฑํจ์์
๋๋ค. ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋๋ฉด, ์๋ฃ๊ฒฐ๊ณผ์ธ KlipResponse๋ฅผ ์ ์ก๋ฐ๊ณ , ์ฒ๋ฆฌ๊ฐ ์คํจ๋๋ฉด, ์คํจ๊ฒฐ๊ณผ์ธKlipErrorResponse๋ฅผ ์ ์ก๋ฐ์ต๋๋ค.
KlipRequestException
์์ฒญ ์์ธ (ex, ํ์ Parameter ๋ฏธ์ ๋ ฅ์ ๋ฐ์)
requestKey
String
์์ฒญ ๋ฒํธ
KlipRequestException
์์ฒญ ์์ธ (ex, ํ์ Parameter ๋ฏธ์ ๋ ฅ์ ๋ฐ์)
requestKey
String
์์ฒญ ๋ฒํธ
callback
KlipCallback<KlipResponse>
์์ฒญ ์๋ต ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ์ฝ๋ฐฑํจ์์
๋๋ค. ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋๋ฉด, ์๋ฃ๊ฒฐ๊ณผ์ธ KlipResponse๋ฅผ ์ ์ก๋ฐ๊ณ , ์ฒ๋ฆฌ๊ฐ ์คํจ๋๋ฉด, ์คํจ๊ฒฐ๊ณผ์ธKlipErrorResponse๋ฅผ ์ ์ก๋ฐ์ต๋๋ค.
KlipRequestException
์์ฒญ ์์ธ (ex, ํ์ Parameter ๋ฏธ์ ๋ ฅ์ ๋ฐ์)
cardAddress
String
์กฐํํ ์นด๋ ์ฃผ์
userAddress
String
์กฐํํ ์ฌ์ฉ์ ์ฃผ์
cursor
String
(optional) ์กฐํํ ์ปค์๊ฐ์ ๋๋ค. ๋ง์ฝ, ์กฐํํ ์นด๋์ ๋ณด์ ๋ชฉ๋ก์ด 100๊ฐ ์ด์์ด๋ฉด, ๋ค์ 100๊ฐ ์ ๋ณด๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค.
callback
KlipCallback<CardListResponse>
์์ฒญ ์๋ต ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ์ฝ๋ฐฑํจ์์
๋๋ค. ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋๋ฉด, ์นด๋๋ชฉ๋ก์ธ CardListResponse๋ฅผ ์ ์ก๋ฐ๊ณ , ์ฒ๋ฆฌ๊ฐ ์คํจ๋๋ฉด, ์คํจ ๊ฒฐ๊ณผ์ธKlipErrorResponse๋ฅผ ์ ์ก๋ฐ์ต๋๋ค.
KlipRequestException
์์ฒญ ์์ธ (ex, ํ์ Parameter ๋ฏธ์ ๋ ฅ์ ๋ฐ์)
-
-
Klip REST API ์๋ฌ์ฝ๋์ ๋์ผ
500
10
Klip SDK์์ ์๋ฌ ๋ฐ์ (ex, Http ์ฐ๊ฒฐ ์คํจ)
500
21
Klip SDK์์ ์๋ฌ ๋ฐ์ (Klip REST API ๋ฏธ์ง์ ์๋ฌ์ฝ๋)
500
22
Klip SDK์์ ์๋ฌ ๋ฐ์ (Klip Protocol ์๋ฌ)
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
// Klip SDK
implementation 'com.klipwallet.app2app:klip-a2a-sdk-android_release_v2.3.0:2.3.0@aar'
}dependencies {
// Klip SDK
implementation project(path: ':sdk')
}<manifest ...>
<uses-permission android:name="android.permission.INTERNET" />
...
</manifest> <manifest ...>
<queries>
<package android:name="com.klipwallet.app" />
</queries>
...
</manifest>public class SampleActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Klip klip = Klip.getInstance(this);
}
}// ์ฌ์ฉ์ ์ ๋ณด ํ๋ ์์ฒญ๋ฌธ
AuthRequest req = new AuthRequest();
// BApp ์ ๋ณด
BAppInfo bappInfo = new BAppInfo("BApp Name");
// ์๋ต ๊ฒฐ๊ณผ Callback
KlipCallback callback = new KlipCallback<KlipResponse>() {
@Override public void onSuccess(final KlipResponse res) {}
@Override public void onFail(final KlipErrorResponse res) {}
}
klip.prepare(req, bappInfo, callback);// KAIA ์ ์ก ํธ๋์ญ์
์์ฒญ๋ฌธ
KlayTxRequest req = new KlayTxRequest.Builder()
.to("0x..receiver address..")
.amount("10")
.build();
klip.prepare(req, bappInfo, callback); // bappInfo, callback (example 1 ์ฐธ๊ณ )// Token ์ ์ก ํธ๋์ญ์
์์ฒญ๋ฌธ
TokenTxRequest req = new TokenTxRequest.Builder()
.contract("0x..token contract address..")
.to("0x..receiver address..")
.amount("10")
.build();
klip.prepare(req, bappInfo, callback); // bappInfo, callback (example 1 ์ฐธ๊ณ )// Card ์ ์ก ํธ๋์ญ์
์์ฒญ๋ฌธ
CardTxRequest req = new CardTxRequest.Builder()
.contract("0x..card contract address..")
.to("0x..receiver address..")
.cardId("9")
.build();
klip.prepare(req, bappInfo, callback); // bappInfo, callback (example 1 ์ฐธ๊ณ )// Contract ์ ์ก ํธ๋์ญ์
์์ฒญ๋ฌธ
ContractTxRequest req = new ContractTxRequest.Builder()
.to("0x..contract address..")
.value("10")
.abi("{..contract abi..}")
.params(new ArrayList<Object>(){
// contract parameters
})
.build();
klip.prepare(req, bappInfo, callback); // bappInfo, callback (example 1 ์ฐธ๊ณ )// Sign Message ์์ฒญ๋ฌธ
SignMessageRequest req = new SignMessageRequest.Builder()
.from("0x..contract address..")
.value("message")
.build();
klip.prepare(req, bappInfo, callback); // bappInfo, callback (example 1 ์ฐธ๊ณ )klip.request(requestKey); // Klip ์ฑ ํธ์ถKlipCallback callback = new KlipCallback<KlipResponse>() {
@Override public void onSuccess(final KlipResponse res) {}
@Override public void onFail(final KlipErrorResponse res) {}
}
Klip klip = Klip.getInstance();
klip.getResult(requestKey, callback)KlipCallback callback = new KlipCallback<KlipCardListResponse>() {
@Override public void onSuccess(final KlipCardListResponse res) {}
@Override public void onFail(final KlipErrorResponse res) {}
}
Klip klip = Klip.getInstance();
klip.getCardList("0x..card address..",
"0x..user address..",
null,
callback);