Skip to content

Commit 8cc73c5

Browse files
authored
Merge pull request #181 from mindbox-cloud/release/2.14.4
Release 2.14.4
2 parents 9802d73 + ca2827f commit 8cc73c5

13 files changed

Lines changed: 180 additions & 52 deletions

File tree

example/flutter_example/ios/Runner/AppDelegate.swift

Lines changed: 10 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,7 @@ import UserNotifications
1313
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
1414
) -> Bool {
1515

16-
UIApplication.shared.registerForRemoteNotifications()
17-
18-
// Calling the notification request method
19-
registerForRemoteNotifications()
16+
UNUserNotificationCenter.current().delegate = self
2017

2118
// tracking sources of referrals to the application via push notifications
2219
Mindbox.shared.track(.launch(launchOptions))
@@ -72,27 +69,15 @@ import UserNotifications
7269
override func userNotificationCenter(
7370
_ center: UNUserNotificationCenter,
7471
didReceive response: UNNotificationResponse,
75-
withCompletionHandler completionHandler: @escaping () -> Void) {
76-
// Send click to Mindbox
77-
Mindbox.shared.pushClicked(response: response)
78-
79-
// Sending the fact that the application was opened when switching to push notification
80-
Mindbox.shared.track(.push(response))
81-
completionHandler()
82-
super.userNotificationCenter(center, didReceive: response, withCompletionHandler: completionHandler)
83-
}
84-
85-
func registerForRemoteNotifications() {
86-
UNUserNotificationCenter.current().delegate = self
87-
DispatchQueue.main.async {
88-
UNUserNotificationCenter.current().requestAuthorization(options: [ .alert, .sound, .badge]) { granted, error in
89-
print("Permission granted: \(granted)")
90-
if let error = error {
91-
print("NotificationsRequestAuthorization failed with error: \(error.localizedDescription)")
92-
}
93-
Mindbox.shared.notificationsRequestAuthorization(granted: granted)
94-
}
95-
}
72+
withCompletionHandler completionHandler: @escaping () -> Void
73+
) {
74+
// Send click to Mindbox
75+
Mindbox.shared.pushClicked(response: response)
76+
77+
// Sending the fact that the application was opened when switching to push notification
78+
Mindbox.shared.track(.push(response))
79+
completionHandler()
80+
super.userNotificationCenter(center, didReceive: response, withCompletionHandler: completionHandler)
9681
}
9782

9883
func notifyFlutterNewData() {

example/flutter_example/lib/view_model/view_model.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@ class ViewModel {
6666
var status = await Permission.notification.status;
6767
if (!status.isGranted) {
6868
status = await Permission.notification.request();
69-
Mindbox.instance
70-
.updateNotificationPermissionStatus(granted: status.isGranted);
69+
print("Permission status: $status");
70+
Mindbox.instance.refreshNotificationPermissionStatus();
7171
}
7272
}
7373

mindbox/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## 2.14.4
2+
3+
* Upgrade native Android SDK dependency to v2.14.4.
4+
* Upgrade native iOS SDK dependency to v2.14.4.
5+
16
## 2.14.3
27

38
* Upgrade native Android SDK dependency to v2.14.4.

mindbox/pubspec.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: mindbox
22
description: Flutter Mindbox SDK. Plugin wrapper over of Mindbox iOS/Android SDK.
3-
version: 2.14.3
3+
version: 2.14.4
44
homepage: https://mindbox.cloud/
55
repository: https://github.com/mindbox-cloud/flutter-sdk/tree/master/mindbox
66
documentation: https://developers.mindbox.ru/docs/flutter-sdk-integration
@@ -20,9 +20,9 @@ flutter:
2020
dependencies:
2121
flutter:
2222
sdk: flutter
23-
mindbox_android: ^2.14.3
24-
mindbox_ios: ^2.14.3
25-
mindbox_platform_interface: ^2.14.3
23+
mindbox_android: ^2.14.4
24+
mindbox_ios: ^2.14.4
25+
mindbox_platform_interface: ^2.14.4
2626

2727
dev_dependencies:
2828
flutter_test:

mindbox_android/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 2.14.4
2+
3+
* Upgrade native Android SDK dependency to v2.14.4.
4+
15
## 2.14.3
26

37
* Upgrade native Android SDK dependency to v2.14.4.

mindbox_android/android/src/main/kotlin/cloud/mindbox/mindbox_android/MindboxAndroidPlugin.kt

Lines changed: 65 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,15 @@ import io.flutter.plugin.common.MethodChannel
1818
import io.flutter.plugin.common.MethodChannel.MethodCallHandler
1919
import io.flutter.plugin.common.MethodChannel.Result
2020
import io.flutter.plugin.common.PluginRegistry.NewIntentListener
21+
import java.util.concurrent.atomic.AtomicBoolean
22+
import java.util.concurrent.atomic.AtomicReference
2123

2224
/** MindboxAndroidPlugin */
2325
class MindboxAndroidPlugin : FlutterPlugin, MethodCallHandler, ActivityAware, NewIntentListener {
2426
private lateinit var context: Activity
2527
private var binding: ActivityPluginBinding? = null
26-
private var deviceUuidSubscription: String? = null
27-
private var tokenSubscription: String? = null
28+
private val deviceUuidSubscriptions = mutableListOf<String>()
29+
private val tokenSubscriptions = mutableListOf<String>()
2830
private lateinit var channel: MethodChannel
2931

3032
inner class InAppCallbackImpl : InAppCallback {
@@ -83,27 +85,76 @@ class MindboxAndroidPlugin : FlutterPlugin, MethodCallHandler, ActivityAware, Ne
8385
}
8486
}
8587
"getDeviceUUID" -> {
86-
if (deviceUuidSubscription != null) {
87-
Mindbox.disposeDeviceUuidSubscription(deviceUuidSubscription!!)
88+
val subscriptionRef = AtomicReference<String?>(null)
89+
val isResultSent = AtomicBoolean(false)
90+
91+
val subscriptionId = Mindbox.subscribeDeviceUuid { uuid ->
92+
if (isResultSent.compareAndSet(false, true)) {
93+
result.success(uuid)
94+
95+
val id = subscriptionRef.get()
96+
if (id != null) {
97+
Mindbox.disposeDeviceUuidSubscription(id)
98+
deviceUuidSubscriptions.remove(id)
99+
}
100+
}
88101
}
89-
deviceUuidSubscription = Mindbox.subscribeDeviceUuid { uuid ->
90-
result.success(uuid)
102+
103+
subscriptionRef.set(subscriptionId)
104+
deviceUuidSubscriptions.add(subscriptionId)
105+
106+
// If callback was synchronous, unsubscribe immediately
107+
if (isResultSent.get()) {
108+
Mindbox.disposeDeviceUuidSubscription(subscriptionId)
109+
deviceUuidSubscriptions.remove(subscriptionId)
91110
}
92111
}
93112
"getToken" -> {
94-
if (tokenSubscription != null) {
95-
Mindbox.disposePushTokenSubscription(tokenSubscription!!)
113+
val subscriptionRef = AtomicReference<String?>(null)
114+
val isResultSent = AtomicBoolean(false)
115+
116+
val subscriptionId = Mindbox.subscribePushToken { token ->
117+
if (isResultSent.compareAndSet(false, true)) {
118+
result.success(token)
119+
120+
val id = subscriptionRef.get()
121+
if (id != null) {
122+
Mindbox.disposePushTokenSubscription(id)
123+
tokenSubscriptions.remove(id)
124+
}
125+
}
96126
}
97-
tokenSubscription = Mindbox.subscribePushToken { token ->
98-
result.success(token)
127+
128+
subscriptionRef.set(subscriptionId)
129+
tokenSubscriptions.add(subscriptionId)
130+
131+
if (isResultSent.get()) {
132+
Mindbox.disposePushTokenSubscription(subscriptionId)
133+
tokenSubscriptions.remove(subscriptionId)
99134
}
100135
}
101136
"getTokens" -> {
102-
if (tokenSubscription != null) {
103-
Mindbox.disposePushTokenSubscription(tokenSubscription!!)
137+
val subscriptionRef = AtomicReference<String?>(null)
138+
val isResultSent = AtomicBoolean(false)
139+
140+
val subscriptionId = Mindbox.subscribePushTokens { token ->
141+
if (isResultSent.compareAndSet(false, true)) {
142+
result.success(token)
143+
144+
val id = subscriptionRef.get()
145+
if (id != null) {
146+
Mindbox.disposePushTokenSubscription(id)
147+
tokenSubscriptions.remove(id)
148+
}
149+
}
104150
}
105-
tokenSubscription = Mindbox.subscribePushTokens { token ->
106-
result.success(token)
151+
152+
subscriptionRef.set(subscriptionId)
153+
tokenSubscriptions.add(subscriptionId)
154+
155+
if (isResultSent.get()) {
156+
Mindbox.disposePushTokenSubscription(subscriptionId)
157+
tokenSubscriptions.remove(subscriptionId)
107158
}
108159
}
109160
"executeAsyncOperation" -> {

mindbox_android/pubspec.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: mindbox_android
22
description: The implementation of 'mindbox' plugin for the Android platform.
3-
version: 2.14.3
3+
version: 2.14.4
44
homepage: https://mindbox.cloud/
55
repository: https://github.com/mindbox-cloud/flutter-sdk/tree/master/mindbox_android
66

@@ -19,7 +19,7 @@ flutter:
1919
dependencies:
2020
flutter:
2121
sdk: flutter
22-
mindbox_platform_interface: ^2.14.3
22+
mindbox_platform_interface: ^2.14.4
2323

2424
dev_dependencies:
2525
flutter_test:

mindbox_ios/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 2.14.4
2+
3+
* Upgrade native iOS SDK dependency to v2.14.4.
4+
15
## 2.14.3
26

37
* Upgrade native iOS SDK dependency to v2.14.4.

mindbox_ios/pubspec.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: mindbox_ios
22
description: The implementation of 'mindbox' plugin for the iOS platform.
3-
version: 2.14.3
3+
version: 2.14.4
44
homepage: https://mindbox.cloud/
55
repository: https://github.com/mindbox-cloud/flutter-sdk/tree/master/mindbox_ios
66

@@ -18,7 +18,7 @@ flutter:
1818
dependencies:
1919
flutter:
2020
sdk: flutter
21-
mindbox_platform_interface: ^2.14.3
21+
mindbox_platform_interface: ^2.14.4
2222

2323
dev_dependencies:
2424
flutter_test:

mindbox_platform_interface/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## 2.14.4
2+
3+
* Upgrade native Android SDK dependency to v2.14.4.
4+
* Upgrade native iOS SDK dependency to v2.14.4.
5+
16
## 2.14.3
27

38
* Upgrade native Android SDK dependency to v2.14.4.

0 commit comments

Comments
 (0)