ÿÿ안드로ì´ë“œ ì¸ì•± 구매 SDK: 안드로ì´ë“œ ì•±ì— IAP 통합

안드로ì´ë“œ ì•±ì— ì§€ë¶ˆì„ í†µí•©í•˜ê¸°ìœ„í•œ 오픈 소스 코드

30ë¶„ ì•ˆì— ì¸ì•± 구매를 구현하세요.

Android ì¸ì•± 구매를 위한 즉시 사용 가능한 백엔드

ì¸ì•± 구매 í†µí•©ì€ êµ¬ë… ì´ë²¤íŠ¸ë¥¼ 위한 백엔드 ì¸í”„ë¼ì™€ 서버를 구축해야 합니다. ì´ëŠ” 수백 ì‹œê°„ì˜ ìž‘ì—…ì„ ì†Œìš”í•˜ê³  유지 보수가 어려울 수 있습니다.
import StoreKit
class Store: ObservableObject {
    private var productIDs = ["stone"]
    @Published var products = [Product]()
    init() {
        Task {
            await requestProducts()
        }
    }  
    @MainActor
    func requestProducts() async {
        do {
            products = try await Product.products(for: productIDs)
        } catch {
            print(error)
    }
  }
}
Section(header: Text("To buy")) {
 }
ForEach(store.products, id: \.id) {
  product in
    HStack {
      Text(product.displayName)
      Spacer()
      Button("\(product.displayPrice)") {
    }
  }
}
@Published var purchasedNonConsumables = [Product]()
@MainActor
func purchase(_ product: Product) async throws -> Transaction ? {
  let result =
    try await product.purchase()
  switch result {
    case .success(.verified(let transaction)):
      purchasedNonConsumables.append(product)
      await transaction.finish()
      return transaction
    default:
      return nil
  }
}
Button("\(product.displayPrice)") {
 Task {
  try await store.purchase(product)
  }
}
ProductView(
 icon: "â€",
 quantity: "\(store.purchasedNonConsumables.count)"
 )
 func listenForTransactions() -> Task < Void, Error > {
  return Task.detached {
    for await result in Transaction.updates {
      switch result {
        case let.verified(transaction):
          guard
          let product = self.products.first(where: {
            $0.id == transaction.productID
          })
          else {
            continue
          }
          self.purchasedNonConsumables.append(product)
          await transaction.finish()
        default:
          continue
      }
    }
  }
}
var transacitonListener: Task<Void, Error>?
init() {
   transacitonListener = listenForTransactions()
   Task {
     await requestProducts()
 }
}
@MainActor
private func handle(transactionVerification result: VerificationResult <Transaction> ) async {
  switch result {
    case let.verified(transaction):
      guard
      let product = self.products.first(where: {
        $0.id == transaction.productID
      })
      else {
        return
      }
      self.purchasedNonConsumables.insert(product)
      await transaction.finish()
    default:
      return
  }
}
Adapty SDK는 iOS ì•±ì— ì¸ì•± 구ë…ì„ í†µí•©í•  수 있게 해주는 기성 ì¸í”„ë¼ë¡œ, 모든 êµ¬ë… ì´ë²¤íŠ¸ë¥¼ 처리하고 ìˆ˜ìµ ì¦ê°€ ê¸°ëŠ¥ì„ ì œê³µí•©ë‹ˆë‹¤.
Adapty.activate(this, AdaptyConfig.Builder("YOUR_APP_KEY").build())
 
// Make a purchase, Adapty handles the rest
Adapty.makePurchase(activity, product) { result ->
	when (result) {
		is AdaptyResult.Success -> {
			if (result.value is AdaptyPurchaseResult.Success)
				// successful purchase
		}
		is AdaptyResult.Error -> {
			// handle the error
		}
	}
}
통합ì—서 유지 관리까지 – Adapty는 IAP ìž‘ì—…ì„ ì‰½ê²Œ 하ë„ë¡ ì„¤ê³„ë˜ì—ˆìŠµë‹ˆë‹¤.
ë°ëª¨ 요청

왜 Adapty SDK를 ì„ íƒí•´ì•¼ 할까요?

언제든지 올바른 êµ¬ë… ìƒíƒœ

모든 플랫í¼ì—서 í•­ìƒ ì˜¬ë°”ë¥¸ 구ë…ìžì˜ ìƒíƒœë¥¼ 유지할 수 있습니다.

서버 측 ì˜ìˆ˜ì¦ ê²€ì¦

구매 ê²€ì¦ì˜ 정확성과 ì•ˆì „ì„±ì— ëŒ€í•´ 걱정할 필요가 없습니다.

모든 ì¢…ë¥˜ì˜ êµ¬ë… ìƒíƒœ 처리

