All pages
Powered by GitBook
1 of 5

Loading...

Loading...

Loading...

Loading...

Loading...

App2App SDK

์ด ํŽ˜์ด์ง€๋Š” Klip์˜ SDK๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

App2App SDK๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด ๊ฐœ๋ฐœํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ Klip์„ ๋” ์‰ฝ๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” SDK์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ Klip์€ Kaia ์™ธ์—๋„ ๋‹ค์–‘ํ•œ ์ฒด์ธ ๊ธฐ๋ฐ˜ ์ž์‚ฐ์˜ ๋ณด๊ด€/์ „์†ก ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์œผ๋‚˜, ๋ณธ ๋ฌธ์„œ๋ฅผ ํ†ตํ•ด ์ œ๊ณต๋˜๋Š” SDK๋Š” Kaia ๊ธฐ๋ฐ˜์˜ ์ž์‚ฐ๋งŒ ์กฐํšŒ/์ „์†ก์ด ๊ฐ€๋Šฅํ•œ ์  ์ฐธ๊ณ  ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค. Kaia ์™ธ์˜ ๋‹ค๋ฅธ ์ฒด์ธ์„ ์ง€์›ํ•˜๋Š” ๊ธฐ๋Šฅ์€ ์ถ”ํ›„ ์ œ๊ณต๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

ํ•ญ๋ชฉ
์„ค๋ช…
๋น„๊ณ 

์ด ๋ฌธ์„œ ํ˜น์€ Klip์— ๊ด€ํ•œ ๋ฌธ์˜๋Š” ์„ ๋ฐฉ๋ฌธํ•ด ๋„์›€์„ ๋ฐ›์œผ์‹ญ์‹œ์˜ค.

Web ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ API๋ฅผ ์†Œ๊ฐœ

Javascript

Android SDK

Android ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ API๋ฅผ ์†Œ๊ฐœ

Java

iOS SDK

iOS ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ API๋ฅผ ์†Œ๊ฐœ

Swift

Download

ํ”Œ๋žซํผ๋ณ„ SDK ๋‹ค์šด๋กœ๋“œ

Sample & SDK

๊ฐœ๋ฐœ์ž ํฌ๋Ÿผ
Javascript SDK

JavaScript SDK

์ด ํŽ˜์ด์ง€์—์„œ๋Š” BApp์—์„œ Klip์„ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•œ App2App JavaScript SDK๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

Kaia๋Š” ๊ธฐ์กด์˜ Klaytn๊ณผ Finschia ๋ธ”๋ก์ฒด์ธ ๋„คํŠธ์›Œํฌ๊ฐ€ ํ†ตํ•ฉ๋˜์–ด ์šด์˜๋˜๋Š” ๋ธ”๋ก์ฒด์ธ์˜ ์ƒˆ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์ด์— ๋”ฐ๋ผ ๋ณธ ๋ฌธ์„œ๋Š” ๋Œ€๋ถ€๋ถ„ Klaytn์„ Kaia๋กœ / KLAY๋ฅผ KAIA๋กœ ์ง€์นญํ•˜์ง€๋งŒ, ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ๊ธฐ์กด ํ˜ธ์ถœ๊ณผ ์‘๋‹ต์—์„œ ์‚ฌ์šฉ๋˜๋˜ klaytn, KLAY ๋“ฑ์˜ ํ‚ค์›Œ๋“œ๋Š” ๋™์ผํ•˜๊ฒŒ ์œ ์ง€๋˜๋Š” ์  ์ฐธ๊ณ  ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ

  • (npm ์ด์šฉํ•˜์—ฌ ์„ค์น˜ํ•˜๋Š” ๊ฒฝ์šฐ) node 10 ์ด์ƒ ๊ถŒ์žฅ

ํ™˜๊ฒฝ ์„ค์ •

Klip JavaScript SDK๋Š” ๋ณ„๋„์˜ ๊ฐ€์ž… ์ ˆ์ฐจ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. HTTP ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•œ ์–ด๋А ํ™˜๊ฒฝ์—์„œ๋„ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ๊ธฐ๋ณธ์ ์œผ๋กœ Klip ์•ฑ์ด ์„ค์น˜๋œ ํ™˜๊ฒฝ์—์„œ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Klip ์•ฑ์„ ์‹คํ–‰ํ•˜์—ฌ Klip ์‚ฌ์šฉ์ž์˜ ์Šน์ธ์„ ๋ฐ›์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

npm์„ ์ด์šฉํ•˜๋Š” ๊ฒฝ์šฐ

npm install klip-sdk ํ˜น์€ yarn add klip-sdk ์ปค๋งจ๋“œ๋ฅผ ํ†ตํ•ด ์„ค์น˜ ํ›„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ES module import ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ง์ ‘ ํŒŒ์ผ์„ ๋‹ค์šด ๋ฐ›์•„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

