ÿÿAndroidアプリ内課金SDK: Androidアプリã«IAPã‚’çµ±åˆã™ã‚‹

Androidアプリã§ã®æ”¯æ‰•ã„ã‚’çµ±åˆã™ã‚‹ãŸã‚ã®ã‚ªãƒ¼ãƒ—ンソースコード

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ã‚’çµ±åˆã™ã‚‹ã®ã«ã‚ãšã‹æ•°æ™‚é–“ã§æ¸ˆã¿ã€æ®‹ã‚Šã¯ç§ãŸã¡ãŒå¯¾å¿œã—ã¾ã™ã€‚

アプリ内購入ã®ãŸã‚ã«å®Ÿè£…ã™ã¹ãSDKメソッドã¯ãŸã£ãŸã®5ã¤ã§ã™ã€‚

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 テストã€ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã€è£½å“ミックスã€ä¾¡æ ¼æ§‹é€ ã‚’作æˆãŠã‚ˆã³ç®¡ç†ã™ã‚‹ã®ã‚’ç°¡å˜ã«ã—ã¾ã™ã€‚Amplitude ã‚„ Mixpanel ãªã©ã®ä»–ã®åˆ†æžãƒ„ールã«é–¢é€£ã‚¤ãƒ™ãƒ³ãƒˆã‚’ç°¡å˜ã«æ¸¡ã™ã“ã¨ãŒã§ãる素晴らã—ã„外部 API ãŒã‚りã¾ã™ã€‚
Kyle Smith
Smitten Dating ã®ãƒ‡ãƒ¼ã‚¿éƒ¨é–€è²¬ä»»è€…
Smitten
Roi Mulia, Founder & CEO of SocialKit
ç§ãŸã¡ã¯4ヶ月ã®é–“ã«300以上ã®ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’テストã—ã¾ã—ãŸã€‚Adapty ã¯åŸºæœ¬çš„ã«ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã®ã‚らゆるè¦ç´ ã‚’テストã§ãã‚‹ãŸã‚ã€ãれを活用ã—ã¾ã—ãŸã€‚製å“ã€ã‚¿ã‚¤ãƒˆãƒ«ãƒ†ã‚­ã‚¹ãƒˆã€CTAボタンã€ç”»åƒã€å‹•ç”»ãªã©ã€ã™ã¹ã¦ã‚’テストã—ã¾ã—ãŸã€‚Adapty ã® A/B テストを使ã£ã¦ã€æœˆé–“åŽç›Šã‚’2å€ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã—ãŸã€‚一ã¤ã®ãƒ„ールãŒãã‚“ãªã«å¤§ããªå½±éŸ¿ã‚’与ãˆã‚‹ã“ã¨ãŒã§ãã‚‹ã®ã‹ç–‘å•ã§ã—ãŸãŒã€è‡ªåˆ†ã®ç›®ã§ãれを見ã¾ã—ãŸã€‚
Roi Mulia
創設者兼 CEO, SocialKit
SocialKit

Adaptyã§ä½•ãŒå¾—られã¾ã™ã‹ï¼Ÿ

Adapty SDKã¯ã‚¢ãƒ—リã®åŽç›Šã‚’増やã™ãŸã‚ã®è†¨å¤§ãªå¯èƒ½æ€§ã‚’æä¾›ã—ã¾ã™ã€‚

ã‚ãªãŸã®Androidアプリã®ãƒªã‚¢ãƒ«ã‚¿ã‚¤ãƒ åˆ†æž

App Store Connectã§99.5%ã®æ­£ç¢ºã•を確信ã—ã¦ãƒ‡ãƒ¼ã‚¿ã«ä¾å­˜ã—ã¦ãã ã•ã„。
å§‹ã‚ã‚‹
App Icon Gravity
Gravity Fit
å¥åº· & フィットãƒã‚¹
ã€Œé€æ˜Žã§é«˜åº¦ãªåˆ†æžãƒ€ãƒƒã‚·ãƒ¥ãƒœãƒ¼ãƒ‰ãŒã‚ã‚‹ãŠã‹ã’ã§ã€è¿½åŠ ã®ãƒ„ールを使ã‚ãšã«è¿…é€Ÿã«æ„æ€æ±ºå®šãŒã§ãã¾ã™ã€‚多ãã®æ™‚é–“ã€ã—ãŸãŒã£ã¦ãŠé‡‘を節約ã§ãã¾ã™ã€‚ã€
エカテリーナ・Kã€
Gravity Fitã®PM
Accuracy Adapty Appstore
ABC testing

ペイウォールA/Bテスト

最もåŽç›Šæ€§ã®é«˜ã„ペイウォールを見ã¤ã‘ã€ã‚¢ãƒ—リã®åŽç›Šã‚’増やã—ã¾ã—ょã†ã€‚
A/Bテストを探索
MentalGrowth
MentalGrowth
å¥åº· & ウェルãƒã‚¹ã‚¢ãƒ—リ
「Adaptyã®è¿…速ãªåˆ†æžã¨ç°¡å˜ã«èµ·å‹•ã§ãã‚‹A/Bテスト機能ã«ã‚ˆã‚Šã€ä»®èª¬ã‚’è¿…é€Ÿã«æ¤œè¨¼ã—ã€ç´ æ™´ã‚‰ã—ã„çµæžœã‚’å¾—ã‚‹ã“ã¨ãŒã§ãã¾ã—ãŸã€‚ã€
ヴァディム・ãƒãƒ ãƒã‚§ãƒ³ã‚³ã€
MentalGrowthã®ãƒ—ロダクトマãƒãƒ¼ã‚¸ãƒ£ãƒ¼

ペイウォールã®ãƒªãƒ¢ãƒ¼ãƒˆè¨­å®š

アプリをå†ãƒªãƒªãƒ¼ã‚¹ã›ãšã«é éš”ã§ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã‚’変更ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
今ã™ã試ã™
Smitten
Smitten - デーティング
ライフスタイル
「ç§ãŸã¡ã®æˆé•·ã¨åŽç›Šãƒãƒ¼ãƒ ã¯ã€è¿…速ã«ãƒšã‚¤ã‚¦ã‚©ãƒ¼ãƒ«ã€å•†å“オファーを導入ã—ã€ã•ã¾ã–ã¾ãªå¸‚å ´ã§ä¾¡æ ¼ tiersをテストã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã€
カイル・スミスã€
Smitten Datingã®ãƒ‡ãƒ¼ã‚¿è²¬ä»»è€…
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を探ã—ã¦ã„ã¾ã™ã‹ï¼Ÿ

ÿÿÿÿ