uniapp 苹果内购如何实现
在uniapp中如何实现苹果应用内购买功能?需要配置哪些步骤?是否有现成的插件或示例代码可以参考?过程中需要注意哪些审核和合规性问题?
2 回复
使用uniapp实现苹果内购,需先配置苹果开发者账号,添加内购项目。然后通过uni原生插件或第三方插件(如iap)调用苹果内购API。前端调用购买接口,处理支付结果回调,后端验证支付凭证。注意遵守苹果审核规则。
在 UniApp 中实现苹果内购(IAP)需要结合原生插件或第三方服务,因为 UniApp 本身不直接支持 IAP。以下是实现步骤和示例代码:
实现方案
- 使用原生插件:通过 UniApp 的 Native.js 或自定义原生插件调用 iOS 的 StoreKit 框架。
- 第三方服务:如使用 App Store Connect API 或集成第三方 SDK(如 RevenueCat)。
步骤说明
-
配置 App Store Connect:
- 在苹果开发者中心创建 App ID,并启用内购功能。
- 在 App Store Connect 中添加内购商品(如消耗型、非消耗型等),获取商品 ID。
-
UniApp 端实现(以 Native.js 为例):
- 使用
plus.ios调用 iOS 原生 API。 - 示例代码:
// 初始化内购 function initIAP() { var store = plus.ios.importClass('SKPaymentQueue'); var defaultQueue = store.defaultQueue(); plus.ios.invoke(defaultQueue, "addTransactionObserver:", observer); } // 请求商品信息 function requestProducts(productId) { var set = plus.ios.newObject('NSSet', [productId]); var request = plus.ios.importClass('SKProductsRequest').alloc().initWithProductIdentifiers(set); request.delegate = plus.ios.implement('SKProductsRequestDelegate', { productsRequestDidReceiveResponse: function(request, response) { var products = response.products(); if (products.count > 0) { var product = products.objectAtIndex(0); // 发起购买 var payment = plus.ios.importClass('SKPayment').paymentWithProduct(product); var queue = plus.ios.importClass('SKPaymentQueue').defaultQueue(); queue.addPayment(payment); } } }); request.start(); } // 监听交易结果 var observer = plus.ios.implement('SKPaymentTransactionObserver', { updatedTransactions: function(queue, transactions) { for (var i = 0; i < transactions.count; i++) { var transaction = transactions.objectAtIndex(i); switch (transaction.transactionState()) { case 1: // 购买中 break; case 2: // 购买失败 finishTransaction(transaction); break; case 3: // 购买成功 // 验证凭证并处理业务 verifyReceipt(transaction.transactionReceipt()); finishTransaction(transaction); break; case 4: // 恢复购买 finishTransaction(transaction); break; } } } }); function finishTransaction(transaction) { var queue = plus.ios.importClass('SKPaymentQueue').defaultQueue(); queue.finishTransaction(transaction); } // 验证凭证(需服务器端配合) function verifyReceipt(receipt) { // 将 receipt 发送到服务器验证 }
- 使用
-
服务器端验证:
- 将交易凭证发送到你的服务器,通过苹果 API 验证真实性,防止伪造。
注意事项
- 沙盒测试:在开发阶段使用苹果沙盒环境测试,避免使用真实账户。
- 商品审核:内购商品需通过苹果审核后才能上线。
- 合规性:遵循苹果内购政策,虚拟商品必须使用 IAP。
推荐方案
如果原生开发复杂,可考虑使用第三方库(如 uni-iap 插件)或云服务(如 RevenueCat)简化流程。
以上代码仅为示例,实际应用需处理错误和边界情况。建议参考苹果官方文档和 UniApp 插件市场。

