Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 11.1.1
* Fixed bug when No-Codes screen on iOS was closing after the user canceled the purchase flow
* Small MacOS support fixes

## 11.1.0
* No-Codes can now be used with your [custom purchase system](https://documentation.qonversion.io/docs/using-no-codes-with-custom-purchases-handling), even if you use Qonversion in Analytics mode,
* You can now provide a custom locale to No-Codes to override the system one,
Expand Down
2 changes: 1 addition & 1 deletion android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,6 @@ android {

dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation "io.qonversion:sandwich:7.3.0"
implementation "io.qonversion:sandwich:7.3.1"
implementation 'com.google.code.gson:gson:2.9.0'
}
2 changes: 1 addition & 1 deletion ios/qonversion_flutter.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Pod::Spec.new do |s|
s.source_files = 'Classes/**/*'
s.dependency 'Flutter'
s.platform = :ios, '13.0'
s.dependency "QonversionSandwich", "7.3.0"
s.dependency "QonversionSandwich", "7.3.1"

# Flutter.framework does not contain a i386 slice. Only x86_64 simulators are supported.
s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'VALID_ARCHS[sdk=iphonesimulator*]' => 'x86_64' }
Expand Down
2 changes: 1 addition & 1 deletion lib/src/internal/qonversion_internal.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import 'package:qonversion_flutter/src/internal/utils/string.dart';
import 'constants.dart';

class QonversionInternal implements Qonversion {
static const String sdkVersion = "11.1.0";
static const String sdkVersion = "11.1.1";

final MethodChannel _channel = MethodChannel('qonversion_plugin');

Expand Down
45 changes: 34 additions & 11 deletions macos/Classes/SwiftQonversionPlugin.swift
Original file line number Diff line number Diff line change
Expand Up @@ -30,18 +30,18 @@ public class SwiftQonversionPlugin: NSObject, FlutterPlugin {
instance.qonversionSandwich = sandwichInstance
}

public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
@MainActor public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {

// MARK: - Calls without arguments

switch (call.method) {
case "syncHistoricalData":
qonversionSandwich?.syncHistoricalData()
return result(nil)
qonversionSandwich?.syncHistoricalData()
return result(nil)

case "syncStoreKit2Purchases":
qonversionSandwich?.syncStoreKit2Purchases()
return result(nil)
qonversionSandwich?.syncStoreKit2Purchases()
return result(nil)

case "products":
return products(result)
Expand All @@ -62,19 +62,22 @@ public class SwiftQonversionPlugin: NSObject, FlutterPlugin {
case "logout":
qonversionSandwich?.logout()
return result(nil)

case "isFallbackFileAccessible":
return isFallbackFileAccessible(result)

case "userInfo":
return userInfo(result)

case "userProperties":
return userProperties(result)

case "isFallbackFileAccessible":
return isFallbackFileAccessible(result)

case "remoteConfigList":
return remoteConfigList(result)

case "collectAppleSearchAdsAttribution":
return collectAppleSearchAdsAttribution(result)

default:
break
}
Expand All @@ -95,6 +98,9 @@ public class SwiftQonversionPlugin: NSObject, FlutterPlugin {
case "purchase":
return purchase(args, result)

case "purchaseWithResult":
return purchaseWithResult(args, result)

case "remoteConfig":
return remoteConfig(args["contextKey"] as? String, result)

Expand All @@ -118,10 +124,10 @@ public class SwiftQonversionPlugin: NSObject, FlutterPlugin {

case "identify":
return identify(args["userId"] as? String, result)

case "attachUserToExperiment":
return attachUserToExperiment(args, result)

case "detachUserFromExperiment":
return detachUserFromExperiment(args, result)

Expand Down Expand Up @@ -171,7 +177,7 @@ public class SwiftQonversionPlugin: NSObject, FlutterPlugin {
return result(FlutterError.noNecessaryData)
}

qonversionSandwich?.getPromotionalOffer(productId, productDiscountId:discountId, completion:getDefaultCompletion(result))
qonversionSandwich?.getPromotionalOffer(productId, productDiscountId:discountId, completion:getJsonCompletion(result))
}

private func products(_ result: @escaping FlutterResult) {
Expand All @@ -190,6 +196,18 @@ public class SwiftQonversionPlugin: NSObject, FlutterPlugin {
qonversionSandwich?.purchase(productId, quantity:quantity, contextKeys:contextKeys, promoOffer:promoOfferData, completion:getJsonCompletion(result))
}

private func purchaseWithResult(_ args: [String: Any], _ result: @escaping FlutterResult) {
guard let productId = args["productId"] as? String else {
return result(FlutterError.noNecessaryData)
}

let contextKeys = args["contextKeys"] as? [String] ?? []
let quantity = args["quantity"] as? Int ?? 1
let promoOfferData = args["promoOffer"] as? [String: Any] ?? [:]

qonversionSandwich?.purchaseWithResult(productId, quantity:quantity, contextKeys:contextKeys, promoOffer:promoOfferData, completion:getJsonCompletion(result))
}

private func checkEntitlements(_ result: @escaping FlutterResult) {
qonversionSandwich?.checkEntitlements(getJsonCompletion(result))
}
Expand All @@ -206,6 +224,11 @@ public class SwiftQonversionPlugin: NSObject, FlutterPlugin {
qonversionSandwich?.isFallbackFileAccessible(completion: getJsonCompletion(result))
}

private func collectAppleSearchAdsAttribution(_ result: @escaping FlutterResult) {
qonversionSandwich?.collectAppleSearchAdsAttribution()
result(nil)
}

private func remoteConfigList(_ args: [String: Any], _ result: @escaping FlutterResult) {
guard let contextKeys = args["contextKeys"] as? [String] else {
return result(FlutterError.noNecessaryData)
Expand Down
2 changes: 1 addition & 1 deletion macos/qonversion_flutter.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Pod::Spec.new do |s|
s.source_files = 'Classes/**/*'
s.dependency 'FlutterMacOS'
s.platform = :osx, '10.12'
s.dependency "QonversionSandwich", "6.0.10"
s.dependency "QonversionSandwich", "7.3.1"

s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' }
s.swift_version = '5.0'
Expand Down
2 changes: 1 addition & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: qonversion_flutter
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.
version: 11.1.0
version: 11.1.1
homepage: 'https://qonversion.io'
repository: 'https://github.com/qonversion/flutter-sdk'

Expand Down