AppStoreManger
是一个易于使用的,基于 StoreKit 2 的应用内购买管理器。
如果您觉得 AppStoreManger
有用,并希望帮助支持其持续开发和维护,请考虑进行小额捐赠,尤其是在您将其用于商业产品时。
通过像您这样的贡献者的支持,我才能继续构建、发布和维护高质量、文档完善的 Swift 包,例如免费的 AppStoreManger
。
Swift Package Manager (Xcode 11 及以上)
https://github.com/Appracatappra/AppStoreManger.git
。为什么不使用 CocoaPods、Carthage 等?
支持多个依赖管理器会使维护一个库的难度成倍增加,并且非常耗时。
由于 Swift Package Manager 已与 Xcode 11(及更高版本)集成,因此它是支持未来发展的最简单选择。
只需在您的 App 项目中包含 AppStoreManager
并定义您的 Products.plist
文件,它就能自动支持以下功能:
您需要在您的 App 的 Bundle 中包含一个 Products.plist
文件,该文件定义您要销售的产品,以及您希望定义的任何有用的元数据(例如图片或长描述)。
以下是包含的 SampleProducts.plist
示例:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>InAppPurchaseID01</key>
<dict>
<key>Image</key>
<string>ProductImageName01</string>
<key>Description</key>
<string>ProductDescription01</string>
</dict>
<key>InAppPurchaseID02</key>
<dict>
<key>Image</key>
<string>ProductImageName02</string>
<key>Description</key>
<string>ProductDescription02</string>
</dict>
<key>InAppPurchaseID03</key>
<dict>
<key>Image</key>
<string>ProductImageName03</string>
<key>Description</key>
<string>ProductDescription03</string>
</dict>
</dict>
</plist>
Products 字典中的第一个 Key
至关重要,应该是在 App Store Connect 中为您 App 定义的有效应用内购买 ID。
子 Dictionary
包含您想要与单个产品关联的任何元数据属性,作为 String
键和 String
值。 在此示例中,我们同时包含 图片名称 和 长描述。
稍后我们可以使用 StoreManager
函数来获取我们定义的任何属性。 要获取我们为最后一个产品定义的 图片名称,您可以使用:
let imageName = StoreManager.shared.getAttribute("Image", for: "InAppPurchaseID03")
您需要监听一些事件,以便您可以响应用户交互:
purchasesUpdated
- 每当 App Store 修改应用内购买时(例如,成功购买产品或购买失败时)都会调用此方法。productRevoked
- 当 App Store 撤销购买交易时调用。 Transaction
将传递给该事件。promotedInAppPurchaseEvent
- 处理用户与 App Store 中的推广的应用内购买进行交互。 该事件将传递 Product
和一个 Bool
标志,用于表示交互的成功或失败。例如,在您的 App 的主模块中,您可以执行以下操作:
WindowGroup {
...
}
.onChange(of: scenePhase) { oldScenePhase, newScenePhase in
switch newScenePhase {
case .active:
// Listen for Store Manager Events
StoreManager.shared.productRevoked = {transaction in
// Handle Revoked Purchase events
...
}
StoreManager.shared.promotedInAppPurchaseEvent = {product, successful in
// Handle Promoted In-App Purchase events
...
}
case .inactive:
break
case .background:
// Release Store Manager Events
StoreManager.shared.releaseEventHandlers()
@unknown default:
print("App has entered an unexpected scene: \(oldScenePhase), \(newScenePhase)")
}
}
在您的应用程序退出或进入后台之前,调用 StoreManager.shared.releaseEventHandlers()
以释放您附加的任何处理程序。
以下函数是最常用的:
public func purchase(_ product: Product) async throws -> Transaction?
尝试购买给定的产品。public func isPurchased(_ product: Product) async throws -> Bool
或 public func isPurchased(id:String) -> Bool
将在购买给定产品时返回 true
。public func productFor(id:String) -> Product?
返回给定应用内购买 ID 的 Product
。public func getAttribute(_ name:String, for productID:String, defaultValue:String = "") -> String
返回在您的 App Bundle 中包含的 Product.plist
文件中定义的给定应用内购买 ID 的属性。public func beginRefundProcess(for productID: String, completionHandler: purchaseUpdateHandler? = nil)
开始给定应用内购买 ID 的退款流程。Package 包含所有功能的完整 DocC 文档。