在iOS应用程序中实施应用程序内购买(IAP)[swift]

如今,大多数应用程序都提供了通过购买🙂获得额外功能或内容的选项。 此过程众所周知为应用程序内购买(IAP),是从iOS或MacOS应用程序中赚钱的好方法。
是的,这无疑是一个事实,主要是开发人员(当然是苹果公司)的收入基于应用内购买商品😯。 不管您喜不喜欢AppleApple会对您的应用程序进行的每笔成功交易收取30%的手续费。

因此,今天我们将讨论应用内购买,并探讨将iOS应用中的应用内购买与Swift 4.0语言集成的过程。

应用内购买类型:

当用户进行任何IAP购买额外的订阅内容时,请在应用购买中进行以下一项操作:

  1. 消耗品:用户每次都需要购买这些物品,因为要使用它们,将来将无法免费使用。 重新安装后,更换设备的用户可能会丢失其易耗品。 例如,购买游戏货币,健康状况和提示等。
  2. 非消耗品:用户一次性购买这些物品,以后可以免费使用。 在重新安装,更换设备时,这些产品不会丢失。 如果用户输了,可以通过恢复应用内购买免费重新下载。 例如:将应用升级到专业版,删除广告等。
  3. 非续订订阅:用户将可以在固定的时间内使用这些项目,订阅结束后可以再次购买这些项目。 例如:一个月,三个或六个月的运动会通行证。
  4. 自动续订:用户可以在指定的时间内购买这些商品,超过该时间后会自动续订。 例如:正在进行的服务(Netflix,Hulu Plus等),杂志订阅等。

我们将尝试涵盖在iOS应用程序中实现IAP所需的所有内容,将在以下主题中进行讨论:

  1. iTunes Connect设置
  2. Swift中的代码
  3. 使用代码
  4. 测试IAP

我们将在四个部分中讨论此部分:设置银行帐户,沙盒用户创建,iTunes应用程序创建和IAP产品创建。

设置银行帐户:

如果您的iTunes Connect帐户中没有银行帐户设置,将无法使用IAP服务❗。 因此,这是使IAP服务正常工作的最重要部分。 我们可以通过转到iTunes Connect帐户的“协议,税收和银行业务”部分来实现。 它看起来应该像这样:

沙盒用户创建:

现在,我们需要创建一个沙箱用户,以创建导航到iTunes Connect帐户中的“ 用户和角色” ,然后选择“ 沙箱测试器”部分。 添加沙盒用户以测试IAP服务非常重要,通过沙盒用户,您可以免费进行交易。

📣务必记住使用没有任何Apple ID附带的电子邮件。

iTunes App创建:

要将iTunes上的应用程序创建到iTunes connect account的“我的应用程序”部分,或使用现有的应用程序。 为了在iTunes上创建应用程序,您必须从开发人员帐户创建应用程序ID。

IAP产品创建:

为了创建IAP产品,请打开iTunes应用程序并导航至“ 功能”部分。 单击“ +”按钮,然后选择我们已经讨论过的4种类型之一。 然后提供与该IAP产品相关的所有必需元数据。 注意产品编号

产品ID应该是唯一且易于理解的,我们将需要这些产品ID才能获得所需的IAP产品。

因此,在这里,我们完成了集成IAP的第一步。 让我们继续下一步,即代码。

将代码保存在我创建的PKIAPHandler的单独类中,如果您不喜欢它,可以随时更改名称。 我们将在此类中存储与In App Purchase相关的所有内容。
因此,让我们讨论一下代码。 此类包含的内容。

特性:

首先,您需要将所有可用的IAP产品ID存储在一个数组中,在此处您将在应用程序中显示所有创建的IAP产品(在IAP产品创建步骤中)以显示用户。
有一个属性“ isLogEnabled”,它将帮助您启用PKIAPHandler的控制台日志
“ shared”属性将使您与IAP服务时需要使用的所有成员函数进行交互。
为了更好地理解,我附加了代码的GIST文件。 向下滚动👇🏻以对其进行查看。

类功能:

  1. canMakePurchases():返回布尔值(真/假),无论设备是否能够购买。
  2. setProductIds(ids:[String]):使用此方法可以设置要使用的IAP产品ID。 在UIViewController的viewDidLoad方法中调用此方法,您将在其中显示可用的IAP产品。
  3. fetchAvailableProducts(complition:@escaping(([[SKProduct])-> Void)):使用此方法来获取通过setProductIds方法设置的ID的所有IAP产品详细信息。 它将返回一个SKProduct数组,此SKProduct对象将具有您在iTunes上创建IAP产品时输入的所有详细信息。 获取此数组并将其保存在数组中,以显示在列表中,并在将来用于购买。
  4. 采购(产品:SKProduct,组合:@escaping(((PKIAPHandlerAlertType,SKProduct?,SKPaymentTransaction?)->无效)):使用此方法来开始购买产品(用户已经通过fetchAvailableProducts方法获取了已准备就绪的SKProduct) 。 它将弹出“付款”对话框以供用户确认。 在完成模块中,如果成功购买,您将收到来自处理程序,购买的产品和付款交易详细信息的消息,否则产品和付款交易将为零。
  5. restorePurchase():使用此方法可以恢复购买的/非消耗性物品的购买。

代表方法:

  1. productsRequest(_请求:SKProductsRequest,didReceive响应:SKProductsResponse):返回关于setProductIds方法设置的ID在iTunes上可用的所有IAP产品。 调用fetchAvailableProducts方法后,它就会fetchAvailableProducts
  2. paymentQueueRestoreCompletedTransactionsFinished(_队列:SKPaymentQueue):处理用户成功还原IAP产品的情况。
  3. paymentQueue(_队列:SKPaymentQueue,updatedTransactions事务:[SKPaymentTransaction]):该委托方法在调用purchase(product: SKProduct)方法后立即触发。 通过这种方法,您将获得与IAP交易相关的所有详细信息,无论是购买的物品还是失败的物品。

打开UIViewController,创建一个空的SKProduct类型的SKProduct ,然后在viewDidLoad函数中设置IAP产品ID,并获取所有IAP产品详细信息,并根据需要在UITableView,UICollectionView中显示它们。

  PKIAPHandler.shared.setProductIds(ids:self.productIDs)PKIAPHandler.shared.fetchAvailableProducts {[弱自我](products)保护sSelf = self否则{return} sSelf.productsArray = products sSelf.tableView.reloadData()//重新加载您表或集合视图} 

可以创建一个动作,也可以使用tableView / collectionView的didSelect委托方法通过调用Purchase purchase()方法来启动IAP购买。

  func tableView(_ tableView:UITableView,didSelectRowAt indexPath:IndexPath){PKIAPHandler.shared.purchase(product:self.productsArray [indexPath.row]){{alert,product,transaction)如果让tran = transaction,让prod = product {//根据需要使用交易详细信息和购买的产品} Globals.shared.showWarnigMessage(alert.message)}} 

这是代码文件,向下滚动👇🏻以查看它。

首先,使用创建的Sandbox用户帐户登录到iOS设备,然后在真实设备上运行您的应用程序并启动交易。 不必担心“警报”窗口中显示的价格走得更远。 🤩您是该应用程序的沙箱用户,因此不会收取任何费用。

📜注意:在App App中购买无法在iOS模拟器上进行测试。 因此,请使用真实设备。

👩!!! 快乐编码! 👨💻

感谢您的阅读,如果喜欢此收藏😊,请点击“推荐”图标。 有什么问题吗 将它们留在评论中。