版本记录
版本号 | 时间 |
---|---|
V1.0 | 2018.07.26 |
前言
大家都知道,ios虚拟商品如宝石、金币等都需要走内购,和苹果三七分成,如果这类商品不走内购那么上不去架或者上架以后被发现而被下架。最近有一个项目需要增加内购支付功能,所以最近又重新集成并整理了下,希望对大家有所帮助。感兴趣的可以参考上面几篇。
1. iOS内购IAP(一) —— 基础配置篇(一)
2. iOS内购IAP(二) —— 工程实践(一)
3. iOS内购IAP(三) —— 编程指南之关于内购(一)
4. iOS内购IAP(四) —— 编程指南之设计您的应用程序的产品(一)
5. iOS内购IAP(五) —— 编程指南之检索产品信息(一)
6. iOS内购IAP(六) —— 编程指南之请求支付(一)
Promoting In-App Purchases - 促进应用内购买
从iOS 11开始,您可以在App Store上推广应用内购买。 推荐的应用内购买会显示在您的产品页面上,可以显示在搜索结果中,也可以在App Store的相应标签上展示。 用户可以在App Store上开始应用内购买,并将其带入您的应用以继续交易。 如果您的应用尚未安装,系统会提示他们下载它。
Promoting Your In-App Purchases - 促进您的应用内购买
促进应用内购买需要两个步骤:
- 通过上传您要宣传的应用内购买的促销图片,在
App Store Connect
中设置应用内购买。 然后使用App Store Connect
中的App Store Promotion
工具管理他们在App Store上的订单和可见性。 - 在处理购买的
SKPaymentTransactionObserver
协议中实现代理方法。
要进一步自定义每个用户的视图,您可以选择使用SKProductStorePromotionController中的方法覆盖应用内购买的可见性及其显示顺序。
有关此功能的营销指南,请参阅 Promoting Your In-App Purchases。
Completing a Purchase - 完成购买
当用户点击或点击App Store上的应用内购买时,StoreKit会自动打开您的应用,并通过SKPaymentTransactionObserver
协议中的委托方法将交易信息发送到您的应用。 您的应用必须完成购买交易以及特定于您的应用的所有相关操作。
在委托方法中,返回true
以继续事务,或返回false
以延迟或取消事务。
如果用户点击或单击“购买”时未安装您的应用程序,则App Store会自动下载该应用程序或提示用户购买该应用程序。 如果您安装的应用版本是不支持应用内购买促销的旧版本,则App Store会提示用户升级该应用。
1. Continuing a Transaction - 继续交易
要继续应用内购买交易,请在SKPaymentTransactionObserver
协议中实施委托方法并返回true
。 StoreKit然后显示付款表,用户可以完成交易。
//Continuing a Transaction from the App Store
//MARK: - SKPaymentTransactionObserver
func paymentQueue(_ queue: SKPaymentQueue, shouldAddStorePayment payment: SKPayment,
forProduct product: SKProduct) -> Bool {
// Check to see if you can complete the transaction.
// Return true if you can.
return true
}
2. Deferring or Canceling a Transaction - 推迟或取消交易
如果您的应用需要推迟或取消交易,则返回false。 例如,如果用户处于onboarding,您可能需要推迟交易,并在完成onboarding后继续交易。 或者,如果用户已经解锁了他们试图购买的产品,您可能需要取消交易。
-
推迟交易:
- 1)保存付款以在应用准备就绪时使用。 付款已包含有关产品的信息。 不要使用相同的产品创建新的
SKPayment
。 - 2)返回
false
。 - 3)用户完成onboarding或其他需要延期的操作后,将保存的付款发送到付款队列,方法与正常的应用内购买方式相同。
- 1)保存付款以在应用准备就绪时使用。 付款已包含有关产品的信息。 不要使用相同的产品创建新的
-
要取消交易:
- 1)返回false。
- 2)(可选)向用户提供反馈。 否则,在用户点击或点击App Store中的“购买”后应用程序缺少操作可能看起来像一个bug。
//Handling a Transaction from the App Store
//MARK: - SKPaymentTransactionObserver
func paymentQueue(_ queue: SKPaymentQueue, shouldAddStorePayment payment: SKPayment,
forProduct product: SKProduct) -> Bool {
// ... Add code here to check if your app must defer the transaction.
let shouldDeferPayment = ...
// If you must defer until onboarding is completed, then save the payment and return false.
if shouldDeferPayment {
self.savedPayment = payment
return false
}
// ... Add code here to check if your app must cancel the transaction.
let shouldCancelPayment = ...
// If you must cancel the transaction, then return false:
if shouldCancelPayment {
return false
}
}
// (If you canceled the transaction, provide feedback to the user.)
// Continuing a previously deferred payment
SKPaymentQueue.default().add(savedPayment)
}
Advanced Features for Promoted Products - 推荐产品的高级功能
要为您的用户自定义促销应用内购买列表,您可以使用SKProductStorePromotionController设置应用内购买的可见性及其显示顺序。 应用内购买的默认顺序和可见性在App Store Connect中设置。 您的覆盖是按设备进行的,并且不会同步到iCloud帐户。 请注意,此功能依赖于本地设备存储,并且API只能在应用程序在设备上启动至少一次后才能运行。
实现这些高级功能是可选的。 您的应用内购买不需要它们出现在App Store上。
1. Reading Visibility Settings - 阅读可见性设置
要读取产品的可见性设置,请调用fetchStorePromotionVisibility(for:completionHandler:方法,为其提供产品信息。
// Reading Visibility Override of a Promoted In-App Purchase
// Fetch Product Info for "Hidden Beaches pack"
let storePromotionController = SKProductStorePromotionController.default()
storePromotionController.fetchStorePromotionVisibility(forProduct: hiddenBeaches,
completionHandler: { visibility: SKProductSTorePromotionVisiblity, error: Error?) in
// visibility == .default;
2. Overriding Visibility Settings - 覆盖可见性设置
您可以决定是否按设备进行可见或隐藏的应用内购买。 例如,您可能希望隐藏客户已经进行的应用内购买,并仅显示他们仍可以购买的产品。
例如,要在用户购买产品后隐藏产品Pro Subscription
,请获取产品信息并使用.hide
设置更新默认商店促销控制器,如下所示。 Pro Subscription
应用内购买将不再出现在给定设备上。
// Updating Visibility Override of a Promoted In-App Purchase
// Fetch Product Info for "Pro Subscription"
let storePromotionController = SKProductStorePromotionController.default()
storePromotionController.update(storePromotionVisibility: .hide, forProduct: proSubscription,
completionHandler: { (error: Error?) in
// Complete
})
在此示例中,可见性设置为.default
,因为尚未设置覆盖。 根据您在App Store Connect
中设置的默认值隐藏或显示产品。
3. Overriding Promotion Order - 覆盖促销订单
您可以在App Store产品页面上为每台设备设置促销的应用内购买的顺序。 例如,当用户达到指定级别之前的级别时,您可以提升解锁游戏中特定级别的应用内购买产品。
要覆盖应用内购买的默认产品顺序,请按照您希望它们出现的顺序将要重新排序的产品子集的产品信息放入数组中。将数组传递给updateStorePromotionOrder:completionHandler:方法。 数组中的产品显示在列表的开头,然后是剩余的应用内购买产品,这些产品按照您在App Store Connect
中设置的相对相对顺序列出。
// Updating Order Override of Promoted In-App Purchases
// Fetch Product Info for three products: Pro Subscription, Fishing Hot Spots, and Hidden Beaches
let storePromotionController = SKProductStorePromotionController.default()
let newProductsOrder = [hiddenBeaches, proSubscription, fishingHotSpots]
storePromotionController.updateStorePromotionOrder(newProductsOrder,
completionHandler: { (error: Error?) in
// Complete
})
4. Canceling Order Overrides - 取消顺序覆盖
要取消顺序覆盖,请将空产品数组发送到updateStorePromotionOrder:completionHandler:
方法。 应用内购买产品以默认顺序显示。
Reading Order Overrides - 读取顺序覆盖
要读取将在给定设备上显示的产品顺序覆盖,请调用fetchStorePromotionOrder(completionHandler :)
方法。 您应该收到一系列产品,其顺序被覆盖。 如果您获得一个空数组,则表示尚未设置任何覆盖,并且产品处于默认顺序。
// Reading Order Override of Promoted In-App Purchases
let storePromotionController = SKProductStorePromotionController.default()
storePromotionController.fetchStorePromotionOrder(completionHander: {
(products: [SKProduct], error: Error?) in
// products == [hiddenBeaches, proSubscription, fishingHotSpots
})
Testing Promoted In-App Purchases - 测试促销的应用内购买
要在App Store中提供应用程序之前测试您促销的应用内购买,Apple会提供一个系统URL,使用itms-services://
协议触发您的应用。
Table 4-1 System URL for Testing Promoted In-App Purchases
生成的URL如下所示:
itms-services://?action=purchaseIntent&bundleId=com.example.app&productIdentifier=product_name
通过电子邮件或iMessage将此URL发送给您自己,并从您的设备中打开它。 当您的应用自动打开时,您将知道测试正在运行。 然后,您可以测试促销的应用内购买。
后记
本篇主要讲述了促进应用内购买,感兴趣的给个赞或者关注~~~~