-
Notifications
You must be signed in to change notification settings - Fork 23
Add DeferredPurchasesListener, deprecate EntitlementsUpdateListener #423
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 5 commits
5d248e7
2a5bf20
dda31ef
9a5f1cb
44fa617
801d40d
01bb578
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,12 @@ | ||
| import PurchaseResult from './PurchaseResult'; | ||
|
|
||
| export interface DeferredPurchasesListener { | ||
|
|
||
| /** | ||
| * Called when a deferred purchase completes. | ||
| * For example, when pending purchases like SCA, Ask to buy, etc., are approved and finalized. | ||
| * Provides the full purchase result with entitlements and store transaction details. | ||
| * @param purchaseResult the result of the completed deferred purchase. | ||
| */ | ||
| onDeferredPurchaseCompleted(purchaseResult: PurchaseResult): void; | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -8,6 +8,7 @@ import Product from "../dto/Product"; | |
| import PurchaseResult from "../dto/PurchaseResult"; | ||
| import {isAndroid, isIos} from "./utils"; | ||
| import type {EntitlementsUpdateListener} from '../dto/EntitlementsUpdateListener'; | ||
| import type {DeferredPurchasesListener} from '../dto/DeferredPurchasesListener'; | ||
| import type {PromoPurchasesListener} from '../dto/PromoPurchasesListener'; | ||
| import User from '../dto/User'; | ||
| import PurchaseOptions from '../dto/PurchaseOptions'; | ||
|
|
@@ -30,7 +31,10 @@ export const sdkSource = "rn"; | |
| export default class QonversionInternal implements QonversionApi { | ||
|
|
||
| private entitlementsUpdateListener: EntitlementsUpdateListener | null = null; | ||
| private deferredPurchasesListener: DeferredPurchasesListener | null = null; | ||
| private promoPurchasesDelegate: PromoPurchasesListener | null = null; | ||
| private entitlementsEventSubscribed = false; | ||
| private deferredPurchaseEventSubscribed = false; | ||
|
Comment on lines
+33
to
+35
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Seems like we can implement here the same logic as we've done in natives - replace deprecated
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Done. Both listeners now route through |
||
|
|
||
| constructor(qonversionConfig: QonversionConfig) { | ||
| RNQonversion.storeSDKInfo(sdkSource, sdkVersion); | ||
|
|
@@ -46,6 +50,10 @@ export default class QonversionInternal implements QonversionApi { | |
| if (qonversionConfig.entitlementsUpdateListener) { | ||
| this.setEntitlementsUpdateListener(qonversionConfig.entitlementsUpdateListener); | ||
| } | ||
|
|
||
| if (qonversionConfig.deferredPurchasesListener) { | ||
| this.setDeferredPurchasesListener(qonversionConfig.deferredPurchasesListener); | ||
| } | ||
| } | ||
|
|
||
| syncHistoricalData () { | ||
|
|
@@ -382,11 +390,34 @@ export default class QonversionInternal implements QonversionApi { | |
| return; | ||
| } | ||
|
|
||
| private subscribeToEntitlementsEvent() { | ||
| if (!this.entitlementsEventSubscribed) { | ||
| RNQonversion.onEntitlementsUpdated(this.entitlementsUpdatedEventHandler); | ||
| this.entitlementsEventSubscribed = true; | ||
| } | ||
| } | ||
|
|
||
| private subscribeToDeferredPurchaseEvent() { | ||
| if (!this.deferredPurchaseEventSubscribed) { | ||
| RNQonversion.onDeferredPurchaseCompleted(this.deferredPurchaseCompletedEventHandler); | ||
| this.deferredPurchaseEventSubscribed = true; | ||
| } | ||
| } | ||
|
|
||
| private entitlementsUpdatedEventHandler = (payload: Object) => { | ||
| const entitlements = Mapper.convertEntitlements(payload as Record<string, QEntitlement>); | ||
|
|
||
| this.entitlementsUpdateListener?.onEntitlementsUpdated(entitlements); | ||
| } | ||
|
|
||
| private deferredPurchaseCompletedEventHandler = (payload: Object) => { | ||
| const purchaseResult = Mapper.convertPurchaseResult(payload as Record<string, any>); | ||
|
|
||
| if (purchaseResult) { | ||
| this.deferredPurchasesListener?.onDeferredPurchaseCompleted(purchaseResult); | ||
| } | ||
| } | ||
|
|
||
| private promoPurchaseReceivedEventHandler = (productId: string) => { | ||
| const promoPurchaseExecutor = async () => { | ||
| const entitlements = await RNQonversion.promoPurchase(productId); | ||
|
|
@@ -397,13 +428,15 @@ export default class QonversionInternal implements QonversionApi { | |
| } | ||
|
|
||
| setEntitlementsUpdateListener(listener: EntitlementsUpdateListener) { | ||
| if (this.entitlementsUpdateListener == null) { | ||
| RNQonversion.onEntitlementsUpdated(this.entitlementsUpdatedEventHandler); | ||
| } | ||
|
|
||
| this.subscribeToEntitlementsEvent(); | ||
| this.entitlementsUpdateListener = listener; | ||
| } | ||
|
|
||
| setDeferredPurchasesListener(listener: DeferredPurchasesListener) { | ||
| this.subscribeToDeferredPurchaseEvent(); | ||
| this.deferredPurchasesListener = listener; | ||
| } | ||
|
|
||
| setPromoPurchasesDelegate(delegate: PromoPurchasesListener) { | ||
| if (!isIos()) { | ||
| return; | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it's purchase result, afair, not transaction.
Here and below
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done, renamed to
purchaseResultin Android and iOS bridges.