iOS内购IAP(七) —— 编程指南之促进应用内购买(一)

版本记录

版本号 时间
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)返回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发送给您自己,并从您的设备中打开它。 当您的应用自动打开时,您将知道测试正在运行。 然后,您可以测试促销的应用内购买。

后记

本篇主要讲述了促进应用内购买,感兴趣的给个赞或者关注~~~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,265评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,274评论 1 288
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,087评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,479评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,782评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,218评论 1 207
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,594评论 2 309
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,316评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,955评论 1 237
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,274评论 2 240
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,803评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,177评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,732评论 3 229
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,953评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,687评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,263评论 2 267
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,189评论 2 258

推荐阅读更多精彩内容