ํƒญ์—์„œ Klip JavaScript SDK๋ฅผ ๋‹ค์šด๋ฐ›์Šต๋‹ˆ๋‹ค. ๋‹ค์šด ๋ฐ›์€ ํŒŒ์ผ์„ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ์œ„์น˜์‹œํ‚จ ํ›„ HTMLํŒŒ์ผ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ŠคํŠธ๋ฆฝํŠธ ํƒœ๊ทธ๋ฅผ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.

์ดํ›„ ๊ธ€๋กœ๋ฒŒ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์„ ์–ธ๋œ klipSDK ๋ณ€์ˆ˜๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฐ ๋ฉ”์†Œ๋“œ์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.

API

๊ฐœ์š”

App2App API ์š”์ฒญ์€ ํฌ๊ฒŒ prepare, request, getResult์˜ ์ˆœ์„œ๋กœ ์ง„ํ–‰์ด ๋ฉ๋‹ˆ๋‹ค.

  • prepare๋Š” ์–ด๋– ํ•œ ์š”์ฒญ์„ ํ• ์ง€ ์š”์ฒญ์„ ์ •์˜ํ•˜๋Š” ๋‹จ๊ณ„๋กœ ์ด 5๊ฐ€์ง€ ์ข…๋ฅ˜์˜ ์š”์ฒญ์ด ์กด์žฌ

  • request๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ํ†ตํ•ด Klip์œผ๋กœ ํ™”๋ฉด์ด ์ „ํ™˜๋˜์–ด ์‹ค์ œ ์„œ๋ช… ํ”„๋กœ์„ธ์Šค๋ฅผ ์ง„ํ–‰

  • getResult๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ํ†ตํ•ด ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ›๊ณ  ํ™•์ธ

์ถ”๊ฐ€์ ์œผ๋กœ getCardList๋Š” BApp ๊ฐœ๋ฐœ์˜ ํŽธ์˜๋ฅผ ์œ„ํ•ด Klip ์‚ฌ์šฉ์ž์˜ NFT ๋ชฉ๋ก์„ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ์ œ๊ณต๋˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

prepare

App2App API ์š”์ฒญ์„ ์ค€๋น„ํ•˜๊ณ  request key๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์š”์ฒญ ์œ ํ˜•

  • Klip ์—ฐ๊ฒฐ ํƒ€์ž…(=์ธ์ฆ)์˜ ๊ฒฝ์šฐ auth

  • KAIA(=KLAY) ์ „์†ก ํƒ€์ž…์˜ ๊ฒฝ์šฐ sendKLAY

  • Token ์ „์†ก ํƒ€์ž…์˜ ๊ฒฝ์šฐ sendToken

prepare.auth

์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ํš๋“ํ•˜๋Š” ์š”์ฒญ์ž…๋‹ˆ๋‹ค.

Parameters

Name
Type
Description

Example

prepare.sendKLAY

์‚ฌ์šฉ์ž์˜ KAIA(=KLAY)๋ฅผ ํŠน์ • ์ฃผ์†Œ๋กœ ์ „์†กํ•˜๋Š” ์š”์ฒญ์ž…๋‹ˆ๋‹ค.

Parameters

Name
Type
Description

Example

prepare.sendToken

์‚ฌ์šฉ์ž๊ฐ€ ๋ณด์œ ํ•œ ํ† ํฐ์„ ํŠน์ • ์ฃผ์†Œ๋กœ ์ „์†กํ•˜๋Š” ์š”์ฒญ์ž…๋‹ˆ๋‹ค.

Parameters

Name
Type
Description

Example

prepare.sendCard

์‚ฌ์šฉ์ž๊ฐ€ ๋ณด์œ ํ•œ ์นด๋“œ(NFT)๋ฅผ ํŠน์ • ์ฃผ์†Œ๋กœ ์ „์†กํ•˜๋Š” ์š”์ฒญ์ž…๋‹ˆ๋‹ค.

Parameters

Name
Type
Description

Example

prepare.executeContract

์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ์ปจํŠธ๋ž™ํŠธ์˜ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ํ•˜๋Š” ์š”์ฒญ์ž…๋‹ˆ๋‹ค.

Parameters

Name
Type
Description

Example

prepare.signMessage

์‚ฌ์šฉ์ž๊ฐ€ Klip ๊ณ„์ •์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์„œ๋ช…ํ•˜๋Š” ์š”์ฒญ์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด Klaytn ํ‘œ์ค€์— ๋”ฐ๋ผ "\x19Klaytn Signed Message:\n" + len(message)์˜ ์ ‘๋‘์‚ฌ๋ฅผ ๋ถ™์—ฌ ์„œ๋ช…ํ•ฉ๋‹ˆ๋‹ค.

