From baf600238bc23594fc54a12337d2a3299374e476 Mon Sep 17 00:00:00 2001 From: David Turner Date: Fri, 24 Feb 2023 18:20:36 -0500 Subject: [PATCH] Send completed message at end of iap restores. Code by John Girvin in https://github.com/godotengine/godot-proposals/issues/242 --- plugins/inappstore/README.md | 9 +++++++-- plugins/inappstore/in_app_store.mm | 15 +++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/plugins/inappstore/README.md b/plugins/inappstore/README.md index 022893d..31f2a74 100644 --- a/plugins/inappstore/README.md +++ b/plugins/inappstore/README.md @@ -10,7 +10,7 @@ var _appstore = null func check_events(): while _appstore.get_pending_event_count() > 0: var event = inappstore.pop_pending_event() - if event.result=="ok": # other possible values are "progress", "error", "unhandled" + if event.result=="ok": # other possible values are "progress", "error", "unhandled", "completed" # print(event.product_id) match event.type: @@ -21,7 +21,12 @@ func check_events(): # fields: product_id, transaction_id, receipt ... 'restore': - # fields: product_id, transaction_id, receipt + # fields: product_id, transaction_id, receipt + ... + 'completed': + # Now the last in-app purchase restore has been sent, + # so if you didn't get any, the user doesn't have + # any purchases to restore. ... func _on_Purchase_button_down(): diff --git a/plugins/inappstore/in_app_store.mm b/plugins/inappstore/in_app_store.mm index 5c20be6..96af495 100644 --- a/plugins/inappstore/in_app_store.mm +++ b/plugins/inappstore/in_app_store.mm @@ -344,6 +344,21 @@ - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)tran } } +- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue { + Dictionary ret; + ret["type"] = "restore"; + ret["result"] = "completed"; + InAppStore::get_singleton()->_post_event(ret); +} + +- (void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error { + Dictionary ret; + ret["type"] = "restore"; + ret["result"] = "error"; + ret["error"] = String::utf8([error.localizedDescription UTF8String]); + InAppStore::get_singleton()->_post_event(ret); +} + @end void InAppStore::_bind_methods() {