@@ -12,6 +12,7 @@ extends Node
12
12
13
13
var playStore
14
14
var queryingPurchasesAtStart = false
15
+ var purchasesToConsume = {}
15
16
16
17
# ------------------------------------------------------------------------------
17
18
@@ -22,7 +23,7 @@ signal skuDetailsReceived
22
23
func _ready ():
23
24
if Engine .has_singleton ('GodotGooglePlayBilling' ):
24
25
G .log ('-------------------------------' )
25
- G .log ('✅ PlayStore starting: GodotGooglePlayBilling was found' )
26
+ G .log ('✅ GodotGooglePlayBilling was found, connecting PlayStore. ' )
26
27
playStore = Engine .get_singleton ('GodotGooglePlayBilling' )
27
28
connectPlayStore ()
28
29
@@ -94,7 +95,7 @@ func receivedPurchases(query_result):
94
95
95
96
# _purchase is_acknowledged but not consumed => either not consumed or not consumable
96
97
elif _purchase .purchase_state == 1 :
97
- Player . storePurchaseToken (_purchase .purchase_token , _purchase .sku )
98
+ storePurchaseToken (_purchase .purchase_token , _purchase .sku )
98
99
onPurchaseAcknowledged (_purchase .purchase_token )
99
100
100
101
else :
@@ -106,27 +107,6 @@ func receivedPurchases(query_result):
106
107
107
108
# ==============================================================================
108
109
109
- func onPurchaseAcknowledged (purchaseToken ):
110
- var sku = Player .getSKUFromPurchaseToken (purchaseToken )
111
- var storeItem = G .STORE [sku ]
112
-
113
- if (storeItem .isConsumable ):
114
- playStore .consumePurchase (purchaseToken )
115
- else :
116
- onPurchaseDone (purchaseToken )
117
-
118
- # ------------------------------------------------------------------------------
119
-
120
- func onPurchaseAcknowledgementError (id , message , purchaseToken ):
121
- Router .hideLoader ()
122
- G .log ('🔴 Purchase acknowledgement error:' , {
123
- id = id ,
124
- message = message ,
125
- purchaseToken = purchaseToken
126
- })
127
-
128
- # ==============================================================================
129
-
130
110
func purchase (sku ):
131
111
G .log ('purchasing ' , sku );
132
112
Router .showLoader ()
@@ -164,7 +144,7 @@ func onPurchasesUpdated(purchases):
164
144
for _purchase in purchases :
165
145
var sku = JSON .parse_string (_purchase .original_json ).productId
166
146
var purchaseToken = _purchase .purchase_token
167
- Player . storePurchaseToken (purchaseToken , sku )
147
+ storePurchaseToken (purchaseToken , sku )
168
148
169
149
playStore .queryPurchases ('inapp' )
170
150
@@ -184,6 +164,57 @@ func onPurchaseDone(purchaseToken):
184
164
Router .hideLoader ()
185
165
186
166
if (queryingPurchasesAtStart ):
187
- Player . foundPreviousPurchase (purchaseToken )
167
+ foundPreviousPurchase (purchaseToken )
188
168
else :
189
- Player .onPurchaseCompleted (purchaseToken )
169
+ onPurchaseCompleted (purchaseToken )
170
+
171
+ # ==============================================================================
172
+ # android purchases backup waiting to be acknowleged
173
+ # ==============================================================================
174
+
175
+ func storePurchaseToken (purchaseToken , sku ):
176
+ Player .state .purchasesToConsume [purchaseToken ] = sku
177
+ Player .save ()
178
+
179
+ func _getSKUFromPurchaseToken (purchaseToken ):
180
+ var sku = Player .state .purchasesProcessing [purchaseToken ]
181
+ return sku
182
+
183
+ func setPurchaseProcessed (purchaseToken ):
184
+ Player .state .purchasesProcessing .erase (purchaseToken )
185
+ Player .save ()
186
+
187
+ # ---------------
188
+
189
+ func onPurchaseCompleted (purchaseToken ):
190
+ setPurchaseProcessed (purchaseToken )
191
+ var sku = _getSKUFromPurchaseToken (purchaseToken )
192
+ Player .bought (sku )
193
+
194
+ # ---------------
195
+
196
+ func foundPreviousPurchase (purchaseToken ):
197
+ setPurchaseProcessed (purchaseToken )
198
+ var sku = _getSKUFromPurchaseToken (purchaseToken )
199
+ Player .previouslyBought (sku )
200
+
201
+ # ------------------------------------------------------------------------------
202
+
203
+ func onPurchaseAcknowledged (purchaseToken ):
204
+ var sku = _getSKUFromPurchaseToken (purchaseToken )
205
+ var storeItem = G .STORE [sku ]
206
+
207
+ if (storeItem .isConsumable ):
208
+ playStore .consumePurchase (purchaseToken )
209
+ else :
210
+ onPurchaseDone (purchaseToken )
211
+
212
+ # ---------------
213
+
214
+ func onPurchaseAcknowledgementError (id , message , purchaseToken ):
215
+ Router .hideLoader ()
216
+ G .log ('🔴 Purchase acknowledgement error:' , {
217
+ id = id ,
218
+ message = message ,
219
+ purchaseToken = purchaseToken
220
+ })
0 commit comments