Parameters

Name
Type
Description

Example

request

Deep Link๋ฅผ ์ด์šฉํ•˜์—ฌ Klip์— ์ธ์ฆ ๋˜๋Š” ์„œ๋ช…์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ ์ค‘์ธ ์Šค๋งˆํŠธํฐ ๊ธฐ๊ธฐ์— Klip ์•ฑ์ด ์„ค์น˜๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ์ž๋™ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ 'Klip ์†Œ๊ฐœ ํŽ˜์ด์ง€(https://klipwallet.com)' ๋กœ ์ด๋™ํ•˜์—ฌ ์‚ฌ์šฉ์ž๋Š” Klip ์•ฑ์„ ๋‹ค์šด๋กœ๋“œ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. requestKey์—๋Š” prepare ๋‹จ๊ณ„์—์„œ Klip ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ์š”์ฒญ ๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

PC ํ™˜๊ฒฝ์—์„œ QR code๋ฅผ ์ด์šฉํ•œ request ์Šคํ… ์ฒ˜๋ฆฌ๋Š” ํ•ญ๋ชฉ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

Parameters

Name
Type
Description

Example

getResult

App2App API ์š”์ฒญ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. requestKey์—๋Š” prepare ๋ฐ request ๋‹จ๊ณ„์—์„œ ์‚ฌ์šฉํ•œ ์š”์ฒญ ๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Parameters

Name
Type
Description

Example

getCardList

์‚ฌ์šฉ์ž์˜ ์นด๋“œ (NFT) ๋ณด์œ  ๋ชฉ๋ก์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์กฐํšŒํ•˜๊ณ ์ž ํ•˜๋Š” NFT ์ปจํŠธ๋ž™ํŠธ ์ฃผ์†Œ๋ฅผ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, Klip์—์„œ ์ง€์›ํ•˜๋Š” ์ปจํŠธ๋ž™ํŠธ๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

Parameters

Name
Type
Description

Example

Error Code

Http Status
Error Code
Description

์ด ๋ฌธ์„œ ํ˜น์€ Klip์— ๊ด€ํ•œ ๋ฌธ์˜๋Š” ์„ ๋ฐฉ๋ฌธํ•ด ๋„์›€์„ ๋ฐ›์œผ์‹ญ์‹œ์˜ค.

