【问题标题】:iOS - In-App Purchase - Invalid product IdentifieriOS - 应用内购买 - 无效的产品标识符
【发布时间】:2025-11-29 21:35:02
【问题描述】:

我正在尝试将应用内购买集成到我的项目中。我使用了第三方库 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))

    })
}

【问题讨论】:

    标签: ios swift in-app-purchase app-store-connect storekit


    【解决方案1】:

    检查您的productIdentifier! 它应该与在 iTunes Connect 中注册的字符串相同。 例如“com.myapp.myPurchase”

    【讨论】:

    • 从您的设备中删除该应用程序。然后使用 Build & Run 将应用程序重新安装到设备上,并将您的设备连接到 Mac。它现在应该可以工作了
    • 您完成财务要求了吗?
    • 您的应用内商品状态显示为“等待上传”对。可能这就是问题所在。首先拒绝旧的二进制文件。然后删除应用内购买较新版本,然后重新上传二进制文件。这样做可能会改变您的状态
    • 这几乎与应用审查时间相同。大约 2-3 天
    • 您无需 IAP 批准即可在沙盒中进行测试。浏览这份清单*.com/questions/11387403/…
    【解决方案2】:

    我遇到了完全相同的错误,在应用程序委托中运行此代码似乎解决了我的问题,因为通过在启动时添加应用程序的观察者可确保它在应用程序的所有启动过程中持续存在,从而允许您的应用程序接收所有付款队列通知。

    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
    }

    【讨论】:

      【解决方案3】:

      这对我有用:

      我将参考名称(左侧)与产品 ID(右侧)混淆了

      因此,请确保您在代码中使用了 iTunes Connect 的产品 ID。

      【讨论】:

        【解决方案4】:

        我遇到了同样的问题,但上面的解决方案对我不起作用。

        这是这样做的:

        原来我没有在 AppStoreConnect 上填写正确的付款和 W9 表格。

        转到 AppStoreConnect > 协议、税务和银行业务...

        如果尚未填写“付费应用”合同,请填写该合同

        【讨论】:

          【解决方案5】:

          记得让你的应用内Ready To Submit 状态。

          如果您的应用内有不同的状态,那么它总是返回invalid product identifier

          【讨论】:

            【解决方案6】:

            确保从 Xcode - Target - Signing & Capabilities 将“In-App Purchase”添加到您的项目中。

            【讨论】:

              【解决方案7】:

              尝试使用 productid 而不是 com.yourname.projectname.productid

              【讨论】: