@@ -8,6 +8,7 @@ import Product from "../dto/Product";
88import PurchaseResult from "../dto/PurchaseResult" ;
99import { isAndroid , isIos } from "./utils" ;
1010import type { EntitlementsUpdateListener } from '../dto/EntitlementsUpdateListener' ;
11+ import type { DeferredPurchasesListener } from '../dto/DeferredPurchasesListener' ;
1112import type { PromoPurchasesListener } from '../dto/PromoPurchasesListener' ;
1213import User from '../dto/User' ;
1314import PurchaseOptions from '../dto/PurchaseOptions' ;
@@ -29,8 +30,9 @@ export const sdkSource = "rn";
2930
3031export default class QonversionInternal implements QonversionApi {
3132
32- private entitlementsUpdateListener : EntitlementsUpdateListener | null = null ;
33+ private deferredPurchasesListener : DeferredPurchasesListener | null = null ;
3334 private promoPurchasesDelegate : PromoPurchasesListener | null = null ;
35+ private deferredPurchaseEventSubscribed = false ;
3436
3537 constructor ( qonversionConfig : QonversionConfig ) {
3638 RNQonversion . storeSDKInfo ( sdkSource , sdkVersion ) ;
@@ -46,6 +48,10 @@ export default class QonversionInternal implements QonversionApi {
4648 if ( qonversionConfig . entitlementsUpdateListener ) {
4749 this . setEntitlementsUpdateListener ( qonversionConfig . entitlementsUpdateListener ) ;
4850 }
51+
52+ if ( qonversionConfig . deferredPurchasesListener ) {
53+ this . setDeferredPurchasesListener ( qonversionConfig . deferredPurchasesListener ) ;
54+ }
4955 }
5056
5157 syncHistoricalData ( ) {
@@ -382,9 +388,19 @@ export default class QonversionInternal implements QonversionApi {
382388 return ;
383389 }
384390
385- private entitlementsUpdatedEventHandler = ( payload : Object ) => {
386- const entitlements = Mapper . convertEntitlements ( payload as Record < string , QEntitlement > ) ;
387- this . entitlementsUpdateListener ?. onEntitlementsUpdated ( entitlements ) ;
391+ private subscribeToDeferredPurchaseEvent ( ) {
392+ if ( ! this . deferredPurchaseEventSubscribed ) {
393+ RNQonversion . onDeferredPurchaseCompleted ( this . deferredPurchaseCompletedEventHandler ) ;
394+ this . deferredPurchaseEventSubscribed = true ;
395+ }
396+ }
397+
398+ private deferredPurchaseCompletedEventHandler = ( payload : Object ) => {
399+ const purchaseResult = Mapper . convertPurchaseResult ( payload as Record < string , any > ) ;
400+
401+ if ( purchaseResult ) {
402+ this . deferredPurchasesListener ?. onDeferredPurchaseCompleted ( purchaseResult ) ;
403+ }
388404 }
389405
390406 private promoPurchaseReceivedEventHandler = ( productId : string ) => {
@@ -397,11 +413,18 @@ export default class QonversionInternal implements QonversionApi {
397413 }
398414
399415 setEntitlementsUpdateListener ( listener : EntitlementsUpdateListener ) {
400- if ( this . entitlementsUpdateListener == null ) {
401- RNQonversion . onEntitlementsUpdated ( this . entitlementsUpdatedEventHandler ) ;
402- }
403-
404- this . entitlementsUpdateListener = listener ;
416+ this . setDeferredPurchasesListener ( {
417+ onDeferredPurchaseCompleted : ( purchaseResult : PurchaseResult ) => {
418+ if ( purchaseResult . entitlements ) {
419+ listener . onEntitlementsUpdated ( purchaseResult . entitlements ) ;
420+ }
421+ }
422+ } ) ;
423+ }
424+
425+ setDeferredPurchasesListener ( listener : DeferredPurchasesListener ) {
426+ this . subscribeToDeferredPurchaseEvent ( ) ;
427+ this . deferredPurchasesListener = listener ;
405428 }
406429
407430 setPromoPurchasesDelegate ( delegate : PromoPurchasesListener ) {
0 commit comments