Card ์ „์†ก ํƒ€์ž…์˜ ๊ฒฝ์šฐ sendCard
  • Contract ์‹คํ–‰ ํƒ€์ž…์˜ ๊ฒฝ์šฐ 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 ์—๋Ÿฌ์ฝ”๋“œ์™€ ๋™์ผ

    ๋‹ค์šด๋กœ๋“œ
    QR code ์˜ˆ์ œ
    ๊ฐœ๋ฐœ์ž ํฌ๋Ÿผ
    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 })

    Download

    ์ด ํŽ˜์ด์ง€์—์„œ๋Š” App2App SDK ๋‹ค์šด๋กœ๋“œ ๋งํฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. JavaScript๋Š” npm์„ ํ†ตํ•ด์„œ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, Android ๋ฐ iOS๋Š” zip ์••์ถ• ํŒŒ์ผ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

    JavaScript

    ํ”„๋กœ๊ทธ๋žจ
    ๋ฒ„์ „
    ๋ฐฐํฌ์ผ

    v2.3.3

    2025.02.11

    Android

    ํ”„๋กœ๊ทธ๋žจ
    ๋ฒ„์ „
    ๋ฐฐํฌ์ผ
    ์ฐธ๊ณ 

    iOS

    ํ”„๋กœ๊ทธ๋žจ
    ๋ฒ„์ „
    ๋ฐฐํฌ์ผ
    ์ฐธ๊ณ 
    • Klip SDK๋ฅผ ์‚ฌ์šฉํ•จ์— ์žˆ์–ด ์‚ฌ์šฉ์ž๋Š” (์ฃผ)๊ทธ๋ผ์šด๋“œ์—‘์Šค๋ฅผ ์‚ฌ์นญํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.

    • Klip SDK ์‚ฌ์šฉ์— ๋”ฐ๋ผ ๋ฐœ์ƒํ•˜๋Š” ๋ชจ๋“  ์ฑ…์ž„์€ ์ „์ ์œผ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ์žˆ์œผ๋ฉฐ, (์ฃผ)๊ทธ๋ผ์šด๋“œ์—‘์Šค๋Š” ์‚ฌ์šฉ์ž ๋˜๋Š” ์ œ3์ž์— ๋Œ€ํ•ด ์–ด๋– ํ•œ ์ฑ…์ž„๋„ ์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

    • ์‚ฌ์šฉ์ž๋Š” Klip SDK๋ฅผ ์ƒ์—…์  ์šฉ๋„๋กœ ํŒ๋งคํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

    ์˜คํ”ˆ์†Œ์Šค ์‚ฌ์šฉ ๊ณ ์ง€

    • Android SDK:

    • iOS SDK:

    ์ด ๋ฌธ์„œ ํ˜น์€ Klip์— ๊ด€ํ•œ ๋ฌธ์˜๋Š” ์„ ๋ฐฉ๋ฌธํ•ด ๋„์›€์„ ๋ฐ›์œผ์‹ญ์‹œ์˜ค.

    Klip SDK ์‚ฌ์šฉ์ž๊ฐ€ ๊ณผ๋„ํ•œ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์„ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์‹œ๋„ํ•˜๋Š” ๋“ฑ ๋ถˆ๋ฒ• ํ˜น์€ ๋น„์ •์ƒ์ ์ธ ๋ฐฉ์‹์œผ๋กœ SDK๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋Š” ๊ฒฝ์šฐ, ์‚ฌ์ „ ๊ณ ์ง€์—†์ด Klip SDK ๋ฐ Klip API ์‚ฌ์šฉ์ด ์ฐจ๋‹จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    klipSDK-2.3.3.min.js

    v2.3.3

    2025.02.11

    Sample App

    v2.3.3

    2025.02.11

    Android SDK Full Source & Samples

    v2.3.0

    2024.11.18

    ๋ ˆํผ๋Ÿฐ์Šค

    iOS SDK Full Source & Samples

    v2.3.0

    2024.11.18

    ๋ ˆํผ๋Ÿฐ์Šค

    ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ์— ๋Œ€ํ•œ ๊ณ ์ง€๋ฌธ
    ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ์— ๋Œ€ํ•œ ๊ณ ์ง€๋ฌธ
    ๊ฐœ๋ฐœ์ž ํฌ๋Ÿผ
    npm package

    iOS SDK

    ์ด ํŽ˜์ด์ง€์—์„œ๋Š” BApp์—์„œ Klip์„ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•œ App2App iOS SDK๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

    Kaia๋Š” ๊ธฐ์กด์˜ Klaytn๊ณผ Finschia ๋ธ”๋ก์ฒด์ธ ๋„คํŠธ์›Œํฌ๊ฐ€ ํ†ตํ•ฉ๋˜์–ด ์šด์˜๋˜๋Š” ๋ธ”๋ก์ฒด์ธ์˜ ์ƒˆ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์ด์— ๋”ฐ๋ผ ๋ณธ ๋ฌธ์„œ๋Š” ๋Œ€๋ถ€๋ถ„ Klaytn์„ Kaia๋กœ / KLAY๋ฅผ KAIA๋กœ ์ง€์นญํ•˜์ง€๋งŒ, ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ๊ธฐ์กด ํ˜ธ์ถœ๊ณผ ์‘๋‹ต์—์„œ ์‚ฌ์šฉ๋˜๋˜ klaytn, KLAY ๋“ฑ์˜ ํ‚ค์›Œ๋“œ๋Š” ๋™์ผํ•˜๊ฒŒ ์œ ์ง€๋˜๋Š” ์  ์ฐธ๊ณ  ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

    ์š”๊ตฌ ์‚ฌํ•ญ

    • iOS 12.0 ์ด์ƒ

    • Swift 5.0 ์ด์ƒ

    • Xcode 13.4 ์ด์ƒ

    ํ™˜๊ฒฝ ์„ค์ •

    Klip iOS SDK๋Š” ๋ณ„๋„์˜ ๊ฐ€์ž… ์ ˆ์ฐจ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. HTTP ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•œ ์–ด๋А ํ™˜๊ฒฝ์—์„œ๋„ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ๊ธฐ๋ณธ์ ์œผ๋กœ Klip ์•ฑ์ด ์„ค์น˜๋œ ํ™˜๊ฒฝ์—์„œ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Klip ์•ฑ์„ ์‹คํ–‰ํ•˜์—ฌ Klip ์‚ฌ์šฉ์ž์˜ ์Šน์ธ์„ ๋ฐ›์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

    1. Klip SDK ์ ์šฉ

    Option 1. SPM ์‚ฌ์šฉ

    2.3.0 ์ด์ƒ ๋ฒ„์ „๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

    option 2. SDK ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ์ ์šฉ

    1. Klip SDK ๋‹ค์šด๋กœ๋“œ

    ํŽ˜์ด์ง€์—์„œ Klip iOS SDK๋ฅผ ๋‹ค์šด๋ฐ›์Šต๋‹ˆ๋‹ค.

    2. Klip SDK Framework ์ถ”๊ฐ€

    Klip SDK Framework๋ฅผ Importํ•˜์—ฌ ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ์— ์ถ”๊ฐ€

    1. ๊ฐœ๋ฐœ ์ค‘์ธ ํ”„๋กœ์ ํŠธ๋ฅผ Xcode๋กœ ์‹คํ–‰

    2. Xcode > ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ์˜ TARGETS ์„ ํƒ > General Tab > Framworks, Libraries, and Embedded Content Tab > ์™ผ์ชฝ ํ•˜๋‹จ์˜ + ๋ฒ„ํŠผ์„ ํด๋ฆญ

    3. Source Directory์— ๋‹ค์šด๋ฐ›์€ Klip SDK ํ”„๋กœ์ ํŠธ์˜ sdk ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์„ ํƒ, ํด๋ฆญํ•œ ํ›„ Next๋ฅผ ํด๋ฆญ

    4. ์™ผ์ชฝ์˜ Project navigator์˜ Frameworks์— ํ•ด๋‹น SDK๊ฐ€ Import ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ ํ›„ build ์ˆ˜ํ–‰

    Apple App Store ๋“ฑ๋ก์šฉ ์•ฑ ๋นŒ๋“œ ์‹œ์—๋Š” KlipLib.xcframework๋งŒ ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. KlipLib-simulator.xcframework๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—๋งŒ ์‚ฌ์šฉํ•ด์ฃผ์„ธ์š”.

    Klip SDK ์†Œ์Šค๊ฐ€ ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ์— ๋ณต์‚ฌ๋˜๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    2. Info.plist ์„ค์ •

    ์•ฑ ์‹คํ–‰ ํ—ˆ์šฉ ๋ชฉ๋ก(Allowlist) ๋“ฑ๋กํ•˜๊ธฐ

    iOS 9.0 ์ด์ƒ์—์„œ iOS SDK๋กœ Klip ๋“ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜๋ ค๋ฉด Info.plist ํŒŒ์ผ์— ์„ค์ •์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ปค์Šคํ…€ ์Šคํ‚ด ์ •๋ณด๋ฅผ ๋“ฑ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    [Info] > [Custom iOS Target Properties]์— Array ํƒ€์ž… ํ‚ค(Key)์ธ LSApplicationQueriesSchemes๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ํ•ด๋‹น ํ‚ค์˜ 'Item'์œผ๋กœ ์ปค์Šคํ…€ ์Šคํ‚ด์— ์‚ฌ์šฉํ•  ๊ฐ’์ธ 'klip'์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

    4. Source Import ์„ค์ •

    v2.1.0 ์ด์ƒ

    v2.1.0 ๋ฏธ๋งŒ

    API

    ๊ฐœ์š”

    App2App API ์š”์ฒญ์€ ํฌ๊ฒŒ prepare, request, getResult์˜ ์ˆœ์„œ๋กœ ์ง„ํ–‰์ด ๋ฉ๋‹ˆ๋‹ค.

    • prepare๋Š” ์–ด๋– ํ•œ ์š”์ฒญ์„ ํ• ์ง€ ์š”์ฒญ์„ ์ •์˜ํ•˜๋Š” ๋‹จ๊ณ„๋กœ ์ด 5๊ฐ€์ง€ ์ข…๋ฅ˜์˜ ์š”์ฒญ์ด ์กด์žฌ

    • request๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ํ†ตํ•ด Klip์œผ๋กœ ํ™”๋ฉด์ด ์ „ํ™˜๋˜์–ด ์‹ค์ œ ์„œ๋ช… ํ”„๋กœ์„ธ์Šค๋ฅผ ์ง„ํ–‰

    • getResult๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ํ†ตํ•ด ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ›๊ณ  ํ™•์ธ

    ์ถ”๊ฐ€์ ์œผ๋กœ getCardList๋Š” BApp ๊ฐœ๋ฐœ์˜ ํŽธ์˜๋ฅผ ์œ„ํ•ด Klip ์‚ฌ์šฉ์ž์˜ NFT ๋ชฉ๋ก์„ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ์ œ๊ณต๋˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

    KlipSDK.shared

    Klip SDK๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

    Return Value

    Type
    Description

    Example

    KlipSDK.shared.prepare

    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

    Name
    Type
    Description

    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

    KlipSDK.shared.request(requestKey: String) -> Void Deep Link๋ฅผ ์ด์šฉํ•˜์—ฌ Klip์— ์ธ์ฆ ๋˜๋Š” ์„œ๋ช…์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ ์ค‘์ธ ์Šค๋งˆํŠธํฐ ๊ธฐ๊ธฐ์— Klip ์•ฑ์ด ์„ค์น˜๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ์ž๋™ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ 'Klip ์†Œ๊ฐœ ํŽ˜์ด์ง€(https://klipwallet.com)' ๋กœ ์ด๋™ํ•˜์—ฌ ์‚ฌ์šฉ์ž๋Š” Klip ์•ฑ์„ ๋‹ค์šด๋กœ๋“œ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. requestKey์—๋Š” prepare ๋‹จ๊ณ„์—์„œ Klip ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ์š”์ฒญ ๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    PC ํ™˜๊ฒฝ์—์„œ QR code๋ฅผ ์ด์šฉํ•œ request ์Šคํ… ์ฒ˜๋ฆฌ๋Š” ํ•ญ๋ชฉ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

    Parameters

    Name
    Type
    Description

    Example

    KlipSDK.shared.getResult

    KlipSDK.shared.getResult(requestKey: String, completion: @escaping(KlipCallback<KlipTxResponse>) -> Void) App2App API ์š”์ฒญ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. requestKey์—๋Š” prepare ๋ฐ request ๋‹จ๊ณ„์—์„œ ์‚ฌ์šฉํ•œ ์š”์ฒญ ๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    Parameters

    Name
    Type
    Description

    Example

    KlipSDK.shared.getCardList

    KlipSDK.shared.getCardList(cardAddress: String, userAddress: String, cursor: String?, completion: @escaping(KlipCallback<CardListResponse>) -> Void) ์‚ฌ์šฉ์ž์˜ ๋ชจ๋“  ์นด๋“œ ์ค‘ ํŠน์ • ์นด๋“œ์˜ ๋ชฉ๋ก์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

    Parameters

    Name
    Type
    Description

    Example

    Error Code

    Http Status
    Error Code
    Description

    ์ด ๋ฌธ์„œ ํ˜น์€ Klip์— ๊ด€ํ•œ ๋ฌธ์˜๋Š” ์„ ๋ฐฉ๋ฌธํ•ด ๋„์›€์„ ๋ฐ›์œผ์‹ญ์‹œ์˜ค.

    Card ์ „์†ก ํƒ€์ž…์˜ ๊ฒฝ์šฐ CardTxRequest
  • Contract ์‹คํ–‰ ํƒ€์ž…์˜ ๊ฒฝ์šฐ 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

    ๋‹ค์šด๋กœ๋“œ
    QR code ์˜ˆ์ œ
    ๊ฐœ๋ฐœ์ž ํฌ๋Ÿผ

    Klip SDK์—์„œ ์—๋Ÿฌ ๋ฐœ์ƒ (Klip Protocol ์—๋Ÿฌ)

    https://github.com/ground-x/klip-a2a-ios-sdk.git
     	<key>LSApplicationQueriesSchemes</key>
     	<array>
     		<string>klip</string>
     	</array>
    import KlipLib
    import KlipSDK
    let 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):
        }
    }

    Android SDK

    ์ด ํŽ˜์ด์ง€์—์„œ๋Š” BApp์—์„œ Klip์„ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•œ App2App Android SDK๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

    Kaia๋Š” ๊ธฐ์กด์˜ Klaytn๊ณผ Finschia ๋ธ”๋ก์ฒด์ธ ๋„คํŠธ์›Œํฌ๊ฐ€ ํ†ตํ•ฉ๋˜์–ด ์šด์˜๋˜๋Š” ๋ธ”๋ก์ฒด์ธ์˜ ์ƒˆ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์ด์— ๋”ฐ๋ผ ๋ณธ ๋ฌธ์„œ๋Š” ๋Œ€๋ถ€๋ถ„ Klaytn์„ Kaia๋กœ / KLAY๋ฅผ KAIA๋กœ ์ง€์นญํ•˜์ง€๋งŒ, ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ๊ธฐ์กด ํ˜ธ์ถœ๊ณผ ์‘๋‹ต์—์„œ ์‚ฌ์šฉ๋˜๋˜ klaytn, KLAY ๋“ฑ์˜ ํ‚ค์›Œ๋“œ๋Š” ๋™์ผํ•˜๊ฒŒ ์œ ์ง€๋˜๋Š” ์  ์ฐธ๊ณ  ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

    ์š”๊ตฌ ์‚ฌํ•ญ

    • 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์— ์†Œ๊ฐœ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

    1. Klip SDK ๋‹ค์šด๋กœ๋“œ

    ํŽ˜์ด์ง€์—์„œ Klip Android SDK๋ฅผ ๋‹ค์šด๋ฐ›์Šต๋‹ˆ๋‹ค.

    2. Klip SDK ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€

    ๋ฐฉ๋ฒ• 1. Klip SDK ๋นŒ๋“œ ํ›„ ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ์— ์ถ”๊ฐ€

    1. ๋‹ค์šด๋ฐ›์€ Klip SDK ํ”„๋กœ์ ํŠธ์˜ ์œ„์น˜์—์„œ Terminal์„ ์‹คํ–‰

    2. ./gradlew :sdk:build ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ Klip SDK ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œ (๋นŒ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด <Klip SDK ํ”„๋กœ์ ํŠธ>/sdk/build/outputs/aar/์œ„์น˜์— ๊ฒฐ๊ณผ๋ฌผ์ธ AAR ํŒŒ์ผ์ด ์ƒ์„ฑ๋จ)

    3. ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ์— libs ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑ

    4. ๋นŒ๋“œ๋œ AAR ํŒŒ์ผ์„ ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ์˜ libs ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๋ณต์‚ฌ

    ๋ฐฉ๋ฒ• 2. Klip SDK ์†Œ์Šค์ฝ”๋“œ๋ฅผ Importํ•˜์—ฌ ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ์— ์ถ”๊ฐ€

    1. ๊ฐœ๋ฐœ ์ค‘์ธ ํ”„๋กœ์ ํŠธ๋ฅผ Android Studio๋กœ ์‹คํ–‰

    2. Android Studio > File > New > Import Module์„ ํด๋ฆญ

    3. Source Directory์— ๋‹ค์šด๋ฐ›์€ Klip SDK ํ”„๋กœ์ ํŠธ์˜ sdk ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์„ ํƒ, ํด๋ฆญํ•œ ํ›„ Next๋ฅผ ํด๋ฆญ

    4. Klip SDK ํ”„๋กœ์ ํŠธ์˜ gradle.properties

    Klip SDK ์†Œ์Šค๊ฐ€ ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ์— ๋ณต์‚ฌ๋˜๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ, ๋‹จ์ผ ๋ฒ„์ „์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฝ”๋“œ๋ฅผ ์œ ์ง€ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์—๋Š” ์ด ๋ฐฉ๋ฒ•์ด ์ ์ ˆํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ, ๋ฐฉ๋ฒ• 1์—์„œ ์•ˆ๋‚ดํ•œ ๋‚ด์šฉ์— ๋”ฐ๋ผ ์ปดํŒŒ์ผ๋œ AAR ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

    3. ์„ค์ •ํ•˜๊ธฐ

    ์ธํ„ฐ๋„ท ์‚ฌ์šฉ ๊ถŒํ•œ ์„ค์ •ํ•˜๊ธฐ

    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 ์ด์ƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์„ค์ •ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.) ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ฅผ ์ฐธ๊ณ ํ•ฉ๋‹ˆ๋‹ค.

    API

    ๊ฐœ์š”

    App2App API ์š”์ฒญ์€ ํฌ๊ฒŒ prepare, request, getResult์˜ ์ˆœ์„œ๋กœ ์ง„ํ–‰์ด ๋ฉ๋‹ˆ๋‹ค.

    • prepare๋Š” ์–ด๋– ํ•œ ์š”์ฒญ์„ ํ• ์ง€ ์š”์ฒญ์„ ์ •์˜ํ•˜๋Š” ๋‹จ๊ณ„๋กœ ์ด 5๊ฐ€์ง€ ์ข…๋ฅ˜์˜ ์š”์ฒญ์ด ์กด์žฌ

    • request๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ํ†ตํ•ด Klip์œผ๋กœ ํ™”๋ฉด์ด ์ „ํ™˜๋˜์–ด ์‹ค์ œ ์„œ๋ช… ํ”„๋กœ์„ธ์Šค๋ฅผ ์ง„ํ–‰

    • getResult๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ํ†ตํ•ด ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ›๊ณ  ํ™•์ธ

    ์ถ”๊ฐ€์ ์œผ๋กœ getCardList๋Š” BApp ๊ฐœ๋ฐœ์˜ ํŽธ์˜๋ฅผ ์œ„ํ•ด Klip ์‚ฌ์šฉ์ž์˜ NFT ๋ชฉ๋ก์„ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ์ œ๊ณต๋˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

    Klip.getInstance

    Klip SDK๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

    Parameters

    Name
    Type
    Description

    Return Value

    Type
    Description

    Example

    Klip.prepare

    App2App API ์š”์ฒญ ์ฒ˜๋ฆฌ๋ฅผ ์ค€๋น„ํ•˜๊ณ  request key๋ฅผ ๋ฐœ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.

    App2App REST API์˜ Prepare ์š”์ฒญ๊ณผ ๊ฐ™์ด, Android SDK์—์„œ๋„ BAppInfo์˜ setCallback ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด์„œ BApp์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ ์œ„ํ•œ Deep Link๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Link ํ˜•์‹์€ Intent Scheme ํ˜•์‹(intent://...)์˜ Deep Link๋กœ ์ž‘์„ฑ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

    Request ๊ฐ’์— ์‚ฌ์šฉํ•  ๊ฐ์ฒด

    • Klip ์—ฐ๊ฒฐ ํƒ€์ž…(=์ธ์ฆ)์˜ ๊ฒฝ์šฐ AuthRequest

    • KAIA(=KLAY) ์ „์†ก ํƒ€์ž…์˜ ๊ฒฝ์šฐ KlayTxRequest

    • Token ์ „์†ก ํƒ€์ž…์˜ ๊ฒฝ์šฐ TokenTxRequest

    Parameters

    Name
    Type
    Description

    Throws

    Type
    Description

    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์— ๊ด€ํ•œ ๋ฌธ์˜๋Š” ์„ ๋ฐฉ๋ฌธํ•ด ๋„์›€์„ ๋ฐ›์œผ์‹ญ์‹œ์˜ค.

    Klip.request

    Deep Link๋ฅผ ์ด์šฉํ•˜์—ฌ Klip์— ์ธ์ฆ ๋˜๋Š” ์„œ๋ช…์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ ์ค‘์ธ ์Šค๋งˆํŠธํฐ ๊ธฐ๊ธฐ์— Klip ์•ฑ์ด ์„ค์น˜๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ์ž๋™ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ 'Klip ์†Œ๊ฐœ ํŽ˜์ด์ง€(https://klipwallet.com)' ๋กœ ์ด๋™ํ•˜์—ฌ ์‚ฌ์šฉ์ž๋Š” Klip ์•ฑ์„ ๋‹ค์šด๋กœ๋“œ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. requestKey์—๋Š” prepare ๋‹จ๊ณ„์—์„œ Klip ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ์š”์ฒญ ๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    PC ํ™˜๊ฒฝ์—์„œ QR code๋ฅผ ์ด์šฉํ•œ request ์Šคํ… ์ฒ˜๋ฆฌ๋Š” ํ•ญ๋ชฉ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

    Parameters

    Name
    Type
    Description

    Throws

    Type
    Description

    Example

    Klip.getResult

    App2App API ์š”์ฒญ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. requestKey์—๋Š” prepare ๋ฐ request ๋‹จ๊ณ„์—์„œ ์‚ฌ์šฉํ•œ ์š”์ฒญ ๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    Parameters

    Name
    Type
    Description

    Throws

    Type
    Description

    Example

    Klip.getCardList

    ์‚ฌ์šฉ์ž์˜ ๋ชจ๋“  ์นด๋“œ ์ค‘ ํŠน์ • ์นด๋“œ์˜ ๋ชฉ๋ก์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

    Parameters

    Name
    Type
    Description

    Throws

    Type
    Description

    Example

    Error Code

    ์—๋Ÿฌ์ฝ”๋“œ๋Š” KlipCallback์˜ ์‹คํŒจ์˜ ์‘๋‹ต๊ฒฐ๊ณผ์ธ KlipErrorResponse์˜ getErrorCode()ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    Http Status
    Error Code
    Description

    ์ด ๋ฌธ์„œ ํ˜น์€ Klip์— ๊ด€ํ•œ ๋ฌธ์˜๋Š” ์„ ๋ฐฉ๋ฌธํ•ด ๋„์›€์„ ๋ฐ›์œผ์‹ญ์‹œ์˜ค.

  • ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ์˜ build.gradle์— ๋””๋ ‰ํ† ๋ฆฌ ์ฐธ์กฐ ๋ฐ ๋””ํŽœ๋˜์‹œ ์„ค์ •์„ ์ถ”๊ฐ€

  • ๋‚ด์šฉ๋“ค์„ ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ๋กœ ๋ณต์‚ฌ
  • ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ์˜ build.gradle์— ๋””ํŽœ๋˜์‹œ ์„ค์ •์„ ์ถ”๊ฐ€

  • Card ์ „์†ก ํƒ€์ž…์˜ ๊ฒฝ์šฐ CardTxRequest
  • Contract ์‹คํ–‰ ํƒ€์ž…์˜ ๊ฒฝ์šฐ 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

    ๋‹ค์šด๋กœ๋“œ
    Android 11์˜ ํŒจํ‚ค์ง€ ๊ณต๊ฐœ ์ƒํƒœ
    ๊ฐœ๋ฐœ์ž ํฌ๋Ÿผ
    QR code ์˜ˆ์ œ
    ๊ฐœ๋ฐœ์ž ํฌ๋Ÿผ

    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);