我正在尝试将In-App Purchase集成到我的项目中。我使用了第三方库SwiftyStoreKit
作为IAP助手。
我正在尝试获取我的应用程序内产品的信息,但总是得到Invalid Product Identifiers
的回复
我的所有协议都有效(付费和免费)。此外,我的应用内商品状态显示Waiting for Upload
。我的应用程序还没有发布,所以我在沙盒模式下测试它。
在我的代码中:
import UIKit
import StoreKit
import SwiftyStoreKit
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidAppear(_ _animated: Bool) {
super.viewDidAppear(_animated)
if dataModel.lists.count >= 2 {
getInfo()
}
}
func getInfo() {
NetworkActivityIndicatorManager.NetworkOperationStarted()
SwiftyStoreKit.retrieveProductsInfo([productIdentifier], completion: { result in
NetworkActivityIndicatorManager.networkOperationFinished()
self.showAlert(alert: self.alertForProductRetrievalInfo(result: result))
})
}
检查你的productIdentifier
!它应该与iTunes Connect中注册的字符串相同。例如“com.myapp.myPurchase”
我有完全相同的错误,并在应用程序委托中运行此代码似乎解决了我的问题,因为通过在启动时添加您的应用程序的观察者确保它将在您的应用程序的所有启动期间保持,从而允许您的应用程序接收所有支付队列通知。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// see notes below for the meaning of Atomic / Non-Atomic
SwiftyStoreKit.completeTransactions(atomically: true) { purchases in
for purchase in purchases {
switch purchase.transaction.transactionState {
case .purchased, .restored:
if purchase.needsFinishTransaction {
// Deliver content from server, then:
SwiftyStoreKit.finishTransaction(purchase.transaction)
}
// Unlock content
case .failed, .purchasing, .deferred:
break // do nothing
}
}
}
return true
}