iOS - 应用内购买 - 无效的产品标识符
iOS - In-App Purchase - Invalid product Identifier
我正在尝试将应用内购买集成到我的项目中。我使用第三方库 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
}
这对我有用:
我混淆了参考名称(左侧)和产品 ID(右侧)
因此请确保您在代码中使用了 iTunes Connect 的产品 ID。
我遇到了完全相同的问题,但上面的解决方案对我不起作用。
这是做了什么:
原来我没有在 AppStoreConnect 上填写正确的付款和 W9 表格。
转到 AppStoreConnect > 协议、税务和银行...
如果尚未填写“付费应用”合同,请填写
记得让你的 In-App Ready To Submit
状态。
如果你的 In-App 有不同的状态,那么它总是 return invalid product identifier
。
确保从 Xcode - Target - Signing & Capabilities 添加“应用内购买”到您的项目。
尝试使用 productid 而不是 com.yourname.projectname.productid
我正在尝试将应用内购买集成到我的项目中。我使用第三方库 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
}
这对我有用:
我混淆了参考名称(左侧)和产品 ID(右侧)
因此请确保您在代码中使用了 iTunes Connect 的产品 ID。
我遇到了完全相同的问题,但上面的解决方案对我不起作用。
这是做了什么:
原来我没有在 AppStoreConnect 上填写正确的付款和 W9 表格。
转到 AppStoreConnect > 协议、税务和银行...
如果尚未填写“付费应用”合同,请填写
记得让你的 In-App Ready To Submit
状态。
如果你的 In-App 有不同的状态,那么它总是 return invalid product identifier
。
确保从 Xcode - Target - Signing & Capabilities 添加“应用内购买”到您的项目。
尝试使用 productid 而不是 com.yourname.projectname.productid