Обзор приложений очень строг, когда дело доходит до Apple.Судя по опыту, у меня была эта проблема много раз.Ваш код мне кажется нормальным, пока он не перейдет к функции givePurchasedProduct
.
Хорошо, так что я заметил:
- Ваше приложение обрабатывает платеж, и мы получаем
return "purchased"
, если ничего не происходит, - Если дело было
case .purchased:
, тогдаМы вызываем GivePurchasedProduct
На вашей функции.Вы разделяете покупку, чтобы узнать, является ли она Zap покупкой или она должна была удалить ads
Однако.эта строка сбивает меня с толку ... Зачем вам использовать range
, когда contains
, где недавно появился
if productID.contains("Zap") {
// No Zapp? it has to be Ads then
NotificationCenter.default.post(name: Notification.Name.init("zapPurchased"), object: nil)
} else {
NotificationCenter.default.post(name: Notification.Name.init("noAdsPurchased"), object: nil)
}
Примечания.Возможно, вы забыли:
- К
import Foundation
- Я не знаю, что скрывается за уведомлениями наблюдателей, так как код не включен.Но.Это не доставляет
Это еще не все.Receipt Validating
это головная боль, но когда это необходимо.Это расслабление и безопасность вашего приложения.
Если вы проверяете квитанцию.эти вопросы и ответы мне очень помогли.см.
Бонус.С SwiftyStoreKit
.Проверка квитанции аналогична нажатию кнопки:
Используйте этот метод для (необязательно) обновления квитанции и проверки за один шаг.
let appleValidator = AppleReceiptValidator(service: .production, sharedSecret: "your-shared-secret")
SwiftyStoreKit.verifyReceipt(using: appleValidator, forceRefresh: false) { result in
switch result {
case .success(let receipt):
print("Verify receipt success: \(receipt)")
case .error(let error):
print("Verify receipt failed: \(error)")
}
}
Теперь с другой стороны.рецензентам купленный контент не доставляется.Поэтому они думают, что это проверка покупки.
Как вы подтверждаете покупку?доставить контент?пожалуйста, обновите ваш вопрос.Я уверен, что буду полезен
Удачи