iOS - 应用内购买 - 无效的产品标识符

8
我正在尝试集成In-App购买到我的项目中。我已经使用了第三方库“SwiftyStoreKit”作为IAP助手。
我试图获取我的In-App产品的信息,但总是得到一个响应“无效的产品标识符”。
所有我的协议都已生效(付费和免费)。此外,我的In-App产品状态显示“等待上传”。我的应用程序尚未发布,所以我正在沙盒模式下进行测试。
以下是我的代码:
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))

    })
}
7个回答

24

我曾经遇到完全相同的问题,但以上解决方案对我没有用。

这是我的解决办法:

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

前往AppStoreConnect > 协议、税收和银行......

填写“已付应用程序”合同,如果之前没有填写的话。

AppstoreConnect 合同


在大多数情况下,这是需要修复的错误。 - oskarko
我刚发现我的协议已经过期了。 - Zahid Usman Cheema

7

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


2
从您的设备中删除该应用程序。然后使用 Build&Run 将该应用程序重新安装到已连接到 Mac 的设备上。现在应该可以正常工作了。 - Sivajee Battina
1
你完成了财务要求吗? - Sivajee Battina
1
您的应用内产品状态显示为“等待上传”,对吧?也许这就是问题所在。首先拒绝旧的二进制文件,然后删除应用内购买的新版本,最后重新上传二进制文件。这样做可能会改变您的状态。 - Sivajee Battina
1
它需要的时间几乎与应用程序审核相同。大约需要2-3天。 - Sivajee Battina
5
在沙盒环境中测试时,无需进行内购审批。请按照此清单操作:https://dev59.com/PGgu5IYBdhLWcg3wWV2F - Aravind Bhuvanendran
显示剩余9条评论

4
这是对我有用的方法:
我曾经混淆过参考名称(左侧)和产品ID(右侧)
因此,请确保在您的代码中使用iTunes Connect的产品ID。

enter image description here


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
}


2
请确保您从Xcode - Target - Signing & Capabilities向项目中添加了“应用内购买”。

1

请记得将您的应用内准备提交状态设置好。

enter image description here

如果您的应用内购状态不同,则始终返回“无效的产品标识符”。

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接