iOS - Покупка в приложении - Неверный идентификатор продукта
Я пытаюсь интегрировать покупки из приложения в свой проект. Я использовал стороннюю библиотеку, SwiftyStoreKit
, как помощник IAP.
Я пытаюсь получить информацию о своих продуктах в приложении, но всегда получаю ответ, который Invalid Product Identifiers
Все мои соглашения в силе (платные и бесплатные). Кроме того, статус My In-App Product показывает 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))
})
}
7 ответов
Проверьте свои productIdentifier
! Это должна быть та же строка, что и в iTunes Connect. Например, "com.myapp.myPurchase"
У меня была такая же проблема, но приведенные выше решения не помогли мне.
Вот что сделал:
Оказалось, что я не заполнил надлежащие платежи и форму W9 в AppStoreConnect.
Перейдите в AppStoreConnect > Соглашения, налоги и банковское дело...
Заполните договор "Платные приложения", если он еще не был заполнен.
Вот что сработало для меня:
Я перепутал ссылочное имя (слева) с идентификатором продукта (справа)
Поэтому убедитесь, что вы используете идентификатор продукта iTunes Connect в своем коде.
Убедитесь, что вы добавили в свой проект "In-App Purchase" из Xcode - Target - Signing & Capabilities.
У меня была точно такая же ошибка, и запуск этого кода в делегате приложения, похоже, решил мою проблему, потому что добавление наблюдателя вашего приложения при запуске гарантирует, что оно будет сохраняться во время всех запусков вашего приложения, таким образом позволяя вашему приложению получать все уведомления об очереди платежей,
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
}
Не забудьте сделать свое приложение Ready To Submit
положение дел.
Если ваше In-App имеет другой статус, он всегда возвращается invalid product identifier
.
Попробуйте использовать productid вместо com.yourname.projectname.productid