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

Другие вопросы по тегам