무료 ì²´í—˜, 업그레ì´ë“œ, 프로모션 제공, 가족 공유, 갱신 등.

ì§§ì€ ì¶œì‹œ 주기를 가진 기업 준비 완료 플랫í¼

>99.99% SLA 신뢰성 ë° ì •ê¸°ì ì¸ 제품 ì—…ë°ì´íЏ.
í”Œëž«í¼ êµ¬ì„±
Adapty SDK 설치
Adapty.activate(
   "PUBLIC_SDK_KEY",
   customerUserId: "YOUR_USER_ID"
)
구매 ì´ë²¤íЏ 처리

빠르고 쉬운 통합

iOS ì•±ì— Adapty SDK를 통합하는 ë° ë‹¨ 몇 시간만 투ìží•˜ë©´ 나머지는 ì €í¬ê°€ 처리합니다.

ì¸ì•± 구매를 구현하기 위한 단 5ê°œì˜ SDK 메서드

Adapty.makePurchase(activity, product) { result ->
    when (result) {
        is AdaptyResult.Success -> {
            val info = result.value
            //NOTE: info is null in case of cross-grade with DEFERRED proration mode
            val profile = info?.profile
 
            if (profile?.accessLevels?.get("YOUR_ACCESS_LEVEL")?.isActive == true) {
                // grant access to premium features
            }
        }
        is AdaptyResult.Error -> {
            val error = result.error
            // handle the error
        }
    }
}
// Your app's code
Adapty.restorePurchases { [weak self] result in
    switch result {
        case let .success(profile):
            if info.profile.accessLevels["YOUR_ACCESS_LEVEL"]?.isActive ?? false {
	            // successful access restore
            }
        case let .failure(error):
            // handle the error
    }
}
 
// Your app's code
Adapty.identify("YOUR_USER_ID") { error ->
    if (error == null) {
        // successful identify
    }
}
 
 
 
 
 
 
// Your app's code
val builder = AdaptyProfileParameters.Builder()
    .with("Profile_Parameters")
 
Adapty.updateProfile(builder.build()) { error ->
    if (error != null) {
        // handle the error
    }
}
 
 
 
// Your app's code
Adapty.updateAttribution(attribution, AdaptyAttributionSource.CUSTOM) { error ->
    if (error != null) {
        //handle error
    }
}
 
 
 
 
 
 
무료로 시ë„하기

모든 ì¢…ë¥˜ì˜ ë¹„ì¦ˆë‹ˆìŠ¤ì—서 ì‚¬ëžŒë“¤ì´ ìˆ˜ìµì„ ì¦ëŒ€í•˜ê¸° 위해 Adapty를 ì„ íƒí•©ë‹ˆë‹¤.

