React Native IAP2025年3月17日 | 阅读 10 分钟 react-native 模块将帮助我们访问 Amazon 平台(beta)Android 和 iOS 手机的应用内购买功能。 React-native-app 提供了我们需要的基本功能,但它不是一个根本的解决方案。在应用程序中实现应用内购买还有很多工作要做。 按照安装说明进行操作,然后转到“入门”部分,立即开始使用。 包限制请记住,react-native 应用程序将为我们提供所需的基本功能,但它不是一个好的解决方案;在您的应用程序中实现应用内购买仍将需要一些工作。 此外,我们应该在客户端实现另一个硬币。最好是实现收据的服务器端验证。 安装使用 react-native >0.60 在您的 React Native 项目中安装包。 该包将使用自动链接自动链接。然后,根据您正在使用的平台,按照以下说明进行操作。 安装后iOS 平台 安装 cocoa pods:cd ios & pod install 此外,如果您尚未为 Swift 兼容性创建一个 Swift 桥接头,请添加一个。 ![]() 支持 Android 的 Android 平台修改您的 android/build.gradle 配置 注意:通过使用 Jetifier 工具实现向后兼容性。支持 AndroidX 的 Android 平台在以下代码的帮助下修改 android/build.gradle 配置 您有两种选择,具体取决于您支持的商店 如果您只需要 Google Play IAP,请将其放在 Android/App/Build.Gradle 的默认配置部分中 如果您将其用于 Google Play 和 Amazon,请将以下行放在 android/app/build.gradle 中的 android 块中。 最后,我们需要从 [email protected]+ 启用 kotlin。请更改 android/build.gradle 中的以下行。 使用 react-native <=0.60 按照上述步骤操作,然后使用以下命令链接包 从以前版本升级更新到 6.1.0 在 Android 上,请按照手动安装说明的三个步骤进行操作。 更新到 3.4.0 升级到新的结账流程。在 Android 中无需调用 endConnection,因为它会自动完成。 生命周期初始化要初始化本机模块,您可以在应用程序生命周期的开始时调用 initConnection()。这必须在顶层组件上完成,因为库会缓存本机连接。 不建议在需要之前进行初始化,因为它会影响性能。在不终止先前连接的情况下多次调用此方法将导致错误。不调用此方法将导致其他调用被拒绝,因为必须提前建立连接。 结束连接当您不再需要与库交互以释放资源时,请调用 endConnection()。 注意事项您不应该每次想要与库交互时都调用 initConnection 和 endConnection。 这被认为是一种反模式,因为它会消耗更多的时间和资源,并可能导致不必要的副作用,例如多次回调。 应该做不应该做长寿命连接 (Android)尽管建议使用 hooks 并将连接生命周期绑定到组件,但您可能希望将连接与 UI 层分开处理(例如,Redux Sagas)。 您需要特别注意连接生命周期,连接可能会中断,重新连接的唯一方法是调用 RNIap.endConnection() 方法,然后 RNIap.initConnection() 再次创建 BillingClient 的新内部实例并重新连接到 Play Store 服务。 您可以通过调用 RNIap.isReadyAndroid() 方法检查出色的连接。如果为 false,则需要调用 initConnection。 检索可用商品首先,您应该单独定义 iOS 和 Android 的产品 ID,如下所示。 要获取有效对象的列表,请调用 getProducts()。 您可以在 componentDidMount() 或任何其他适合您的应用程序的区域中执行此操作。 由于用户可以在互联网连接不良的情况下启动您的应用程序,然后拥有互联网连接,因此最好多次准备商品。 例如:如果任何用户在应用程序启动时没有可用的 IAP,您应该在用户登录到您的 IAP 商店时进行检查。 从 getProducts() 返回的每个产品都包含一个 Product 对象。 进行购买购买流程重新设计重新设计了所得流程,使其不依赖于 promises 或回调。 以下是重新设计方法的重要原因
一旦 getProducts() 收到有效响应,您就可以调用 requestPurchase()。像可消耗产品一样,可订阅产品将被购买,用户可以使用 iOS 系统设置取消订阅。 在请求任何购买之前,您必须从 React-native-app 设置 BuyUpdatedListener。建议您在应用程序启动后立即开始监听更新。 您必须接收在应用程序关闭期间完成的成功购买,或者由于错误或网络故障而未完成、消耗或批准的购买。 定义下面的方法并在用户按下按钮时调用它。 新的购买流程您可能希望管理“商店程序”[[2] [Apple Store 设置程序]],这会在用户检查固定帐户问题时发生。 例如,当信用卡信息过期时。 我们决定删除 requestPurchase,相反,它不依赖于 Promise PurchaseUpdateListener 函数。
恢复购买您可以使用 getAvailablePurchases() 来执行通常所说的“恢复”购买。 如果您想使用所有对象进行调试,则必须复制 getAvailablePurchases() 返回的购买。 假设您在没有在数据库中注册购买的情况下消耗了产品。您可以支付任何东西而无需交付,并且在验证和重置购买时永远无法检索收据。 getAvailablePurchases() 中的每个项目都包含一个 AvailablePurchase 对象。 验证收据自 [email protected] 起,我们支持收据验证。 使用 IAPHUBIAPHUB 是一项为您处理 iOS/Android 收据验证的服务。您可以配置 webhook 以自动在您的服务器上接收有关购买、订阅续订等活动的通知... 您可以手动调用 API 来处理您的收据,或者使用模块 react-native-iaphub,它只是 react-native-iap 的一个外壳,内置了 IAPHUB 使用 GooglePlay对于 Android,您需要一个单独的服务帐户 JSON 文件才能从 google-API 获取 access_token,因此它不能是无服务器的。 它将需要后端并使用 access_token 获取 access_token,然后我们可以调用 validateReceiptAndroid()。 使用 App Store本地检查 目前不支持本地加密认证。更多详细信息请参见此处:https://developer.apple.com/documentation/appstorereceipts/validating_receipts_on_the_device。 使用 App Store 检查。注意:不建议将此方法用于生产环境,Apple 在其文档中明确警告过它适用于整个开发周期中的开发和收据验证测试。 App Store 收据的验证可以使用 validateReceiptIos() 在本地完成 您必须在第一个参数中发送交易收据。如果它是一个测试环境,则必须传递第二个参数。如果有效,它将请求沙盒,false 将请求生产环境。 我们需要在购买后获取收据。例如,当任何用户请求权限购买不稳定的互联网连接时。 对于这些情况,我们应该使用 getReceiptIOS(),它会在给定时间从应用程序获取最新的收据——以正确的方式进行 iOS 支付。
如果我们需要清除数组中的所有产品和订阅,请调用 clearProductsIOS() 并再次执行恢复作业,我们将得到我们期望的结果。 后端示例 (Node.js)在这里,您可以找到一个示例后端,用于在 iOS/Android 上幂等验证收据,以及存储和向客户交付订阅状态。 我们如何使用 hooks 您必须使用 IAPContext HOC 包装您的应用程序 然后,在组件的某个地方 引用自 [email protected]+ 起,我们支持 IAP hook,它能更好地处理购买。 下一主题React-Native 本地化 |
我们请求您订阅我们的新闻通讯以获取最新更新。