购买者 1.0.0

购买者 1.0.0

Luis Cardenas 维护。



购买者 1.0.0

  • 作者:
  • thxou

概述

Purchaser 是一组用 Swift 编写的类,旨在帮助 iOS 开发者简化在应用程序中实现内购的过程。

待办事项

  • 支持所有类型的商品(目前只支持自动续订订阅)。
  • 添加收据验证。
  • 添加收据刷新。

要求

  • iOS 9.0+
  • Xcode 10.0+
  • Swift 4.2+

设置

在源文件中导入 Purchaser

import Purchaser

现在您可以选择在开始时设置产品标识符,这样库执行的操作将使用这些标识符进行;或者按需手动设置标识符。无论如何,强烈建议您在 AppDelegate.swift 子类中设置 Purchaser。只需调用

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Setup with product identifiers
    Purchaser.setup(with: ["my_awesome_product_identifier"])
    // Setup identifiers later
    Purchaser.setup()
    return true
}

此步骤是强制性的,确保所有交易都能够按照预期处理,即使它们最初由于缺乏互联网连接或应用程序终止而失败。

⚠️注意事项

闭包

为了避免引发强引用循环怪物,确保在需要时使用提供示例代码中的self标记为weakunownedPurchaser将完成闭包存储在属性中,保留闭包内的对象。

请求产品

要从App Store请求产品列表,请使用以下方法

Purchaser.requestProducts { [unowned self] (products, _, error) in
    if let error = error {
        print("error requesting products: \(error)")
    } else {
        self.products = products
        self.reload()
    }
}

它返回一个包含SKProduct对象、无效产品标识符数组和识别错误的Error对象(如果有错误)的数组。

如果要稍后设置产品标识符,应在调用时传递产品标识符的数组

let identifiers = ["my_awesome_product_identifier"]
Purchaser.requestProducts(with: identifiers) { (products, _, error) in
    // Handle response
}

如果没有提供,则调用的返回“缺少产品标识符”错误。

购买产品

一旦你从Apple获取了有效产品的列表,你可以为每个产品调用buy(product:)函数

Purchaser.buy(product) { (state, _, _, error) in
    if let error = error {
        print("error buying product: \(error)")
    } else {
        if state == .purchasing || state == .deferred { return }
        print("product purchased!")
    }
}

对于完成的交易,将调用该闭包。对于不完整的交易,系统恢复后没有完成交易的情况将调用该闭包。

另外(强烈推荐),你可以传递一个account参数,它将被用于SKPayment对象的applicationUsername参数。该属性的值可以是一个字符串,用来标识进行交易的用户(用户名、电子邮件等)。Purchaser会为传递的值创建SHA256散列,并将其设置为applicationUsername参数。

检查产品的购买状态

你可以通过调用来检查产品是否已被购买

Purchaser.isProductPurchased(with: "my_awesome_product_identifier")

检查用户是否能够付款

有时,付款功能可能因设备中配置的家长控制等原因被限制。要检查用户是否能够付款,可以使用

Purchaser.canMakePayments()

开发者通常会隐藏付款相关的UI元素,如果用户无法进行付款。

恢复产品

要恢复之前完成的交易,你需要调用

Purchaser.restorePurchases { (state, _, finished, error) in
    if let error = error {
        print("error restoring products: \(error)")
    } else {
        if state == .purchasing || state == .deferred { return }
        print("products restored!")
    }
}

你可以检查finished参数来了解是否所有交易都已完成。对于任何恢复的单个交易,它将被设置为false,而当所有交易都恢复时,它将被设置为true