Skip to content

Commit 0c155d7

Browse files
authored
Merge pull request #442 from qonversion/release/11.6.0
Release 11.6.0
2 parents 84ab925 + 435c2a1 commit 0c155d7

10 files changed

Lines changed: 67 additions & 5 deletions

File tree

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
## 11.6.0
2+
* // Update changelog here
3+
14
## 11.5.0
25
* // Update changelog here
36

android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,6 @@ android {
5151

5252
dependencies {
5353
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
54-
implementation "io.qonversion:sandwich:7.7.0"
54+
implementation "io.qonversion:sandwich:7.8.0"
5555
implementation 'com.google.code.gson:gson:2.9.0'
5656
}

android/src/main/kotlin/com/qonversion/flutter/sdk/qonversion_flutter_sdk/QonversionPlugin.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ class QonversionPlugin : MethodCallHandler, FlutterPlugin, ActivityAware {
2121
private var activity: Activity? = null
2222
private var channel: MethodChannel? = null
2323
private var updatedEntitlementsStreamHandler: BaseEventStreamHandler? = null
24+
private var deferredPurchaseStreamHandler: BaseEventStreamHandler? = null
2425
private var noCodesPlugin: NoCodesPlugin? = null
2526

2627
private val qonversionSandwich by lazy {
@@ -41,12 +42,18 @@ class QonversionPlugin : MethodCallHandler, FlutterPlugin, ActivityAware {
4142
val payload = Gson().toJson(entitlements)
4243
updatedEntitlementsStreamHandler?.eventSink?.success(payload)
4344
}
45+
46+
override fun onDeferredPurchaseCompleted(purchaseResult: BridgeData) {
47+
val payload = Gson().toJson(purchaseResult)
48+
deferredPurchaseStreamHandler?.eventSink?.success(payload)
49+
}
4450
}
4551

4652
companion object {
4753
private const val METHOD_CHANNEL = "qonversion_plugin"
4854
private const val EVENT_CHANNEL_PROMO_PURCHASES = "promo_purchases"
4955
private const val EVENT_CHANNEL_UPDATED_ENTITLEMENTS = "updated_entitlements"
56+
private const val EVENT_CHANNEL_DEFERRED_PURCHASE = "deferred_purchase"
5057
}
5158

5259
override fun onAttachedToEngine(binding: FlutterPlugin.FlutterPluginBinding) {
@@ -364,6 +371,11 @@ class QonversionPlugin : MethodCallHandler, FlutterPlugin, ActivityAware {
364371
updatedEntitlementsListener.register()
365372
this.updatedEntitlementsStreamHandler = updatedEntitlementsListener.eventStreamHandler
366373

374+
// Register deferred purchase events
375+
val deferredPurchaseListener = BaseListenerWrapper(messenger, EVENT_CHANNEL_DEFERRED_PURCHASE)
376+
deferredPurchaseListener.register()
377+
this.deferredPurchaseStreamHandler = deferredPurchaseListener.eventStreamHandler
378+
367379
// Register promo purchases events. Android SDK does not generate any promo purchases yet
368380
val promoPurchasesListener = BaseListenerWrapper(messenger, EVENT_CHANNEL_PROMO_PURCHASES)
369381
promoPurchasesListener.register()
@@ -373,6 +385,7 @@ class QonversionPlugin : MethodCallHandler, FlutterPlugin, ActivityAware {
373385
channel?.setMethodCallHandler(null)
374386
channel = null
375387
this.updatedEntitlementsStreamHandler = null
388+
this.deferredPurchaseStreamHandler = null
376389
this.noCodesPlugin = null
377390
this.application = null
378391
}

ios/Classes/SwiftQonversionPlugin.swift

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import QonversionSandwich
88

99
public class SwiftQonversionPlugin: NSObject, FlutterPlugin {
1010
var updatedEntitlementsStreamHandler: BaseEventStreamHandler?
11+
var deferredPurchaseStreamHandler: BaseEventStreamHandler?
1112
var promoPurchasesStreamHandler: BaseEventStreamHandler?
1213
var qonversionSandwich: QonversionSandwich?
1314
var noCodesPlugin: NoCodesPlugin?
@@ -27,6 +28,10 @@ public class SwiftQonversionPlugin: NSObject, FlutterPlugin {
2728
let updatedEntitlementsListener = FlutterListenerWrapper<BaseEventStreamHandler>(registrar, postfix: "updated_entitlements")
2829
updatedEntitlementsListener.register() { instance.updatedEntitlementsStreamHandler = $0 }
2930

31+
// Register deferred purchase events
32+
let deferredPurchaseListener = FlutterListenerWrapper<BaseEventStreamHandler>(registrar, postfix: "deferred_purchase")
33+
deferredPurchaseListener.register() { instance.deferredPurchaseStreamHandler = $0 }
34+
3035
// Register promo purchases events
3136
let promoPurchasesListener = FlutterListenerWrapper<BaseEventStreamHandler>(registrar, postfix: "promo_purchases")
3237
promoPurchasesListener.register() { instance.promoPurchasesStreamHandler = $0 }
@@ -462,6 +467,15 @@ extension SwiftQonversionPlugin: QonversionEventListener {
462467
}
463468
}
464469

470+
public func qonversionDidCompleteDeferredPurchase(_ purchaseResult: [String : Any]) {
471+
guard let jsonData = purchaseResult.toJson() else {
472+
return
473+
}
474+
DispatchQueue.main.async {
475+
self.deferredPurchaseStreamHandler?.eventSink?(jsonData)
476+
}
477+
}
478+
465479
public func shouldPurchasePromoProduct(with productId: String) {
466480
DispatchQueue.main.async {
467481
self.promoPurchasesStreamHandler?.eventSink?(productId)

ios/qonversion_flutter.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ Pod::Spec.new do |s|
1616
s.source_files = 'Classes/**/*'
1717
s.dependency 'Flutter'
1818
s.platform = :ios, '13.0'
19-
s.dependency "QonversionSandwich", "7.7.0"
19+
s.dependency "QonversionSandwich", "7.8.0"
2020

2121
# Flutter.framework does not contain a i386 slice. Only x86_64 simulators are supported.
2222
s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'VALID_ARCHS[sdk=iphonesimulator*]' => 'x86_64' }

lib/src/internal/qonversion_internal.dart

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,16 @@ import 'package:qonversion_flutter/src/internal/utils/string.dart';
1111
import 'constants.dart';
1212

1313
class QonversionInternal implements Qonversion {
14-
static const String sdkVersion = "11.5.0";
14+
static const String sdkVersion = "11.6.0";
1515

1616
final MethodChannel _channel = MethodChannel('qonversion_plugin');
1717

1818
final _updatedEntitlementsEventChannel =
1919
EventChannel('qonversion_flutter_updated_entitlements');
2020

21+
final _deferredPurchaseEventChannel =
22+
EventChannel('qonversion_flutter_deferred_purchase');
23+
2124
final _promoPurchasesEventChannel =
2225
EventChannel('qonversion_flutter_promo_purchases');
2326

@@ -55,6 +58,16 @@ class QonversionInternal implements Qonversion {
5558
.map((key, value) => MapEntry(key, QEntitlement.fromJson(value)));
5659
});
5760

61+
@override
62+
Stream<QPurchaseResult> get deferredPurchaseStream =>
63+
_deferredPurchaseEventChannel
64+
.receiveBroadcastStream()
65+
.cast<String>()
66+
.map((event) {
67+
final Map<String, dynamic> decodedEvent = jsonDecode(event);
68+
return QPurchaseResult.fromJson(decodedEvent);
69+
});
70+
5871
@override
5972
Stream<String> get promoPurchasesStream =>
6073
_promoPurchasesEventChannel.receiveBroadcastStream().cast<String>();

lib/src/qonversion.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ abstract class Qonversion {
3939
/// For example, when pending purchases like SCA, Ask to buy, etc., happen.
4040
Stream<Map<String, QEntitlement>> get updatedEntitlementsStream;
4141

42+
/// Yields an event each time a deferred purchase completes.
43+
/// For example, when pending purchases like SCA, Ask to Buy, etc., are approved.
44+
/// Provides the full purchase result with entitlements and store transaction details.
45+
Stream<QPurchaseResult> get deferredPurchaseStream;
46+
4247
/// Yields an event each time a promo transaction happens on iOS.
4348
/// Returns App Store product ID
4449
Stream<String> get promoPurchasesStream;

macos/Classes/SwiftQonversionPlugin.swift

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import QonversionSandwich
88

99
public class SwiftQonversionPlugin: NSObject, FlutterPlugin {
1010
var updatedEntitlementsStreamHandler: BaseEventStreamHandler?
11+
var deferredPurchaseStreamHandler: BaseEventStreamHandler?
1112
var qonversionSandwich: QonversionSandwich?
1213

1314
public static func register(with registrar: FlutterPluginRegistrar) {
@@ -25,6 +26,10 @@ public class SwiftQonversionPlugin: NSObject, FlutterPlugin {
2526
let updatedEntitlementsListener = FlutterListenerWrapper<BaseEventStreamHandler>(registrar, postfix: "updated_entitlements")
2627
updatedEntitlementsListener.register() { instance.updatedEntitlementsStreamHandler = $0 }
2728

29+
// Register deferred purchase events
30+
let deferredPurchaseListener = FlutterListenerWrapper<BaseEventStreamHandler>(registrar, postfix: "deferred_purchase")
31+
deferredPurchaseListener.register() { instance.deferredPurchaseStreamHandler = $0 }
32+
2833
// Register sandwich
2934
let sandwichInstance = QonversionSandwich.init(qonversionEventListener: instance)
3035
instance.qonversionSandwich = sandwichInstance
@@ -387,6 +392,15 @@ extension SwiftQonversionPlugin: QonversionEventListener {
387392
}
388393
}
389394

395+
public func qonversionDidCompleteDeferredPurchase(_ purchaseResult: [String : Any]) {
396+
guard let jsonData = purchaseResult.toJson() else {
397+
return
398+
}
399+
DispatchQueue.main.async {
400+
self.deferredPurchaseStreamHandler?.eventSink?(jsonData)
401+
}
402+
}
403+
390404
public func shouldPurchasePromoProduct(with productId: String) {
391405
// Promo purchases are not supported on MacOS.
392406
}

macos/qonversion_flutter.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ Pod::Spec.new do |s|
1616
s.source_files = 'Classes/**/*'
1717
s.dependency 'FlutterMacOS'
1818
s.platform = :osx, '10.12'
19-
s.dependency "QonversionSandwich", "7.7.0"
19+
s.dependency "QonversionSandwich", "7.8.0"
2020

2121
s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' }
2222
s.swift_version = '5.0'

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: qonversion_flutter
22
description: Flutter plugin to implement in-app subscriptions and purchases. Validate user receipts and manage cross-platform access to paid content on your app. Android & iOS.
3-
version: 11.5.0
3+
version: 11.6.0
44
homepage: 'https://qonversion.io'
55
repository: 'https://github.com/qonversion/flutter-sdk'
66

0 commit comments

Comments
 (0)