一个开源 SDK,用于 集成 应用内 购买于 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应用中,拥有我们的现成基础设施它处理所有订阅事件并提供增长收入的功能。
// Your app's code
Adapty.activate(this, "YOUR_APP_KEY")
 
// Make a purchase, Adapty handles the rest
Adapty.makePurchase(activity, product) { result ->
	when (result) {
		is AdaptyResult.Success -> {
			// successful purchase
		}
		is AdaptyResult.Error -> {
			// handle the error
		}
	}
}
从集成到维护 – Adapty旨在使使用IAP变得更简单。
请求演示

为什么选择Adapty SDK?

随时准确的订阅状态

请放心,您将始终在所有平台上获得正确的订阅者状态。

服务器端收据验证

无需担心购买验证的正确性和安全性。

处理各种订阅状态

免费试用、升级、促销优惠、家庭共享、续订等。

企业级平台,发布周期短

>99.99%服务水平协议可靠性和定期产品更新。
配置平台
安装Adapty SDK
Adapty.activate(
   "PUBLIC_SDK_KEY",
   customerUserId: "YOUR_USER_ID"
)
处理购买事件

快速而简便的集成

只需花费几个小时将 Adapty SDK集成到您的iOS应用中,其余的我们来处理。

仅需5个SDK方法即可实现Android内购

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
    }
}
&nbsp
// 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 以 增长 他们的 收入

使用Adapty您能得到什么?

Adapty SDK提供了巨大的可能性来 增长 应用 收入

实时分析您的Android应用

凭借99.5%的准确性依赖数据与App Store Connect。
开始吧
App Icon Gravity
Gravity Fit
健康与健身
“透明和高级的分析仪表板帮助我们更快地做出决策,而无需使用额外的工具。这为我们节省了大量时间,从而节省了金钱。”
Ekaterina K,
Gravity Fit产品经理
Accuracy Adapty Appstore
ABC testing

付费墙A/B测试

找到最有利可图的付费墙,增加应用收入。
探索A/B测试
MentalGrowth
MentalGrowth
健康与保健应用
“Adapty的快速分析和易于启动的A/B测试功能使我们能够快速验证假设并取得卓越的结果。”
Vadim Nemchenko,
MentalGrowth产品经理

付费墙的远程配置

远程更改您的付费墙,而无需重新发布应用。
现在试试
Smitten
Smitten - 约会
生活方式
“我们的增长和收入团队能够快速实现和管理付费墙、产品报价,并在许多不同市场测试定价阶梯。”
Kyle Smith,
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