uniapp 苹果内购如何实现

在uniapp中如何实现苹果应用内购买功能?需要配置哪些步骤?是否有现成的插件或示例代码可以参考?过程中需要注意哪些审核和合规性问题?

2 回复

使用uniapp实现苹果内购,需先配置苹果开发者账号,添加内购项目。然后通过uni原生插件或第三方插件(如iap)调用苹果内购API。前端调用购买接口,处理支付结果回调,后端验证支付凭证。注意遵守苹果审核规则。


在 UniApp 中实现苹果内购(IAP)需要结合原生插件或第三方服务,因为 UniApp 本身不直接支持 IAP。以下是实现步骤和示例代码:

实现方案

  1. 使用原生插件:通过 UniApp 的 Native.js 或自定义原生插件调用 iOS 的 StoreKit 框架。
  2. 第三方服务:如使用 App Store Connect API 或集成第三方 SDK(如 RevenueCat)。

步骤说明

  1. 配置 App Store Connect

    • 在苹果开发者中心创建 App ID,并启用内购功能。
    • 在 App Store Connect 中添加内购商品(如消耗型、非消耗型等),获取商品 ID。
  2. 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 发送到服务器验证
      }
      
  3. 服务器端验证

    • 将交易凭证发送到你的服务器,通过苹果 API 验证真实性,防止伪造。

注意事项

  • 沙盒测试:在开发阶段使用苹果沙盒环境测试,避免使用真实账户。
  • 商品审核:内购商品需通过苹果审核后才能上线。
  • 合规性:遵循苹果内购政策,虚拟商品必须使用 IAP。

推荐方案

如果原生开发复杂,可考虑使用第三方库(如 uni-iap 插件)或云服务(如 RevenueCat)简化流程。

以上代码仅为示例,实际应用需处理错误和边界情况。建议参考苹果官方文档和 UniApp 插件市场。

回到顶部