From 2b7cd3af3cb37453e53affb3f0df593e6b5ba977 Mon Sep 17 00:00:00 2001 From: Frank Schmitt Date: Fri, 1 Dec 2023 14:15:49 -0800 Subject: [PATCH 01/10] Add publish workflow --- .github/workflows/publish.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 .github/workflows/publish.yml diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..d2525de --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,12 @@ +name: Publish to pub.dev + +on: workflow_dispatch +# push: +# tags: +# - 'v[0-9]+.[0-9]+.[0-9]+*' + +jobs: + publish: + permissions: + id-token: write # Required for authentication using OIDC + uses: dart-lang/setup-dart/.github/workflows/publish.yml@v1 \ No newline at end of file From b394b7c6bc037a05a5c5ed6e4949aa8f6ee408f6 Mon Sep 17 00:00:00 2001 From: Poornima Nagarajan Date: Mon, 15 Apr 2024 15:30:26 -0700 Subject: [PATCH 02/10] Add multi user support, Android rich content, iOS Rich image and multiuser --- android/build.gradle | 2 +- .../ApptentiveFlutterPlugin.kt | 66 +++++++++++++++++++ example/android/app/build.gradle | 4 +- example/android/build.gradle | 2 +- example/ios/Flutter/AppFrameworkInfo.plist | 2 +- example/ios/Podfile | 2 +- example/ios/Runner.xcodeproj/project.pbxproj | 3 +- .../xcshareddata/xcschemes/Runner.xcscheme | 2 +- example/lib/main.dart | 4 +- ios/Classes/ApptentiveFlutterPlugin.swift | 24 +++++++ ios/apptentive_flutter.podspec | 2 +- lib/apptentive_flutter.dart | 30 +++++++++ pubspec.yaml | 2 +- 13 files changed, 133 insertions(+), 12 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index e3e5b59..be8e223 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -37,6 +37,6 @@ android { } dependencies { - implementation 'com.apptentive:apptentive-kit-android:6.5.0' + implementation 'com.apptentive:apptentive-kit-android:6.7.0' testImplementation 'junit:junit:4.13.2' } diff --git a/android/src/main/kotlin/com/apptentive/apptentive_flutter/ApptentiveFlutterPlugin.kt b/android/src/main/kotlin/com/apptentive/apptentive_flutter/ApptentiveFlutterPlugin.kt index 46caac2..11c5a9f 100644 --- a/android/src/main/kotlin/com/apptentive/apptentive_flutter/ApptentiveFlutterPlugin.kt +++ b/android/src/main/kotlin/com/apptentive/apptentive_flutter/ApptentiveFlutterPlugin.kt @@ -39,6 +39,15 @@ class ApptentiveFlutterPlugin : FlutterPlugin, MethodCallHandler, ActivityAware } } + private val authenticationFailedListener = object : AuthenticationFailedListener { + override fun onAuthenticationFailed(reason: AuthenticationFailedReason) { + Log.e(LogTag("Flutter"), "Authentication failed: $reason") + activity?.runOnUiThread { + channel.invokeMethod("onAuthenticationFailed", mapOf("errorMessage" to reason.toString())) + } + } + } + //region lifecycle methods // When plugin is attached, set and connect method channel @@ -110,6 +119,10 @@ class ApptentiveFlutterPlugin : FlutterPlugin, MethodCallHandler, ActivityAware "sendAttachmentText" -> sendAttachmentText(call, result) "isSDKRegistered" -> isSDKRegistered(result) "handleRequestPushPermissions" -> { /* Only iOS. */ } + "login" -> login(call, result) + "setAuthenticationFailedListener" -> setAuthenticationFailedListener(result) + "updateToken" -> updateToken(call, result) + "logout" -> logout(result) else -> result.notImplemented() } } @@ -374,6 +387,59 @@ class ApptentiveFlutterPlugin : FlutterPlugin, MethodCallHandler, ActivityAware } } + private fun login(call: MethodCall, result: Result) { + val token: String? = call.argument("token") + if (token == null) { + result.error(ERROR_CODE, "Failed to login: Token is null.", null) + return + } + try { + Apptentive.login(token) { loginResult -> + when (loginResult) { + is LoginResult.Success -> result.success(true) + else -> result.error(ERROR_CODE, "Failed to login", null) + } + } + } catch (e: Exception) { + result.error(ERROR_CODE, "Failed to login.", e.toString()) + } + } + + private fun setAuthenticationFailedListener(result: Result) { + try { + Apptentive.setAuthenticationFailedListener(authenticationFailedListener) + } catch (e: Exception) { + result.error(ERROR_CODE, "Failed to set authentication failed listener.", e.toString()) + } + } + + private fun updateToken(call: MethodCall, result: Result) { + val token: String? = call.argument("token") + if (token == null) { + result.error(ERROR_CODE, "Failed to update token: Token is null.", null) + return + } + try { + Apptentive.updateToken(token) { loginResult -> + when (loginResult) { + is LoginResult.Success -> result.success(true) + else -> result.error(ERROR_CODE, "Failed to update token", null) + } + } + } catch (e: Exception) { + result.error(ERROR_CODE, "Failed to update token.", e.toString()) + } + } + + private fun logout(result: Result) { + try { + Apptentive.logout() + result.success(true) + } catch (e: Exception) { + result.error(ERROR_CODE, "Failed to logout.", e.toString()) + } + } + private fun messageObserver(notification: MessageCenterNotification?) { val notificationText = "Can Show Message Center: ${notification?.canShowMessageCenter}. " + diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index 15dc916..548e9b7 100644 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -26,13 +26,13 @@ apply plugin: 'com.android.application' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 31 + compileSdkVersion 33 defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.apptentive.apptentive_flutter_example" minSdkVersion 21 - targetSdkVersion 31 + targetSdkVersion 33 versionCode flutterVersionCode.toInteger() versionName flutterVersionName multiDexEnabled true diff --git a/example/android/build.gradle b/example/android/build.gradle index 1209a05..ef41fa7 100644 --- a/example/android/build.gradle +++ b/example/android/build.gradle @@ -25,6 +25,6 @@ subprojects { project.evaluationDependsOn(':app') } -task clean(type: Delete) { +tasks.register("clean", Delete) { delete rootProject.buildDir } diff --git a/example/ios/Flutter/AppFrameworkInfo.plist b/example/ios/Flutter/AppFrameworkInfo.plist index 9625e10..7c56964 100644 --- a/example/ios/Flutter/AppFrameworkInfo.plist +++ b/example/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/example/ios/Podfile b/example/ios/Podfile index ace1606..f990970 100644 --- a/example/ios/Podfile +++ b/example/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -platform :ios, '11.0' +platform :ios, '12.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/example/ios/Runner.xcodeproj/project.pbxproj b/example/ios/Runner.xcodeproj/project.pbxproj index b3e7bdc..0a7f89e 100644 --- a/example/ios/Runner.xcodeproj/project.pbxproj +++ b/example/ios/Runner.xcodeproj/project.pbxproj @@ -172,7 +172,7 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1300; + LastUpgradeCheck = 1510; ORGANIZATIONNAME = ""; TargetAttributes = { 97C146ED1CF9000F007C117D = { @@ -239,6 +239,7 @@ files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); name = "Thin Binary"; outputPaths = ( diff --git a/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index c87d15a..5e31d3d 100644 --- a/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ { final String apptentiveKey; final String apptentiveSignature; if (Platform.isAndroid) { - apptentiveKey = ""; - apptentiveSignature = ""; + apptentiveKey = "ANDROID-FOXFAX-d2c49794fc25"; + apptentiveSignature = "95943475cd8e40422d8574346ada1810"; } else if (Platform.isIOS) { apptentiveKey = ""; apptentiveSignature = ""; diff --git a/ios/Classes/ApptentiveFlutterPlugin.swift b/ios/Classes/ApptentiveFlutterPlugin.swift index dea4338..e2b96d0 100644 --- a/ios/Classes/ApptentiveFlutterPlugin.swift +++ b/ios/Classes/ApptentiveFlutterPlugin.swift @@ -35,6 +35,8 @@ public class ApptentiveFlutterPlugin: NSObject, FlutterApplicationLifeCycleDeleg case "setPushNotificationIntegration": handleSetPushNotificationIntegrationCall(call, result) case "registerListeners": handleRegisterListenersCall(call, result) case "sendAttachmentText": handleSendAttachmentTextCall(call, result) + case "login": handleLoginCall(call, result) + case "logout": handleLogoutCall(result) default: result(FlutterMethodNotImplemented) } } @@ -270,6 +272,28 @@ public class ApptentiveFlutterPlugin: NSObject, FlutterApplicationLifeCycleDeleg result(true) } + private func handleLoginCall(_ call: FlutterMethodCall, _ result: @escaping FlutterResult) { + guard let callArguments = call.arguments as? [String: String], let token = callArguments["token"] else { + return result(FlutterError.init(code: Self.errorCode, message: "Expected String for token.", details: nil)) + } + Apptentive.shared.logIn(with: token, + completion: { (completionResult) -> Void in + switch completionResult { + case .success: + result(true) + case .failure(let error): + result(FlutterError.init(code: Self.errorCode, message: "Apptentive SDK failed to login.", details: error.localizedDescription)) + } + }) + result(true) + } + + private func handleLogoutCall(_ result: @escaping FlutterResult) { + Apptentive.shared.logOut() + result(true) + } + + @objc func eventEngaged(notification: Notification) { guard let userInfo = notification.userInfo as? [String: String], let event = userInfo["eventType"] diff --git a/ios/apptentive_flutter.podspec b/ios/apptentive_flutter.podspec index 6e04498..5828549 100644 --- a/ios/apptentive_flutter.podspec +++ b/ios/apptentive_flutter.podspec @@ -12,7 +12,7 @@ Apptentive SDK for Flutter s.source_files = 'Classes/**/*' s.public_header_files = 'Classes/**/*.h' s.dependency 'Flutter' - s.dependency 'ApptentiveKit', '6.5.0' + s.dependency 'ApptentiveKit', '6.6' s.platform = :ios, '13.0' # Flutter.framework does not contain a i386 slice. diff --git a/lib/apptentive_flutter.dart b/lib/apptentive_flutter.dart index 69802ca..9c2bdb4 100644 --- a/lib/apptentive_flutter.dart +++ b/lib/apptentive_flutter.dart @@ -33,6 +33,7 @@ enum PushProvider { apptentive, amazon, parse, urban_airship } typedef SurveyFinishedCallback = void Function(bool completed); typedef MessageCenterUnreadCountChangedNotification = void Function(int count); typedef MessageSentNotification = void Function(String sentByUser); +typedef AuthenticationFailedNotification = void Function(String errorMessage); // Plugin class class ApptentiveFlutter { @@ -43,6 +44,7 @@ class ApptentiveFlutter { static SurveyFinishedCallback? surveyFinishedCallback; static MessageCenterUnreadCountChangedNotification? messageCenterUnreadCountChangedNotification; static MessageSentNotification? messageSentNotification; + static AuthenticationFailedNotification? authenticationFailedNotification; // Handle callbacks from Native static Future _nativeCallback(MethodCall methodCall) async { @@ -60,6 +62,10 @@ class ApptentiveFlutter { String sentByUser = methodCall.arguments["sentByUser"]; messageSentNotification?.call(sentByUser); break; + case 'onAuthenticationFailed': + String errorMessage = methodCall.arguments["errorMessage"]; + authenticationFailedNotification?.call(errorMessage); + break; default: throw MissingPluginException('notImplemented'); } @@ -198,6 +204,30 @@ class ApptentiveFlutter { return registered; } + static Future login({required String token}) async { + final bool successful = await _channel.invokeMethod('login', { + "token": token + }); + return successful; + } + + static Future logout() async { + final bool successful = await _channel.invokeMethod('logout', {}); + return successful; + } + + static Future updateToken({required String token}) async { + final bool successful = await _channel.invokeMethod('updateToken', { + "token": token + }); + return successful; + } + + static Future setAuthenticationFailedListener() async { + final bool successful = await _channel.invokeMethod('setAuthenticationFailedListener', {}); + return successful; + } + // Pack the Apptentive Configuration into a map object static Map _packConfiguration(ApptentiveConfiguration configuration) { return { diff --git a/pubspec.yaml b/pubspec.yaml index 545aeee..aaacbf0 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: apptentive_flutter description: Apptentive SDK for Flutter -version: 6.2.2 +version: 6.7.0 repository: https://github.com/apptentive/apptentive-flutter issue_tracker: https://github.com/apptentive/apptentive-flutter/issues documentation: https://learn.apptentive.com/knowledge-base/apptentive-sdk-flutter-plugin-guide/ From 3e5e3cda525c1ecd1be1cbf4e8a93c4a7606567d Mon Sep 17 00:00:00 2001 From: PoornimaApptentive <85186738+PoornimaApptentive@users.noreply.github.com> Date: Mon, 15 Apr 2024 15:34:13 -0700 Subject: [PATCH 03/10] Update main.dart --- example/lib/main.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/example/lib/main.dart b/example/lib/main.dart index b9cd3ab..e8354cc 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -46,8 +46,8 @@ class _MyAppState extends State { final String apptentiveKey; final String apptentiveSignature; if (Platform.isAndroid) { - apptentiveKey = "ANDROID-FOXFAX-d2c49794fc25"; - apptentiveSignature = "95943475cd8e40422d8574346ada1810"; + apptentiveKey = ""; + apptentiveSignature = ""; } else if (Platform.isIOS) { apptentiveKey = ""; apptentiveSignature = ""; From 610005d832ff8503f357ffb38a35527860df7636 Mon Sep 17 00:00:00 2001 From: Poornima Nagarajan Date: Mon, 15 Apr 2024 15:38:12 -0700 Subject: [PATCH 04/10] update ios platform to 13 --- example/ios/Flutter/AppFrameworkInfo.plist | 2 +- example/ios/Podfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/example/ios/Flutter/AppFrameworkInfo.plist b/example/ios/Flutter/AppFrameworkInfo.plist index 7c56964..1dc6cf7 100644 --- a/example/ios/Flutter/AppFrameworkInfo.plist +++ b/example/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 12.0 + 13.0 diff --git a/example/ios/Podfile b/example/ios/Podfile index f990970..f7b38a0 100644 --- a/example/ios/Podfile +++ b/example/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -platform :ios, '12.0' +platform :ios, '13.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' From 07152f9f160b550bd1a3a8b687b9ae05411228c4 Mon Sep 17 00:00:00 2001 From: Poornima Nagarajan Date: Wed, 17 Apr 2024 16:13:16 -0700 Subject: [PATCH 05/10] updated to latest ios v6.7.0 --- ios/apptentive_flutter.podspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ios/apptentive_flutter.podspec b/ios/apptentive_flutter.podspec index 5828549..0d1da88 100644 --- a/ios/apptentive_flutter.podspec +++ b/ios/apptentive_flutter.podspec @@ -12,7 +12,7 @@ Apptentive SDK for Flutter s.source_files = 'Classes/**/*' s.public_header_files = 'Classes/**/*.h' s.dependency 'Flutter' - s.dependency 'ApptentiveKit', '6.6' + s.dependency 'ApptentiveKit', '6.7.0' s.platform = :ios, '13.0' # Flutter.framework does not contain a i386 slice. From 3ee1252354509b50f487c29b6ca8df8a5e8344bf Mon Sep 17 00:00:00 2001 From: Frank Schmitt Date: Wed, 17 Apr 2024 16:44:07 -0700 Subject: [PATCH 06/10] Update iOS native dependency --- example/ios/Podfile | 2 +- example/ios/Runner.xcodeproj/project.pbxproj | 6 +++--- ios/apptentive_flutter.podspec | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/example/ios/Podfile b/example/ios/Podfile index f7b38a0..435b42f 100644 --- a/example/ios/Podfile +++ b/example/ios/Podfile @@ -37,7 +37,7 @@ post_install do |installer| flutter_additional_ios_build_settings(target) target.build_configurations.each do |config| config.build_settings['ENABLE_BITCODE'] = 'NO' - config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11' + config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13' config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = '' end end diff --git a/example/ios/Runner.xcodeproj/project.pbxproj b/example/ios/Runner.xcodeproj/project.pbxproj index 0a7f89e..82f6d48 100644 --- a/example/ios/Runner.xcodeproj/project.pbxproj +++ b/example/ios/Runner.xcodeproj/project.pbxproj @@ -364,7 +364,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -444,7 +444,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -494,7 +494,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; diff --git a/ios/apptentive_flutter.podspec b/ios/apptentive_flutter.podspec index 5828549..7d2978b 100644 --- a/ios/apptentive_flutter.podspec +++ b/ios/apptentive_flutter.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'apptentive_flutter' - s.version = "6.2.2" + s.version = "6.7.0" s.summary = 'Apptentive SDK for Flutter' s.description = <<-DESC Apptentive SDK for Flutter @@ -12,7 +12,7 @@ Apptentive SDK for Flutter s.source_files = 'Classes/**/*' s.public_header_files = 'Classes/**/*.h' s.dependency 'Flutter' - s.dependency 'ApptentiveKit', '6.6' + s.dependency 'ApptentiveKit', '6.7.0' s.platform = :ios, '13.0' # Flutter.framework does not contain a i386 slice. From 613f36c4d40e00fdc6f585b433c9184bdf9102b6 Mon Sep 17 00:00:00 2001 From: Frank Schmitt Date: Tue, 23 Apr 2024 11:35:16 -0700 Subject: [PATCH 07/10] Implement unread message count --- ios/Classes/ApptentiveFlutterPlugin.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ios/Classes/ApptentiveFlutterPlugin.swift b/ios/Classes/ApptentiveFlutterPlugin.swift index e2b96d0..e6e5aa7 100644 --- a/ios/Classes/ApptentiveFlutterPlugin.swift +++ b/ios/Classes/ApptentiveFlutterPlugin.swift @@ -143,7 +143,7 @@ public class ApptentiveFlutterPlugin: NSObject, FlutterApplicationLifeCycleDeleg // Get the number of unread messages in Message Center private func handleGetUnreadMessageCount(_ call: FlutterMethodCall, _ result: @escaping FlutterResult) { - // TODO + result(Apptentive.shared.unreadMessageCount) } // Set person name From 3a8db31b6de97d888de2b316ffbb91a3adfcf9a9 Mon Sep 17 00:00:00 2001 From: PoornimaApptentive Date: Wed, 24 Apr 2024 17:08:23 +0000 Subject: [PATCH 08/10] Update for 6.7.0 --- .scripts/changes.md | 8 ++------ CHANGELOG.md | 5 +++++ lib/apptentive_flutter.dart | 2 +- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/.scripts/changes.md b/.scripts/changes.md index 5829e0c..084ab76 100644 --- a/.scripts/changes.md +++ b/.scripts/changes.md @@ -1,6 +1,2 @@ -- Apptentive Android SDK: 6.5.0 -- Apptentive iOS SDK: 6.5.0 - -#### Bugs Fixed: - -- Fixed an issue where calling register multiple times would hang on Android builds +- Apptentive Android SDK: 6.7.0 +- Apptentive iOS SDK: 6.7.0 diff --git a/CHANGELOG.md b/CHANGELOG.md index b8b770d..42bd93d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +# 2024-04-24 - v6.7.0 + +- Apptentive Android SDK: 6.7.0 +- Apptentive iOS SDK: 6.7.0 + # 2023-11-17 - v6.2.2 - Apptentive Android SDK: 6.5.0 diff --git a/lib/apptentive_flutter.dart b/lib/apptentive_flutter.dart index 9c2bdb4..1f8b893 100644 --- a/lib/apptentive_flutter.dart +++ b/lib/apptentive_flutter.dart @@ -21,7 +21,7 @@ class ApptentiveConfiguration { this.shouldEncryptStorage = false, this.shouldSanitizeLogMessages = true, this.distributionName = "Flutter", - this.distributionVersion = "6.2.2", + this.distributionVersion = "6.7.0", this.ratingInteractionThrottleLength = 604800000, // 1 week this.customAppStoreURL }); From 12fed4ef8018f1d0291de251e5bb407021816e6f Mon Sep 17 00:00:00 2001 From: PoornimaApptentive <85186738+PoornimaApptentive@users.noreply.github.com> Date: Wed, 24 Apr 2024 10:11:59 -0700 Subject: [PATCH 09/10] Update CHANGELOG.md Updated change log with iOS bugfix --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 42bd93d..099bd75 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,10 @@ - Apptentive Android SDK: 6.7.0 - Apptentive iOS SDK: 6.7.0 +#### Bugs Fixed: + +- Added missing implementation of `handleGetUnreadMessageCount` for iOS + # 2023-11-17 - v6.2.2 - Apptentive Android SDK: 6.5.0 From 99a87b28244719ecf14121cdd73089b6bab4dc8f Mon Sep 17 00:00:00 2001 From: Frank Schmitt Date: Wed, 24 Apr 2024 10:18:37 -0700 Subject: [PATCH 10/10] Update changes.md with manual CHANGELOG edits --- .scripts/changes.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.scripts/changes.md b/.scripts/changes.md index 084ab76..21c6ede 100644 --- a/.scripts/changes.md +++ b/.scripts/changes.md @@ -1,2 +1,6 @@ - Apptentive Android SDK: 6.7.0 - Apptentive iOS SDK: 6.7.0 + +#### Bugs Fixed: + +- Added missing implementation of `handleGetUnreadMessageCount` for iOS