Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. iOS SDK
Code

使用Swift 3在iOS中进行应用内购买

by
Difficulty:BeginnerLength:LongLanguages:

Chinese (Simplified) (中文(简体)) translation by Fuhuan (you can also view the original English article)

Final product image
What You'll Be Creating

介绍

内购是所有希望获得更多收入并通过其应用程序提供额外内容和功能的一项服务。 例如,对于游戏,您可以购买宝石或硬币,对于摄影应用程序,您可以解锁新的效果或工具。 而且你可以使用信用卡或其他付款方式完成所有操作,而无需退出应用程序。

在本教程中,我将介绍在iTunes Connect上创建消费型和非消费型IAP产品的所有必要步骤,并向你展示需要购买这两个项目的代码。 我已经制作了一个带有标签和两个按钮的示例Xcode的项目,因此请下载并按照本教程了解它的工作原理。

在iTunes Connect中创建一个Sandbox测试器

我假设您已经在iTunes Connect 的“ 我的应用程序”部分创建了一个iOS应用程序。 你应该做的第一件事就是创建一个Sandbox Tester来测试真实设备上的IAP(不需要模拟器 - 它不支持应用内购买)。

输入用户和角色,转到沙盒测试器选项卡,然后单击测试人员旁边的(+)号。

Users and roles in iTunes Connect

填写表格以添加新的沙箱测试器。 保存完信息后,请返回到我的应用程序部分,然后单击应用程序图标以输入其详细信息并创建IAP产品。

在iTunes Connect中创建IAP产品

耗材产品

点击功能标签,然后点击应用内购买旁边的(+)标志。 你可以一次创建一个产品,因此我们先从一个消耗品开始尝试。

Select Consumable In-App Purchase

一个耗材IAP,顾名思义,就是可以买多个产物。 我们将使用它在演示应用程序中收集额外的“硬币”。 

点击创建以初始化您的IAP项目。 在下一个屏幕上,可以设置关于产品的所有信息:

  • 参考名称:此名称将在iTunes Connect和销售和趋势报告中使用。 它不会显示在App Store上,您可以键入任何您想要的名称,但不能超过64个字符。
  • 产品ID:由应用程序读取的唯一字母数字标识符,用于识别您的产品。 通常开发人员对产品ID使用Web反向语法。 在这个例子中,我们选择了com.iaptutorial.coins。 稍后我们会将此ID作为字符串粘贴到我们的代码中。
  • 价格:从下拉菜单中选择价格层级。 请记住,为了在App Store上销售您的应用内购买产品,您必须在协议,税务和银行业务部分申请付费应用协议。
  • 本地化:为了本教程的目的,我们只选择了英文,但您可以通过点击(+)按钮添加更多语言。 然后输入显示名称和说明。 它们都将在App Store上可见。
  • 屏幕截图:上传截图以供审查。 它不会显示在App Store中,并且它必须具有适用于您的应用平台的有效大小,因此如果您的应用是Universal,您可以上传iPad截图。
  • 复审备注:任何有关您的IAP的其他信息,这可能对审阅者有帮助。
Create a new IAP product

完成后,点击保存,你会看到这个提示:

您的第一次应用程序内购买必须提交一个新的应用程序版本。 从应用程序的“应用程序内购买”部分选择它,然后单击“提交”。

非消费品

现在点击左侧列表中Game Center按钮正上方的应用内购买按钮,然后添加新的IAP产品。 这一次,请选择非消耗选项:

Create a Non-Consumable product

点击创建并重复上述步骤。 由于这将是非消费品,用户只能购买一次,苹果需要恢复这种购买的能力。 如果您卸载应用并重新安装应用,或者从具有相同Apple ID的其他设备下载应用,并且需要重新购买应用而不付费两次,则会发生这种情况。 所以稍后我们会在代码中添加一个恢复购买功能。

我们现在创建的产品ID是com.iaptutorial.premium,价格等级为2.99美元。 我们称之为高级解锁版本。

完成填写所有字段后,请保存您的产品并返回到“应用程序内购买”页面。 现在您应该有两个产品的列表,其名称,类型,ID和状态均设置为可以提交。

In-app Purchases list

点击App Store和Prepare for Submission按钮,回到你的应用页面。 向下滚动到应用程序内购买部分,位于通用应用程序信息下方,然后单击(+)按钮添加您的IAP产品。

Add In-App Purchases to your apps info page

选择全部并单击完成。

Select your IAP products

最后,点击屏幕右上角的保存,即可在iTunes Connect上配置应用内购买产品。

在iOS设备上登录到Sandbox Tester

在学习代码之前,还有一件事要做。 在iOS设备上转到设置 > iTunes和App Store。 如果您已使用原始Apple ID登录,请点击它并选择注销。 然后只需使用您创建的沙箱测试人员的凭据登录即可。 登录后,您可能会收到如下警告:

Alert from the device

只要忽略它的信息,然后点击取消。 您的设备会在尝试购买时再次询问您的沙箱登录凭据,并会识别您的测试帐户,因此您的信用卡将不会收取任何费用。

退出设置,通过USB线将设备插入Mac,最后开始编码!

代码

如果你已经下载了我们的演示项目,你会发现应用内购买的所有必要的代码都已经写好了,所以如果你运行它,你会得到这样的东西:

Demo IAP app

