Форма оплаты Apple не показывается иногда (песочница)IOS

Программируем под IOS
Ответить
Anonymous
 Форма оплаты Apple не показывается иногда (песочница)

Сообщение Anonymous »

Я тестирую покупку подписки в моем приложении для iOS. Я использую комплект магазина 2. отправка для бэкэнд транзакции для проверки и записи данных о членстве в DB. После возвращения в бэкэнд я заканчиваю транзакцию и отклоняю формы оплаты. < /P>
Я, кажется, столкнулся с проблемой. После нескольких успешно завершенных покупок с помощью: < /p>

Форма платежа Apple, выступающая правильно < /li>
Форма пароля песочницы < /li>
Предупреждение о том, что я уже купил подписку (это не демодлевая статическая подписка), и я хочу, чтобы я снова нажимал). Завершенная покупка < /li>
< /ol>
Так казалось, что все работает нормально. Но потом я начал получать неправильное поведение - нажимая на любые варианты в моем пользовательском интерфейсе, которые называют My ProductManager.Swift

Код: Выделить всё

ProductManager.shared.purchase(productID: productID, isAutoRenewable: isAutoRenewable, amount: amount) { [weak self] success, error in
< /code>
не показывает никакой формы платежа Apple, но моя функция SendTobackend активируется, потому что iOS отправляет транзакцию на бэкэнд и проверяет Apple и записывает данные в DB. Я бы даже сразу увидел, как мое пользовательское поздравительное всплывающее окно, которое должно показаться после завершенной покупки (возвращен из бэкэнда). < /P>
И это несовместимо. Но сейчас я не могу, чтобы любовь Бога совершила автоматическую продленную покупку, чтобы показать мне любые формы платежей, это просто молча обрабатывает все в моем узле.  JS: < /p>
{"transactionId":"2000000902832874","originalTransactionId":"20000008992983721","webOrderLineItemId":"200000009127659","bundleId":"some.bundle.id","productId":"some.product.id","subscriptionGroupIdentifier":"21647158","purchaseDate":1745246764000,"originalPurchaseDate":1744788721000,"expiresDate":1745247064000,"quantity":1,"type":"Auto-Renewable Subscription","inAppOwnershipType":"PURCHASED","signedDate":1745446227570,"environment":"Sandbox","transactionReason":"RENEWAL","storefront":"USA","storefrontId":"143441","price":9990,"currency":"USD","appTransactionId":"704404281845301369"}
< /code>
Вот моя покупка и купить функции: < /p>
func purchase(productID: String, isAutoRenewable: Bool, amount: Int?, completion: @escaping (Bool, Error?) -> Void) {
Task {
// Ensure products are fetched before proceeding
if !isProductsFetched {
await fetchProducts()
}

var product = products.first(where: { $0.id == productID })
if product == nil {
await fetchProducts()
product = products.first(where: { $0.id == productID })
}

guard let finalProduct = product else {
completion(false, NSError(domain: "StoreKit", code: 404, userInfo: [NSLocalizedDescriptionKey: "Product not found"]))
return
}

await self.buy(product: finalProduct, isAutoRenewable: isAutoRenewable, amount: amount, completion: completion)
}
}

private func buy(product: Product, isAutoRenewable: Bool, amount: Int?, completion: @escaping (Bool, Error?) -> Void) async {
do {
let result = try await product.purchase()
switch result {
case .success(let verification):
switch verification {
case .verified(let transaction):
// Send transaction data directly to backend
let backendSuccess = await self.sendToBackend(transaction: transaction, productId: product.id, amount: amount, isAuto: isAutoRenewable)

if backendSuccess {
// Ensure backend processed before finishing the transaction
try await transaction.finish()
completion(true, nil)
} else {
let error = NSError(domain: "BackendError", code: -1, userInfo: [NSLocalizedDescriptionKey: "Backend validation failed"])
print("❌ Backend validation failed")
completion(false, error)
}
case .unverified(_, let error):
completion(false, error)
}
case .userCancelled, .pending:
completion(false, nil)
@unknown default:
completion(false, nil)
}
} catch {
completion(false, error)
}
}
Может ли это быть нестабильной средой песочницы?

Подробнее здесь: https://stackoverflow.com/questions/795 ... es-sandbox
Ответить

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

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

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

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

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