Cem Ortabas, Co-founder and CEO of HubX
RevenueCatì—서 ì´ì „하는 ê²ƒì€ ìš°ë¦¬ì—게 쉽지 ì•Šì€ ê²°ì •ì´ì—ˆìŠµë‹ˆë‹¤. 우리는 성장하면서 ë” ë‚˜ì€ íŒŒíŠ¸ë„ˆë¼ê³  믿는 Adapty를 ì„ íƒí–ˆìŠµë‹ˆë‹¤.振품 ëŒì•„ë³´ë©´ ê·¸ê²ƒì´ ì˜¬ë°”ë¥¸ ì„ íƒì´ì—ˆìŠµë‹ˆë‹¤. 몇 가지 문제가 있었지만 Adapty íŒ€ì€ ì´ì „ 중과 ê·¸ 후ì—ë„ í•­ìƒ ë„ì›€ì„ ì£¼ì—ˆìŠµë‹ˆë‹¤. ê·¸ë“¤ì˜ ì§€ì›ì€ 최ìƒê¸‰ìž…니다. 저는 Adapty를 신뢰할 수 있는 파트너로 추천합니다.
Cem Ortabas
ê³µë™ ì°½ë¦½ìžì´ìž CEO, HubX
HUBX
Arkadiy Yukhnevich
Almus는 다양한 iOS ì•±ì„ ìš´ì˜í•˜ë©°, ê° ì•±ë§ˆë‹¤ 고유한 사용ìžì¸µê³¼ 수ìµí™” 과제가 있습니다. ê²°ì œ ë¶„ì„ì˜ ì˜¤ë¥˜ëŠ” 치명ì ì´ê¸° ë•Œë¬¸ì— í”Œëž«í¼ ì„ íƒì— ì‹ ì¤‘ì„ ê¸°í–ˆìŠµë‹ˆë‹¤. ì €í¬ëŠ” RevenueCatì—서 Adapty로 ì´ì „했습니다. 쉬운 ê³¼ì •ì€ ì•„ë‹ˆì—ˆì§€ë§Œ, Adapty íŒ€ì€ ì²˜ìŒë¶€í„° ë까지 우리와 어깨를 나란히 하며 함께했습니다. 우리는 ê°™ì€ ì–¸ì–´ë¥¼ 사용합니다. ê·¸ë“¤ì˜ ë¡œë“œë§µì€ ì €í¬ì—게 중요한 ì§€í‘œì¸ LTV와 ROAS를 실질ì ìœ¼ë¡œ 움ì§ìž…니다. Adapty는 ì €í¬ì˜ 성장 파트너입니다.
Arkadiy Yukhnevich
Almusì˜ ìµœê³  ê²½ì˜ìž
Almus
Roman Degtyarev
ì €í¬ëŠ” 2022년부터 Adapty를 사용해 왔으며, ì´ì œëŠ” 앱 비즈니스를 ìš´ì˜í•˜ëŠ” ë° ìžˆì–´ 핵심ì ì¸ ë¶€ë¶„ì´ ë˜ì—ˆìŠµë‹ˆë‹¤. êµ¬ë… ê´€ë¦¬, ë¶„ì„, A/B 테스트 — ì €í¬ëŠ” ì´ ëª¨ë“  ê¸°ëŠ¥ì„ í™œìš©í•˜ê³  있습니다. Adapty는 ì†ë„를 늦추지 ì•Šìœ¼ë©´ì„œë„ ì„±ìž¥í•˜ê³  실험할 수 있는 ë„구를 제공합니다. ê·¸ë“¤ì˜ ì§€ì› íŒ€ê³¼ ê³ ê° ì„±ê³µ íŒ€ì€ ì§„ì‹¬ìœ¼ë¡œ ì €í¬ì˜ ì´ì•¼ê¸°ì— 귀를 기울ì´ë©°, ì´ëŠ” 제품 ê·¸ ìžì²´ë§Œí¼ì´ë‚˜ 중요한 부분입니다. 단순한 ê³ ê°ì´ 아닌 파트너로 ëŠê»´ì§€ëŠ” 관계는 í”치 않습니다.
Roman Degtyarev
ê³µë™ ì„¤ë¦½ìž
Glam AI
Chris Bick, Founder and CEO of Bickster
우리는 2021년부터 Adapty와 함께 작업해왔고 매우 만족스럽습니다. 우리는 ê³¼ê±°ì— ë‹¤ë¥¸ êµ¬ë… ê´€ë¦¬ 플랫í¼ì„ 시ë„했기 ë•Œë¬¸ì— ë¹„êµí•  수 있습니다. Adapty는 수년 ë™ì•ˆ ìˆ˜ë§Žì€ ê¸°ëŠ¥ì„ ë„입하였고 ì§€ì†ì ìœ¼ë¡œ ìš°ë¦¬ì˜ ì„±ìž¥ì„ ë„왔습니다. ê·¸ë“¤ì€ ì‹œìž¥ì—서 ìµœê³ ì˜ ë¶„ì„ ë„구를 제공하며 ìƒê°í•  수 있는 모든 통합 ê¸°ëŠ¥ì„ ê°–ì¶”ê³  있습니다. ê·€í•˜ì˜ ì•± 수ìµì„ ì¦ëŒ€í•˜ê³  싶다면 Adapty를 확실히 추천합니다.
Chris Bick
창립ìžì´ìž CEO, Bickster
Bickster
Kyle Smith, Head of data at Smitten Dating
Adaptyì˜ í”Œëž«í¼ì€ 비개발ìžë“¤ì´ A/B 테스트, paywalls, 제품 믹스 ë° ê°€ê²© 구조를 쉽게 ìƒì„±í•˜ê³  관리할 수 있ë„ë¡ í•´ì¤ë‹ˆë‹¤. ê·¸ë“¤ì€ Amplitude나 Mixpanelê³¼ ê°™ì€ ë‹¤ë¥¸ ë¶„ì„ ë„êµ¬ì— ê´€ë ¨ ì´ë²¤íŠ¸ë¥¼ 쉽게 전달할 수 있게 해주는 훌륭한 외부 API를 갖추고 있습니다.
Kyle Smith
Smitten Datingì˜ ë°ì´í„° ì±…ìž„ìž
Smitten
Roi Mulia, Founder & CEO of SocialKit
우리는 4개월 ë™ì•ˆ 300ê°œ ì´ìƒì˜ paywallsì„ í…ŒìŠ¤íŠ¸í–ˆìŠµë‹ˆë‹¤. Adapty는 ì‚¬ì‹¤ìƒ paywallì˜ ëª¨ë“  요소를 테스트할 수 있게 해주었고, 우리는 ì´ë¥¼ 활용했습니다. 우리는 제품, 제목 í…스트, CTA 버튼, ì´ë¯¸ì§€, 비디오 ë“±ì„ ëª¨ë‘ í…ŒìŠ¤íŠ¸í–ˆìŠµë‹ˆë‹¤. Adaptyì˜ A/B 테스트로 우리는 ì›” 수ìµì„ ë‘ ë°°ë¡œ 늘렸습니다. í•˜ë‚˜ì˜ ë„구가 ì´ë ‡ê²Œ í° ì˜í–¥ì„ 미칠 수 있ì„ì§€ í™•ì‹ ì´ ì—†ì—ˆì§€ë§Œ, ì§ì ‘ 목격했습니다.
Roi Mulia
ì°½ë¦½ìž ë° CEO, SocialKit
SocialKit