如果你想测试应用程序,你应该将Bundle Identifier更改为你自己的ID。 否则,Xcode将不允许您在真实设备上运行应用程序,并且该应用程序不会识别您创建的两个IAP产品。

Chage Bundle ID in the General tab in XCode

输入ViewController.swift并检查代码。 首先,我们为StoreKit和我们需要的代理添加了一个导入声明,以便跟踪付款交易和产品请求。

然后我们宣布了一些有用的观点。

coinsLabel和premiumLabel将用于显示两种产品的购买结果。 consumableLabel和nonConsumableLabel会显示每个IAP产品,我们以前在iTunes Connect创建者的描述和价格。

现在是时候添加一些变量:

前两行是回顾我们的产品ID。 这些字符串与iTunes Connect的应用内购买部分中注册的字符串完全一致非常重要。

  • productID是我们稍后将用来检测我们将选择购买哪种产品的字符串。
  • productsRequest是SKProductsRequest的一个实例,需要从iTC上的应用程序搜索IAP产品。
  • iapProducts是一个简单的SKProducts数组。 请注意,SK前缀表示StoreKit,即我们将用于处理购买的iOS框架。

最后两行加载了布尔型和Integer型两个变量,分别用于跟踪购买硬币和高级版本,分别为易耗品和非易耗品。

viewDidLoad中()中的以下代码在应用程序启动后立即执行一些操作:

首先,我们将每次购买记录到Xcode控制台。 然后我们显示我们用coinLabel购买的硬币总量。 由于我们第一次运行演示应用程序,它将显示COINS:0。

该如果语句设置premiumLabel根据非消耗性产品是否购买的文本。 首先,它会显示付费版本锁定!因为我们还没有进行高级购买。

代码的最后一行调用我们稍后会看到的方法,它只是提取我​​们以前存储在iTC中的产品。

现在让我们看看我们在演示应用中设置的两个购买按钮的功能:

两种方法都会调用一个函数来检查设备是否可以进行购买,如果可以,应用程序将调用StoreKit委托方法来处理购买。

如前所述,我们需要第三个按钮来恢复我们的非消耗品购买。 这是它的代码:

该IBAction为功能连接到恢复购买的按钮,故事板,并开始连接到苹果的应用内购买系统如果已经已经取得恢复购买。

paymentQueueRestoreCompletedTransactionsFinished()是StoreKit框架的委托方法,可在购买成功恢复后将nonConsumablePurchaseMade变量保存为true。

我们完成了按钮,让我们看看fetchAvailableProducts()函数的作用:

我们首先创建一个的NSSet实例,它基本上是一个字符串数组。 我们将存储之前在此处声明的两个产品ID。

然后,我们根据这些标识符开始SKProductsRequest,以便应用程序显示有关IAP产品(描述和价格)的信息,该信息将由此委托方法处理:

在上面的功能中,我们首先必须检查是否有任何产品在iTunes Connect中注册并相应地设置我们的iapProducts阵列。 然后我们可以初始化两个SKProducts并在标签上打印它们的描述和价格。

在进入应用内购买代码的核心之前,我们需要更多的功能:

第一个检查我们的设备是否能够购买。 第二个功能是我们从两个按钮调用的功能。 它启动支付队列并将我们的productID变量转换为选定的productIdentifier。

现在我们终于到达了最后一个处理付款结果的委托方法:

该函数具有一个switch语句,用于检查付款的每个状态。 如果购买已成功完成并完成交易,则会调用第一个案例。

在这个块内部,我们必须检查我们选择的产品ID并执行必要的操作来更新我们的应用程序 - 所以如果我们用户购买了10个额外的硬币,我们会将10添加到我们的硬币变量中,使用UserDefaults保存它的值,显示我们获得的新硬币数量,并发出警报。

请注意,您可以多次购买此产品,因为它是可消耗的IAP,因此无需恢复购买功能。

同样,如果我们购买了非消费品高级产品,应用程序会将我们的nonConsumablePurchaseMade变量设置为true,保存它,更改premiumLabel的文本并触发警报,通知您购买已成功。

其他两种情况处理付款失败和恢复的结果。 如果您的交易由于某种原因失败或者您恢复了非消费品购买,该应用将自行触发自定义提醒。

而已! 现在只需确保您使用Sandbox Tester凭据登录并运行应用程序进行测试即可。 第一次,你会得到这样的警报:

App Store Sign In alert

选择使用现有的Apple ID并再次输入您的Sandbox Tester的用户名和密码登录。 发生这种情况是因为该应用只能从iTunes和App Store设置中识别出真正的用户,而不是沙箱。

登录后,您将可以购买这两种产品。

10 Coins purchase made

Non-Consumable Premium purchase made

CodeCanyon模板

如果您使用iOS并希望深入了解Swift语言和应用程序开发,请查看CodeCanyon上的一些iOS应用程序模板。

Envato市场上还有数百个其他iOS应用程序模板,可以重新制作并确保加快您的工作流程。 去查找他们! 您可能会在下一个应用程序上节省数小时的工作时间。

结论

在本教程中,我们介绍了在iTunes Connect上创建应用内购买产品所需的所有步骤,以及如何编写代码以在您的应用中启用它们。 我希望你能够把这些知识用于你的下一个iOS应用程序!

感谢您的阅读,我会在下次见! 请使用swift查看我们的其他关于iOS版的应用程序开发的课程和教程。

关注我们的公众号
Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.