Wir verwenden automatisch verlängerbare Abonnements, und es funktioniert bis auf den einen Edge-Fall einwandfrei.Wiederherstellen von automatisch verlängerbaren Abonnements nach
Wenn Benutzer ihr iPhone auf die Werkseinstellungen zurücksetzen, ist es ihnen nicht möglich, automatisch verlängerbare Abonnements in unserer App wiederherzustellen (oder so, wie es scheint, haben wir gerade zwei solcher Fälle).
Wir verwenden SwiftyStoreKit, aber ich glaube, dass es einen logischen Fehler auf unserer Seite gibt.
Gerade jetzt sind wir wieder herstellen Einkäufe auf diese Weise:
func checkOldSubscriptions()->Bool {
//validator
let appleValidator = AppleReceiptValidator(service: .production, sharedSecret: ss)
for i in 0..<products.count {
//checking every available product in receipt
SwiftyStoreKit.verifyReceipt(using: appleValidator, completion: { (result) in
switch result {
case .success(let receipt):
let purchaseResult = SwiftyStoreKit.verifySubscription(
type: .autoRenewable,
productId: products[i].name,
inReceipt: receipt)
switch purchaseResult {
case .purchased(let expiresDate):
print("Product is valid until \(expiresDate)")
...
}
}
Meine Hypothese ist, dass nach dem Reset wir gerade keine Quittung zu überprüfen, und ich habe es direkt abgerufen werden. Es ist schwierig, das Gerät zu überprüfen, denn ehrlich gesagt habe ich kein echtes Testgerät, das für mich einfach zu töten wäre.
Deshalb möchte ich so etwas hinzufügen (manuell den Empfang erfrischend, bevor Sie versuchen, es zu verifizieren):
SwiftyStoreKit.verifyReceipt(using: appleValidator, forceRefresh: true) { result in
switch result {
case .success(let receipt):
Hat es einen Sinn? Wird es helfen?
Sind Sie sicher, dass 'restoreCompletedTransactions()' für Abonnements und nicht nur für Nicht-Verbrauchsmaterialien funktioniert? –
danke, aber eigentlich bedeutet es, dass ich falsch liege, und ForceRefresh würde mir nicht helfen, und ich muss stattdessen kaufen. Ich wollte dem entfliehen, weil wir autorenewable Subscriptions verkaufen (und restorePurchases gibt alle Käufe zurück, inklusive abgelaufene), aber es scheint, dass ich hier keine Wahl habe. – lithium
Sie hatten Recht, dass Sie keine Quittung haben, um zu überprüfen;) Wiederherstellen sollte natürlich abgelaufene Käufe enthalten, da Ihr Kunde für diese Woche/Monat/Jahr bezahlt hat. Wenn Ihre Geschäftslogik abgelaufene Einkäufe nicht interessiert, markieren Sie sie als abgeschlossen und fahren Sie fort. Die einzige andere Möglichkeit, dies zu tun, wäre, die Berechtigung des Benutzers in Ihrem Backend zu verwalten. –