Adapty로 ë¬´ì—‡ì„ ì–»ì„ ìˆ˜ 있나요?

Adapty SDK는 앱 수ìµì„ ì¦ê°€ì‹œí‚¤ê¸° 위한 엄청난 ê°€ëŠ¥ì„±ì„ ì œê³µí•©ë‹ˆë‹¤.

ê·€í•˜ì˜ Android ì•±ì— ëŒ€í•œ 실시간 ë¶„ì„

App Store Connect와 함께 99.5% 정확ë„로 ë°ì´í„°ë¥¼ 신뢰하세요.
시작하기
App Icon Gravity
Gravity Fit
ê±´ê°• ë° í”¼íŠ¸ë‹ˆìŠ¤
“투명하고 고급 ë¶„ì„ ëŒ€ì‹œë³´ë“œëŠ” 추가 ë„구를 사용하지 ì•Šê³ ë„ ë” ë¹ ë¥¸ ê²°ì •ì„ ë‚´ë¦´ 수 있ë„ë¡ ë„와ì¤ë‹ˆë‹¤. ì´ëŠ” ë§Žì€ ì‹œê°„ê³¼ ëˆì„ 절약하게 í•´ì¤ë‹ˆë‹¤.â€
Ekaterina K,
Gravity Fitì˜ PM
Accuracy Adapty Appstore
ABC testing

페ì´ì›” A/B 테스트

가장 수ìµì„±ì´ ë†’ì€ íŽ˜ì´ì›”ì„ ì°¾ì•„ ì•±ì˜ ìˆ˜ìµì„ ì¦ê°€ì‹œí‚¤ì„¸ìš”.
A/B 테스트 íƒìƒ‰
MentalGrowth
MentalGrowth
ê±´ê°• ë° ì›°ë¹™ 앱
“Adaptyì˜ ë¹ ë¥¸ ë¶„ì„ê³¼ 쉽게 시작할 수 있는 A/B 테스트 기능 ë•ë¶„ì— ê°€ì„¤ì„ ì‹ ì†í•˜ê²Œ ê²€ì¦í•˜ê³  훌륭한 결과를 ì–»ì„ ìˆ˜ 있었습니다.â€
Vadim Nemchenko,
MentalGrowthì˜ ì œí’ˆ 관리ìž

페ì´ì›”ì— ëŒ€í•œ ì›ê²© 구성

ì•±ì„ ë‹¤ì‹œ 출시하지 ì•Šê³ ë„ ì›ê²©ìœ¼ë¡œ 페ì´ì›”ì„ ë³€ê²½í•˜ì„¸ìš”.
지금 시ë„하기
Smitten
Smitten - ë°ì´íŒ…
ë¼ì´í”„스타ì¼
â€œìš°ë¦¬ì˜ ì„±ìž¥ ë° ìˆ˜ìµ íŒ€ì€ ë‹¤ì–‘í•œ 시장ì—서 페ì´ì›”, 제품 제공 ë° ê°€ê²©ëŒ€ 테스트를 ì‹ ì†í•˜ê²Œ 구현하고 관리할 수 있습니다.â€
Kyle Smith,
Smitten ë°ì´íŒ…ì˜ ë°ì´í„° ì±…ìž„ìž
Table Json Table Locale

사용성 ë° ê³ ê° ì„œë¹„ìŠ¤ì— ëŒ€í•œ 신뢰

500ê°œ ì´ìƒì˜ 리뷰를 기반으로
G2 Award: Leader (EMEA), winter 2025
G2 Award: Leader (EMEA), winter 2025
G2 Award: Leader (EMEA), winter 2025
G2 Award: Leader (EMEA), winter 2025
G2 Award: Leader (EMEA), winter 2025

다른 플랫í¼ìš© SDK를 찾고 계신가요?

ÿÿÿÿ