Код покупки в приложении не работает на TestFlightIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Код покупки в приложении не работает на TestFlight

Сообщение Anonymous »

Мое приложение постоянно отклоняют, потому что кнопка покупки не работает. Он работает отлично, когда я тестировал его с помощью симулятора xcode, а также на реальном устройстве. У меня появилось окно покупки в App Store. Однако, когда я тестировал его с помощью TestFlight, он действительно не отвечает.
Изображение

Я заявил, что использую StoreKit2 и мне не нужно подтверждать получение, поэтому я не считаю, что это руководство полезно. Ниже мой код. Чтобы инициировать покупку продукта, достаточно одного щелчка мыши. Есть идеи, почему это работает хорошо, но не для TestFlight и рецензентов Apple?
Button(action: {
Task { try await storeManager.purchase() }
}) {
Text("Continue")
}

import Foundation
import StoreKit

let productIDs = ["my_product_1", "my_product_2"]

class StoreManager: ObservableObject {
static let shared = StoreManager()

@Published var storeProducts: [Product] = []
@Published var purchasedProducts: Set = []
var transacitonListener: Task? = nil

init() {
transacitonListener = listenForTransactions()
Task {
await loadProducts()
await updateCurrentEntitlements()
}
}

func getProduct(index: Int) -> Product? {
for product in storeProducts {
if product.id == productIDs[index] {
return product
}
}
return nil
}

func getProductPrice() -> String {
if let product = getProduct(index: 0) {
return product.displayPrice
}
return "4.99 USD"
}

func getProductPriceOrigin() -> String {
if let product = getProduct(index: 1) {
return product.displayPrice
}
return "9.99 USD"
}

func isPurchased() -> Bool {
return purchasedProducts.contains { $0.id == productIDs[0] }
}

@MainActor
func purchase() async throws -> Transaction? {
log("enter")
let product: Product? = getProduct(index: 0)
if product == nil {
log("product nil")
return nil
}
log("before purchase")
let result = try await product!.purchase()
log("after purchase")
switch result {
case let .success(.verified(transaction)):
purchasedProducts.insert(product!)
await transaction.finish()
log("success")
return transaction
case let .success(.unverified(_, error)):
print("purchase.success.unverified:", error)
log("success unverified")
break
case .pending:
log("pending")
break
case .userCancelled:
log("userCancelled")
break
default:
log("default")
break
}
return nil
}

@MainActor
private func loadProducts() async {
do {
storeProducts = try await Product.products(for: productIDs)
} catch {
print("Failed to load product \(productIDs):", error)
}
}

private func listenForTransactions() -> Task < Void, Error > {
return Task.detached {
for await result in Transaction.updates {
await self.handleTransaction(transactionVerification: result)
}
}
}

private func updateCurrentEntitlements() async {
for await result in Transaction.currentEntitlements {
await self.handleTransaction(transactionVerification: result)
}
}

@MainActor
private func handleTransaction(transactionVerification result: VerificationResult ) async {
switch result {
case let.verified(transaction):
guard
let product = self.storeProducts.first(where: {
$0.id == transaction.productID
})
else {
return
}
self.purchasedProducts.insert(product)
await transaction.finish()
default:
return
}
}

@MainActor
func restore() async throws {
try await AppStore.sync()
}
}


Подробнее здесь: https://stackoverflow.com/questions/786 ... testflight
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»