@@ -5,10 +5,11 @@ import io.flutter.plugin.common.BinaryMessenger
55import io.flutter.plugin.common.MethodChannel.Result
66import io.qonversion.sandwich.BridgeData
77import io.qonversion.sandwich.NoCodesEventListener
8+ import io.qonversion.sandwich.NoCodesPurchaseDelegateBridge
89import io.qonversion.sandwich.NoCodesSandwich
910import com.google.gson.Gson
1011
11- class NoCodesPlugin (private val messenger : BinaryMessenger , private val context : Context ) : NoCodesEventListener {
12+ class NoCodesPlugin (private val messenger : BinaryMessenger , private val context : Context ) : NoCodesEventListener, NoCodesPurchaseDelegateBridge {
1213 private var noCodesSandwich: NoCodesSandwich ? = null
1314 private val gson = Gson ()
1415
@@ -19,6 +20,10 @@ class NoCodesPlugin(private val messenger: BinaryMessenger, private val context:
1920 private var actionFailedEventStreamHandler: BaseEventStreamHandler ? = null
2021 private var actionFinishedEventStreamHandler: BaseEventStreamHandler ? = null
2122 private var screenFailedToLoadEventStreamHandler: BaseEventStreamHandler ? = null
23+
24+ // Purchase delegate event stream handlers
25+ private var purchaseEventStreamHandler: BaseEventStreamHandler ? = null
26+ private var restoreEventStreamHandler: BaseEventStreamHandler ? = null
2227
2328 companion object {
2429 private const val SCREEN_SHOWN_EVENT_CHANNEL = " nocodes_screen_shown"
@@ -27,6 +32,8 @@ class NoCodesPlugin(private val messenger: BinaryMessenger, private val context:
2732 private const val ACTION_FAILED_EVENT_CHANNEL = " nocodes_action_failed"
2833 private const val ACTION_FINISHED_EVENT_CHANNEL = " nocodes_action_finished"
2934 private const val SCREEN_FAILED_TO_LOAD_EVENT_CHANNEL = " nocodes_screen_failed_to_load"
35+ private const val PURCHASE_EVENT_CHANNEL = " nocodes_purchase"
36+ private const val RESTORE_EVENT_CHANNEL = " nocodes_restore"
3037 }
3138
3239 init {
@@ -58,20 +65,30 @@ class NoCodesPlugin(private val messenger: BinaryMessenger, private val context:
5865 val screenFailedToLoadListener = BaseListenerWrapper (messenger, SCREEN_FAILED_TO_LOAD_EVENT_CHANNEL )
5966 screenFailedToLoadListener.register()
6067 this .screenFailedToLoadEventStreamHandler = screenFailedToLoadListener.eventStreamHandler
68+
69+ // Register purchase delegate event channels
70+ val purchaseListener = BaseListenerWrapper (messenger, PURCHASE_EVENT_CHANNEL )
71+ purchaseListener.register()
72+ this .purchaseEventStreamHandler = purchaseListener.eventStreamHandler
73+
74+ val restoreListener = BaseListenerWrapper (messenger, RESTORE_EVENT_CHANNEL )
75+ restoreListener.register()
76+ this .restoreEventStreamHandler = restoreListener.eventStreamHandler
6177 }
6278
6379 fun initializeNoCodes (args : Map <String , Any >, result : Result ) {
6480 val projectKey = args[" projectKey" ] as ? String ? : return result.noNecessaryDataError()
6581 val version = args[" version" ] as ? String ? : return result.noNecessaryDataError()
6682 val source = args[" source" ] as ? String ? : return result.noNecessaryDataError()
83+ val locale = args[" locale" ] as ? String
6784
6885 if (projectKey.isNotEmpty()) {
6986 // Initialize NoCodes Sandwich
7087 noCodesSandwich = NoCodesSandwich ()
7188
7289 noCodesSandwich?.storeSdkInfo(context, source, version)
7390
74- noCodesSandwich?.initialize(context, projectKey)
91+ noCodesSandwich?.initialize(context, projectKey, null , null , null , locale )
7592 noCodesSandwich?.setDelegate(this )
7693 result.success(null )
7794 } else {
@@ -102,6 +119,38 @@ class NoCodesPlugin(private val messenger: BinaryMessenger, private val context:
102119 result.success(null )
103120 }
104121
122+ fun setLocale (locale : String? , result : Result ) {
123+ noCodesSandwich?.setLocale(locale)
124+ result.success(null )
125+ }
126+
127+ // MARK: - Purchase Delegate Methods
128+
129+ fun setPurchaseDelegate (result : Result ) {
130+ noCodesSandwich?.setPurchaseDelegate(this )
131+ result.success(null )
132+ }
133+
134+ fun delegatedPurchaseCompleted (result : Result ) {
135+ noCodesSandwich?.delegatedPurchaseCompleted()
136+ result.success(null )
137+ }
138+
139+ fun delegatedPurchaseFailed (errorMessage : String? , result : Result ) {
140+ noCodesSandwich?.delegatedPurchaseFailed(errorMessage ? : " Unknown error" )
141+ result.success(null )
142+ }
143+
144+ fun delegatedRestoreCompleted (result : Result ) {
145+ noCodesSandwich?.delegatedRestoreCompleted()
146+ result.success(null )
147+ }
148+
149+ fun delegatedRestoreFailed (errorMessage : String? , result : Result ) {
150+ noCodesSandwich?.delegatedRestoreFailed(errorMessage ? : " Unknown error" )
151+ result.success(null )
152+ }
153+
105154 // NoCodesEventListener implementation
106155 override fun onNoCodesEvent (event : NoCodesEventListener .Event , payload : BridgeData ? ) {
107156 val eventData = mapOf (" payload" to (payload ? : emptyMap<String , Any >()))
@@ -130,4 +179,14 @@ class NoCodesPlugin(private val messenger: BinaryMessenger, private val context:
130179 }
131180 }
132181 }
133- }
182+
183+ // NoCodesPurchaseDelegateBridge implementation
184+ override fun purchase (product : BridgeData ) {
185+ val jsonString = gson.toJson(product)
186+ purchaseEventStreamHandler?.eventSink?.success(jsonString)
187+ }
188+
189+ override fun restore () {
190+ restoreEventStreamHandler?.eventSink?.success(" restore" )
191+ }
192+ }
0 commit comments