PurchaseRequirement

public class PurchaseRequirement : Hashable, Equatable, CustomStringConvertible

Use a PurchaseRequirement to express the rules about what purchased products enable your Feature(s).

You can express complex rules about how your Features are enabled using a graph of requirements. Each Feature can only have one requirement when using the .purchaseRequired availability value, but one requirement can match one or all of a list of product IDs, as well as having dependencies on other requirements.

With this you can express the following kinds of rules:

  • Feature X is available if Product A is purchased
  • Feature X is available if Product A OR Product B OR Product C is purchased
  • Feature X is available if Product A AND Product B AND Product C is purchased
  • Feature X is available if Product A AND (Product B OR Product C) is purchased
  • Feature X is available if (Product A OR Product B) AND ((Product B OR Product C) AND PRODUCT D) is purchased
  • Feature X is available if (Product A OR Product B) AND ((Product B OR Product C) AND PRODUCT D AND PRODUCT E) is purchased

…and so on. This allows you to map Feature availability to a range of different product pricing strategies and relationships, such as Basic level of subscription plus a Founder IAP that maybe offered to unlock all features in future for a one-off purchase, provided they still have a basic subscription.

  • An enum type that determines how a products are matched.

    See more

    Declaration

    Swift

    public enum Criteria : Hashable, Equatable
  • The set of products to match with this requirement

    Declaration

    Swift

    public let products: Set<Product>
  • Determines how products are matched. Specifying .any means at least one product has to be purchased to fulfull this requirement. Using .all means every product in the products set must be purchased for this requirement to be fulfilled.

    Declaration

    Swift

    public let matchingCriteria: Criteria
  • Optional list of requirements that must also be fulfilled for this requirement to be fulfilled. Using this you can express complex combinations of purchases and options

    Declaration

    Swift

    public let dependencies: [PurchaseRequirement]?
  • Initialise the requirement with its products, matching criteria and dependencies.

    Declaration

    Swift

    public init(products: Set<Product>, matchingCriteria: Criteria, dependencies: [PurchaseRequirement]? = nil)
  • Undocumented

    Declaration

    Swift

    public convenience init(_ product: Product)
  • Call to see if this requirement and all dependent requirements are fulfilled

    • param validator: The validator to use to see if each product in a requirement has been purchased

    Declaration

    Swift

    public func isFulfilled(validator: PurchaseTracker) -> Bool?
  • Declaration

    Swift

    public var description: String { get }