braze_plugin
This is the Braze plugin for Flutter. Effective marketing automation is an essential part of successfully scaling and managing your business.
22.0.0
198K downloads/mo
#852 most downloaded on pub.dev
braze-inc/braze-flutter-sdk
What this package is like to depend on
Last release 16 days ago
07 Aug 2026
Release timing varies
gaps range from 8 days to 4 months
Nearly every release is documented
notes for 68 of 68 stable releases
Nothing withdrawn
no release was ever pulled
8 years old
68 releases · first in 2019
11 releases in the last 12 months
see the full history below
Release timeline
68 releases · Feb 2019 to Aug 2026Releases
latest 60 of 68-
22.0.007 Aug 2026Release notes
Open source →22.0.0
Breaking
- Updates the native Android bridge from Braze Android SDK 42.3.1 to 43.0.0.
- Updates the native iOS bridge from Braze Swift SDK 17.0.0 to 18.0.0.
Release notes
Open source →Breaking
- Updates the native Android bridge from Braze Android SDK 42.3.1 to 43.0.0.
- Updates the native iOS bridge from Braze Swift SDK 17.0.0 to 18.0.0.
Release notes
Open source →Breaking
Appboy.javais nowBraze.kt. Kotlin clients will need to update their code to support the use of Kotlin properties on the Braze singleton where needed.Braze.registerPushToken()/Braze.getRegisteredPushToken()is nowBraze.setRegisteredPushToken()/Braze.getRegisteredPushToken(). If using Kotlin, use the propertyBraze.registeredPushToken.Braze.getDeviceIdis now justBraze.deviceIdfor Kotlin.Braze.enableMockNetworkAppboyRequestsAndDropEventsModeis nowBraze.enableMockNetworkRequestsAndDropEventsMode().Appboy.javahas been removed. For example, calls likeAppboy.getInstance()will need to beBraze.getInstance()moving forward.- Replaced
setCustomAppboyNotificationFactory()withsetCustomBrazeNotificationFactory() / customBrazeNotificationFactory. - Renamed
enableMockAppboyNetworkRequestsAndDropEventsModetoenableMockNetworkRequestsAndDropEventsMode.
- Moved
com.appboy.IBrazeEndpointProvidertocom.braze.IBrazeEndpointProvider. - Renamed
com.appboy.events.IEventSubscribertocom.braze.events.IEventSubscriber. - Removed
Appboy.registerAppboyPushMessages() / Appboy.getAppboyPushMessageRegistrationId(). Replaced withgetRegisteredPushToken() / setRegisteredPushToken(). - Replaced
IAppboyNotificationFactorywithIBrazeNotificationFactory.
Fixed
- Fixed an issue in
BrazePushReceiverwhere eager In-App Message test displays and Content Card serializations from push notifications wouldn't work unless notifications were enabled on the device. - Fixed an issue where devices between the API 19 up to API 29 would not perform automatic data syncs in some cases.
- Fixed an issue where carryover in-app messages wouldn't display on subsequent Views on new Activities.
- Fixed an issue where some long running In-App Message HTML WebViews would call View methods on non UI threads.
Added
- Added
IBraze.subscribeToPushNotificationEvents()to allow for subscriptions to push notification events without the use of aBroadcastReceiver.- Recommended to be placed in your
Application.onCreate().
- Recommended to be placed in your
Changed
- Changed
com.braze.models.outgoing.BrazeProperties.clone()to returnBrazeProperties?.
-
21.0.013 Jul 2026Release notes
Open source →Breaking
- Updates the native iOS bridge from Braze Swift SDK 16.0.0 to 17.0.0.
- With this update, the native
Braze.initandchangeUser(userId:)no longer block the calling thread. Refer to the full release notes for Swift SDK 17.0.0 for more details.
- With this update, the native
- Removes the following deprecated methods:
logCustomEventWithProperties(). UselogCustomEvent()instead.logPurchaseWithProperties(). UselogPurchase()instead.registerAndroidPushToken(). UseregisterPushToken()instead.getInstallTrackingId(). UsegetDeviceId()instead.setGoogleAdvertisingId(). UsesetAdTrackingEnabled()instead.
Fixed
- Fixes an iOS race where a Braze method called immediately after
initialize()was silently dropped because the native Braze instance had not been created yet. The instance is now created synchronously so calls made right afterinitialize()are applied to a valid instance. - The native
changeUser,enableSDK, anddisableSDKhandlers now return a completion result on both iOS and Android, so awaiting these method channel calls no longer hangs.
Release notes
Open source →Breaking
- Updates the native iOS bridge from Braze Swift SDK 16.0.0 to 17.0.0.
- With this update, the native
Braze.initandchangeUser(userId:)no longer block the calling thread. Refer to the full release notes for Swift SDK 17.0.0 for more details.
- With this update, the native
- Removes the following deprecated methods:
logCustomEventWithProperties(). UselogCustomEvent()instead.logPurchaseWithProperties(). UselogPurchase()instead.registerAndroidPushToken(). UseregisterPushToken()instead.getInstallTrackingId(). UsegetDeviceId()instead.setGoogleAdvertisingId(). UsesetAdTrackingEnabled()instead.
Fixed
- Fixes an iOS race where a Braze method called immediately after
initialize()was silently dropped because the native Braze instance had not been created yet. The instance is now created synchronously so calls made right afterinitialize()are applied to a valid instance. - The native
changeUser,enableSDK, anddisableSDKhandlers now return a completion result on both iOS and Android, so awaiting these method channel calls no longer hangs.
Release notes
Open source →Important
- This release includes support for Android 13 (Tiramisu / API 33).
Breaking
- Removed
IAppboy.logContentCardsDisplayed. This method was not part of the recommended Content Cards integration and can be safely removed.
Changed
- Changed target API for the SDK to 33.
- Updates the native iOS bridge from Braze Swift SDK 16.0.0 to 17.0.0.
-
20.0.001 Jul 2026Release notes
Open source →Breaking
- Updates the native iOS bridge from Braze Swift SDK 14.1.0 to 16.0.0.
- With this update, the underlying Content Cards list behind
getCachedContentCards(including removed, viewed, and clicked states) is updated immediately when changes occur. This now matches the iOS behavior with Android.
- With this update, the underlying Content Cards list behind
Added
- Updates the native Android bridge from Braze Android SDK 42.2.0 to 42.3.1.
- Fixed an issue where HTML In-App Messages displayed during an Activity transition could remain visible but not dismissable after carryover.
- Adds support for banner dismissals.
- Adds
stableKeyfield to theBrazeBannermodel. - Adds
onDismisscallback toBrazeBannerView, invoked when the banner for that placement is dismissed. - Adds
BrazePlugin.dismissBanner(placementId)to programmatically dismiss the banner for a given placement.
- Adds
Release notes
Open source →Breaking
- Updates the native iOS bridge from Braze Swift SDK 14.1.0 to 16.0.0.
- With this update, the underlying Content Cards list behind
getCachedContentCards(including removed, viewed, and clicked states) is updated immediately when changes occur. This now matches the iOS behavior with Android.
- With this update, the underlying Content Cards list behind
Added
- Updates the native Android bridge from Braze Android SDK 42.2.0 to 42.3.1.
- Fixed an issue where HTML In-App Messages displayed during an Activity transition could remain visible but not dismissable after carryover.
- Adds support for banner dismissals.
- Adds
stableKeyfield to theBrazeBannermodel. - Adds
onDismisscallback toBrazeBannerView, invoked when the banner for that placement is dismissed. - Adds
BrazePlugin.dismissBanner(placementId)to programmatically dismiss the banner for a given placement.
- Adds
Release notes
Open source →Breaking
- Changed
BrazeNotificationStyleFactoryto remove deprecated functions.- Removed
BrazeNotificationStyleFactory.getBigNotificationStyle(Context, Bundle, Bundle, NotificationCompat.Builder). UseBrazeNotificationStyleFactory.getNotificationStyle(NotificationCompat.Builder, BrazeNotificationPayload)instead. - Removed
BrazeNotificationStyleFactory.getBigTextNotificationStyle(BrazeConfigurationProvider, Bundle). UseBrazeNotificationStyleFactory.getBigTextNotificationStyle(BrazeNotificationPayload)instead. - Removed
BrazeNotificationStyleFactory.getStoryStyle(Context, Bundle, Bundle, NotificationCompat.Builder). UseBrazeNotificationStyleFactory.getStoryStyle(NotificationCompat.Builder, BrazeNotificationPayload)instead.
- Removed
- Changed
BrazeNotificationActionUtilsto remove deprecated functions.- Removed
BrazeNotificationActionUtils.addNotificationActions(Context, NotificationCompat.Builder, Bundle). UseBrazeNotificationActionUtils.addNotificationActions(NotificationCompat.Builder, BrazeNotificationPayload)instead. - Removed
BrazeNotificationActionUtils.addNotificationAction(Context, NotificationCompat.Builder, Bundle, Int). UseBrazeNotificationActionUtils.addNotificationAction(BrazeNotificationPayload.ActionButton)instead. - Removed
AppboyNotificationActionUtils. UseBrazeNotificationActionUtilsinstead.
- Removed
- Removed
AppboyHuaweiPushHandler. UseBrazeHuaweiPushHandlerinstead. - Removed
AppboyFirebaseMessagingService. UseBrazeFirebaseMessagingServiceinstead. - Removed
AppboyAdmReceiver. UseBrazeAmazonDeviceMessagingReceiverinstead. BrazeFirebaseMessagingService.handleBrazeRemoteMessage()andBrazeFirebaseMessagingService.isBrazePushNotification()now require non-null parameters.UriAction.channelis nowChannel.CONTENT_CARDfor actions that originate from a Content Card instead ofChannel.NEWS_FEED.
Fixed
- Fixed an issue that would prevent SDK Authentication errors from being retried.
Added
- Modified
BrazeProperties.addProperties()to allow adding nested properties viaJSONObjectorMap<String, *>. - Added support for Braze Action Deeplink Click Actions.
Changed
- Slideup messages now have a maximum width of 450dp. This can be adjusted by modifying
@dimen/com_braze_inappmessage_slideup_max_width. - Added
com.braze.Constantswith constants starting with "BRAZE_" that replace the corresponding "APPBOY_" constants incom.appboy.Constants. The "APPBOY_" constants are deprecated and will be removed in a future release.
- Updates the native iOS bridge from Braze Swift SDK 14.1.0 to 16.0.0.
-
19.0.014 May 2026Release notes
Open source →Breaking
- The minimum supported Dart version is
2.17.0. - SDK logging is now controlled on the Dart layer.
- Updates the native Android bridge from Braze Android SDK 41.1.1 to 42.2.0.
Fixed
- Fixes a crash on Android where
setBrazePluginIsReadycould throw aNullPointerExceptionwhen replaying pending push events containing null entries.- See #129.
Added
- Flutter-specific and native platform logs now print to the DevTools logging view.
- Logs use
dart:developer'slog()function under the nameBrazeFlutterSDK, making them visible in the Flutter DevTools Logging tab. - Adds
BrazeLogLevelwith three levels:BrazeLogLevel.debugBrazeLogLevel.infoBrazeLogLevel.error
- Adds
BrazePlugin.logLevelto filter out logs below a given level.- Accepts a
BrazeLogLevelor a rawdart:developerinteger. - Defaults to
BrazeLogLevel.info, which suppresses debug logs.
- Accepts a
- Adds
BrazePlugin.logger, an optional callback.- When set, it replaces the default
dart:developeroutput so you can route logs to your own logging infrastructure.
- When set, it replaces the default
- On Android:
- The plugin now configures the native
BrazeLoggerwhen the Flutter engine attaches. - Any log level or log callback set in your
Application.onCreatewill be overwritten. - Use
BrazePlugin.logLevelfrom Dart to control the log level instead.
- The plugin now configures the native
- On iOS:
- If your
AppDelegatealready sets a customconfiguration.logger.printclosure, the plugin will not forward native logs to Dart andBrazePlugin.logLevelwill only filter Dart-side logs. - Otherwise, any log level set in
configuration.logger.levelwill be overriden. BrazePlugin.logLevelwill only take effect afterBrazePlugin.initialize(apiKey, endpoint)is called and a new Braze instance is created.
- If your
- Logs use
- Updates the native iOS bridge from Braze Swift SDK 14.0.4 to 14.1.0.
Release notes
Open source →Breaking
- The minimum supported Dart version is
2.17.0. - SDK logging is now controlled on the Dart layer.
- Updates the native Android bridge from Braze Android SDK 41.1.1 to 42.2.0.
Fixed
- Fixes a crash on Android where
setBrazePluginIsReadycould throw aNullPointerExceptionwhen replaying pending push events containing null entries.- See #129.
Added
- Flutter-specific and native platform logs now print to the DevTools logging view.
- Logs use
dart:developer'slog()function under the nameBrazeFlutterSDK, making them visible in the Flutter DevTools Logging tab. - Adds
BrazeLogLevelwith three levels:BrazeLogLevel.debugBrazeLogLevel.infoBrazeLogLevel.error
- Adds
BrazePlugin.logLevelto filter out logs below a given level.- Accepts a
BrazeLogLevelor a rawdart:developerinteger. - Defaults to
BrazeLogLevel.info, which suppresses debug logs.
- Accepts a
- Adds
BrazePlugin.logger, an optional callback.- When set, it replaces the default
dart:developeroutput so you can route logs to your own logging infrastructure.
- When set, it replaces the default
- On Android:
- The plugin now configures the native
BrazeLoggerwhen the Flutter engine attaches. - Any log level or log callback set in your
Application.onCreatewill be overwritten. - Use
BrazePlugin.logLevelfrom Dart to control the log level instead.
- The plugin now configures the native
- On iOS:
- If your
AppDelegatealready sets a customconfiguration.logger.printclosure, the plugin will not forward native logs to Dart andBrazePlugin.logLevelwill only filter Dart-side logs. - Otherwise, any log level set in
configuration.logger.levelwill be overriden. BrazePlugin.logLevelwill only take effect afterBrazePlugin.initialize(apiKey, endpoint)is called and a new Braze instance is created.
- If your
- Logs use
- Updates the native iOS bridge from Braze Swift SDK 14.0.4 to 14.1.0.
Release notes
Open source →Important
- It is highly recommended to include the compiler flag
-Xjvm-default=allin your Gradle build options due to the new use of default arguments in the SDK. Without this flag, you may see a compiler warning about "Inheritance from an interface with '@JvmDefault' members". An example is included below:
android { kotlinOptions { freeCompilerArgs = ['-Xjvm-default=all'] jvmTarget = "1.8" } }⚠ Breaking
- Modified behavior of
BrazeProperties(JSONObject)whenDateis part of JSONObject.- Previously, Date objects in the JSONObject would be converted with the
Date.toString()(e.g. "Thu Jan 01 03:15:33 CST 1970"). - Date objects in the JSONObject are now converted to
BrazeDateFormat.LONG(e.g. "1970-01-01 09:15:33"). This behavior is consistent withBrazeProperties.addProperty(Date).
- Previously, Date objects in the JSONObject would be converted with the
- Converted
IInAppMessageto Kotlin and changed several methods to no longer allow for null inputs or return boolean statuses on field setters.IInAppMessage.setClickAction()is renamed tosetClickBehavior()and now returns void.MessageButton.setClickAction()is renamed tosetClickBehavior()and now returns void.InAppMessageImmersiveBase.setMessageButtons()no longer accepts null. Pass in an empty list to clear.
- Converted
Cardto Kotlin, so JVM signatures may have changed.- Removed
Card.isEqualToCard(). Please usecard.equals(otherCard)instead. - Removed
Card.isRead()andCard.setIsRead(). Please useCard.isIndicatorHighlighted(Kotlin) orCard.isIndicatorHighlighted()andCard.setIndicatorHighlighted()(Java).
- Removed
- Removed
com.appboy.AnimationUtils,com.appboy.ViewUtils,com.appboy.UriUtils,com.appboy.IAction,com.appboy.NewsfeedActionandcom.appboy.UriActionclasses. The Braze namespaced classes remain. BrazeDeeplinkHandler.createUriActionFromUrlString()andBrazeDeeplinkHandler.createUriActionFromUri()now require non-null values for uri/url and channel.AppboyNavigatorhas been removed in favor ofBrazeDeeplinkHandler.
- Removed
AppboyNotificationUtilsin favor ofBrazeNotificationUtils. - Removed
AppboyLifecycleCallbackListener. Please useBrazeActivityLifecycleCallbackListener.- Removed
BrazeLifecycleCallbackListener.setInAppMessagingRegistrationBlacklist()in favor ofBrazeLifecycleCallbackListener.setInAppMessagingRegistrationBlocklist(). RemovedBrazeLifecycleCallbackListener.setSessionHandlingBlacklist()in favor ofBrazeLifecycleCallbackListener.setSessionHandlingBlocklist().
- Removed
- Removed
AppboyContentCardsManager. Please useBrazeContentCardsManagerinstead. - Removed
AppboyEmptyContentCardsAdapter. Please useEmptyContentCardsAdapterinstead. - Removed
BrazeUser.setAvatarImageUrl(String).
Fixed
- Fixed the startup behavior of the SDK to not perform caller thread blocking operations when setting up SharedPreferences and other disk reading I/O.
- Fixed a potential issue where the default implementation of
Webview.onRenderProcessGone()could lead to app crashes. Thanks to @ankitsingh08 for finding the issue.
Changed
- Added
BrazeProperties(Map<String, *>)constructor. - Changed
Appboy.getConfiguredApiKey()to accept aBrazeConfigurationProviderinstead of aContextobject. - Deprecated
AppboyBootReceiver. Please useBrazeBootReceiverinstead. - Deprecated
APPBOY_WEBVIEW_URL_EXTRA. Please useBRAZE_WEBVIEW_URL_EXTRAinstead. - Changed the SDK to not wake the screens of
Configuration.UI_MODE_TYPE_TELEVISIONdevices when receiving push notifications.- These screen types will not be awoken even if
isPushWakeScreenForNotificationEnabled()is true and the permissionManifest.permission.WAKE_LOCKis granted. - Special thanks to @IanGClifton for https://github.com/braze-inc/braze-android-sdk/pull/213.
- These screen types will not be awoken even if
- The minimum supported Dart version is
-
18.0.103 Apr 2026Release notes
Open source →Fixed
Braze.registerPushToken()now explicitly enforces that the device token is a hex-encoded string for the iOS implementation.- This addresses previously reported issues of tokens being improperly converted.
Release notes
Open source →Fixed
Braze.registerPushToken()now explicitly enforces that the device token is a hex-encoded string for the iOS implementation.- This addresses previously reported issues of tokens being improperly converted.
Release notes
Open source →Fixed
- Fixed an issue introduced in 17.0.0 where some HTML In-App Message zip asset files containing hidden
__MACOSXfolders without a corresponding entry for that folder would cause the in-app message to fail to display.
-
18.0.019 Mar 2026Release notes
Open source →Breaking
- Streamlines the iOS integration process to not require writing native code to forward content cards, banners, feature flags, in-app messages, or push notification updates from the native SDK.
- The SDK will now automatically set up these subscriptions when the Braze instance is created.
- This matches the existing behavior on Android.
- To migrate, remove any manual calls to
braze.contentCards.subscribeToUpdates(),braze.banners.subscribeToUpdates(),braze.notifications.subscribeToUpdates,braze.featureFlags.subscribeToUpdatesandbraze.inAppMessagePresenterin theAppDelegate. - By default, in-app messages will be presented. To override this, set a custom in-app message presenter using the
postInitializationclosure inBrazePlugin.configure(_:postInitialization:).
Added
- Adds support for delayed SDK initialization. See full setup guide here.
- Adds
initialize(apiKey, endpoint)method to create the Braze instance at runtime with the stored configuration. This method can be called multiple times to re-initialize the SDK with a different API key and endpoint mid-session. - To enable delayed initialization on Android, add
com_braze_enable_delayed_initializationset totruein yourbraze.xml.
- Adds
- For iOS integrations only, adds
BrazePlugin.configure(_:postInitialization:)to store configurations in yourAppDelegatefor later use by the new Dartinitialize(apiKey, endpoint)method.BrazePlugin.initBraze()is deprecated. Use theconfigure+ Dartinitializepattern instead.
Fixed
- Updates the native iOS bridge from Braze Swift SDK 14.0.1 to 14.0.4.
Release notes
Open source →Breaking
- Streamlines the iOS integration process to not require writing native code to forward content cards, banners, feature flags, in-app messages, or push notification updates from the native SDK.
- The SDK will now automatically set up these subscriptions when the Braze instance is created.
- This matches the existing behavior on Android.
- To migrate, remove any manual calls to
braze.contentCards.subscribeToUpdates(),braze.banners.subscribeToUpdates(),braze.notifications.subscribeToUpdates,braze.featureFlags.subscribeToUpdatesandbraze.inAppMessagePresenterin theAppDelegate. - By default, in-app messages will be presented. To override this, set a custom in-app message presenter using the
postInitializationclosure inBrazePlugin.configure(_:postInitialization:).
Added
- Adds support for delayed SDK initialization. See full setup guide here.
- Adds
initialize(apiKey, endpoint)method to create the Braze instance at runtime with the stored configuration. This method can be called multiple times to re-initialize the SDK with a different API key and endpoint mid-session. - To enable delayed initialization on Android, add
com_braze_enable_delayed_initializationset totruein yourbraze.xml.
- Adds
- For iOS integrations only, adds
BrazePlugin.configure(_:postInitialization:)to store configurations in yourAppDelegatefor later use by the new Dartinitialize(apiKey, endpoint)method.BrazePlugin.initBraze()is deprecated. Use theconfigure+ Dartinitializepattern instead.
Fixed
- Updates the native iOS bridge from Braze Swift SDK 14.0.1 to 14.0.4.
Release notes
Open source →Important
- It is highly recommended to include the compiler flag
-Xjvm-default=allin your Gradle build options due to the new use of default arguments in the SDK. Without this flag, you may see a compiler warning about "Inheritance from an interface with '@JvmDefault' members". An example is included below:
android { kotlinOptions { freeCompilerArgs = ['-Xjvm-default=all'] jvmTarget = "1.8" } }This version has a known issue with HTML In-App Message which was fixed in v18.0.1
⚠ Breaking
- Removed
AppboyLruImageLoaderin favor ofDefaultBrazeImageLoader.com.appboy.lrucache.AppboyLruImageLoader->com.braze.images.DefaultBrazeImageLoader.com.appboy.Appboy.getAppboyImageLoader->com.appboy.Appboy.getImageLoader.com.appboy.Appboy.setAppboyImageLoader->com.appboy.Appboy.setImageLoader.
- Removed
IAppboyEndpointProviderin favor ofIBrazeEndpointProvider.- If using
Braze.setAppboyEndpointProvider()please useBraze.setEndpointProvider().
- If using
Fixed
- Fixed an issue introduced in 15.0.0 where Full in-app messages on tablets may have had an incorrect background color.
Added
- Added the ability to change SDK authentication signature with
Braze.changeUser()when the current user id and a new signature is passed in.- Previously,
Braze.changeUser()would not change the SDK authentication signature if the current user id was used.
- Previously,
Changed
InAppMessageCloseris deprecated.- Use
BrazeInAppMessageManager.hideCurrentlyDisplayingInAppMessage()to hide currently displayed in-app messages. - Use
IInAppMessage.setAnimateOut()to set whether your in-app message should animate on close. - New version of
IInAppMessageManagerListener.onInAppMessageClicked()andIInAppMessageManagerListener.onInAppMessageButtonClicked()that don't useInAppMessageCloserhave been added.- If you override the deprecated functions that use
InAppMessageCloser, those will be called. - If you override the new functions and don't override the deprecated functions, the new functions will be called.
- If you override the deprecated functions that use
- Use
- Deprecated
ContentCardsUpdatedEvent.getLastUpdatedInSecondsFromEpoch.- Use
getTimestampSeconds()(Java) ortimestampSeconds(Kotlin).
- Use
- Streamlines the iOS integration process to not require writing native code to forward content cards, banners, feature flags, in-app messages, or push notification updates from the native SDK.
-
17.1.002 Mar 2026Release notes
Open source →Added
- Adds support to import the Flutter iOS package via Swift Package Manager (SPM).
- The Braze Flutter SDK still supports CocoaPods integrations at this time.
- For instructions on how to migrate from CocoaPods to SPM, reference Flutter's official docs.
- The minimum Flutter version of the Braze SDK remains unchanged, but integration with SPM requires Flutter version
3.24.0or higher.
- The Flutter iOS sample app has been updated to use SPM to import the Braze SDK.
- This also removes all relevant files to the CocoaPods integration for the sample app.
- Updates the native Android bridge from Braze Android SDK 41.0.0 to 41.1.1.
Release notes
Open source →Added
- Adds support to import the Flutter iOS package via Swift Package Manager (SPM).
- The Braze Flutter SDK still supports CocoaPods integrations at this time.
- For instructions on how to migrate from CocoaPods to SPM, reference Flutter's official docs.
- The minimum Flutter version of the Braze SDK remains unchanged, but integration with SPM requires Flutter version
3.24.0or higher.
- The Flutter iOS sample app has been updated to use SPM to import the Braze SDK.
- This also removes all relevant files to the CocoaPods integration for the sample app.
- Updates the native Android bridge from Braze Android SDK 41.0.0 to 41.1.1.
- Adds support to import the Flutter iOS package via Swift Package Manager (SPM).
-
17.0.010 Feb 2026Release notes
Open source →Breaking
- Updates the native iOS bridge from Braze Swift SDK 13.3.0 to 14.0.1.
- Updates the native Android bridge from Braze Android SDK 40.0.0 to 41.0.0.
Added
- Adds support for logging banner analytics to Braze using
BrazeBannerinstances.- See
logBannerClicked(placementId:buttonId:)andlogBannerImpression(placementId:)on theBrazePlugininterface.
- See
Release notes
Open source →Breaking
- Updates the native iOS bridge from Braze Swift SDK 13.3.0 to 14.0.1.
- Updates the native Android bridge from Braze Android SDK 40.0.0 to 41.0.0.
Added
- Adds support for logging banner analytics to Braze using
BrazeBannerinstances.- See
logBannerClicked(placementId:buttonId:)andlogBannerImpression(placementId:)on theBrazePlugininterface.
- See
Release notes
Open source →:warning: This version has a known issue with HTML In-App Message which was fixed in v18.0.1
⚠ Breaking
BrazeLogger.setLogLevel()replaced with direct property setterBrazeLogger.logLevelfor Kotlin.- Removed
AppboyLogger, com.appboy.IntentUtils, com.appboy.StringUtilsclass. The Braze namespaced classes remain. - Removed
com_braze_locale_api_key_mapas a configuration option andBrazeConfig.setLocaleToApiMapping(). If you need to change your API key based on locale, please useBrazeConfigat runtime instead.
Added
- Added
Braze.isDisabled()to determine whether the SDK is disabled. - Added
Braze.addSdkMetadata()to allow self reporting of SDK Metadata fields via theBrazeSdkMetadataenum.- Fields may also be added via a
string-arrayto yourbraze.xmlwith the keycom_braze_sdk_metadata. The allowed items are the same as the keys found in theBrazeSdkMetadataenum. For example when using Branch:
<string-array name="com_braze_sdk_metadata"> <item>BRANCH</item> </string-array>- Fields are additive across all reporting methods.
- Fields may also be added via a
-
16.0.023 Oct 2025Release notes
Open source →Breaking
- Updates the native Android bridge from Braze Android SDK 39.0.0 to 40.0.0.
Fixed
- Banner views will no longer call
setStateextraneously if the view component is not mounted.- Previously, this could cause an exception to occur if the Banner tried to update its height while the view was not mounted within the widget hierarchy.
- Fixes UI flickering and display issues with
BrazeBannerViewwhen navigating between screens on Android
Added
- Updates the native iOS bridge from Braze Swift SDK 13.2.0 to 13.3.0.
Release notes
Open source →Breaking
- Updates the native Android bridge from Braze Android SDK 39.0.0 to 40.0.0.
Fixed
- Banner views will no longer call
setStateextraneously if the view component is not mounted.- Previously, this could cause an exception to occur if the Banner tried to update its height while the view was not mounted within the widget hierarchy.
- Fixes UI flickering and display issues with
BrazeBannerViewwhen navigating between screens on Android
Added
- Updates the native iOS bridge from Braze Swift SDK 13.2.0 to 13.3.0.
Release notes
Open source →⚠ Breaking
- Removed
AppboyConfigurationProviderin favor ofBrazeConfigurationProvider.- Any deprecated usages, such as in the
IBrazeNotificationFactoryhave also been removed.
- Any deprecated usages, such as in the
Fixed
- Fixed an issue introduced in 13.1.0 where session start location updates would fail to update on pre API 30 devices.
- Fixed an issue introduced in 13.1.0 where geofence update events would fail to update properly.
Added
- Added the ability to namespace all
braze.xmlconfigurations to be able to usebrazein place ofappboy. The Braze namespaced configuration keys will take precedence over theappboykeys.- For example,
com_appboy_api_keycan be replaced withcom_braze_api_key. - Be sure to look for and update any API keys in your build variants as the
com_braze_api_keyfrom your default variant might take precedence unexpectedly. - All
com_appboy_*configuration keys in XML will be removed in a future release so it is advised to migrate these configuration keys to theircom_braze_*counterparts.
- For example,
Changed
- Changed target API for the SDK to 31.
-
15.1.024 Sep 2025Release notes
Open source →Added
- Adds support for Banner properties via new public methods for
BrazeBanner.banner.getStringProperty(key:)for accessingStringproperties.banner.getNumberProperty(key:)for accessingnumproperties.banner.getTimestampProperty(key:)for accessingintUnix UTC millisecond timestamp properties.banner.getBooleanProperty(key:)for accessingboolproperties.banner.getImageProperty(key:)for accessing image URL properties asStrings.banner.getJSONProperty(key:)for accessing JSON properties asMap<String, dynamic>.
Release notes
Open source →Added
- Adds support for Banner properties via new public methods for
BrazeBanner.banner.getStringProperty(key:)for accessingStringproperties.banner.getNumberProperty(key:)for accessingnumproperties.banner.getTimestampProperty(key:)for accessingintUnix UTC millisecond timestamp properties.banner.getBooleanProperty(key:)for accessingboolproperties.banner.getImageProperty(key:)for accessing image URL properties asStrings.banner.getJSONProperty(key:)for accessing JSON properties asMap<String, dynamic>.
- Adds support for Banner properties via new public methods for
-
15.0.015 Sep 2025Release notes
Open source →Breaking
- Updates the native Android bridge from Braze Android SDK 36.0.0 to 39.0.0.
- Updates the native iOS bridge from Braze Swift SDK 12.0.0 to 13.2.0.
- This includes Xcode 26 support.
Added
- Adds the ability to unset the following user attributes by setting these values to
null:- First name
- Last name
- Phone number
- Gender
- Language
- Home city
- Country
Release notes
Open source →Important
- It is highly recommended to do extensive QA after updating to this release, especially for clients doing any amount of Content Card or In-App Message customizations.
⚠ Breaking
- All Content Cards layout/drawables/colors/dimens identifiers containing
com_appboy_content_cards/com_appboy_content_cardwere replaced withcom_braze_content_cards/com_braze_content_cardrespectively.- Content Card drawables
icon_pinned, icon_read, icon_unreadare nowcom_braze_content_card_icon_pinned, com_braze_content_card_icon_read, com_braze_content_card_icon_unread.
- Content Card drawables
- All In-App Message layout/drawables/colors/dimens identifiers containing
com_appboy_inappmessage/com_appboy_in_app_messagereplaced withcom_braze_inappmessage. - All styles under namespace
Appboy.*moved toBraze.*.- Any
Appboy.*style overrides must be migrated toBraze.*as there is no backwards compatibility. - For example, a style override for
Appboy.Cards.ImageSwitchermust be renamed toBraze.Cards.ImageSwitcher.
- Any
- Several classes/interfaces have been moved to a Braze namespace/package.
- In-App Messages
- In-App Message classes under
com.appboy.models.*moved tocom.braze.models.inappmessage - Class
com.appboy.ui.inappmessage.InAppMessageCloser->com.braze.ui.inappmessage.InAppMessageCloser - Enum
com.appboy.ui.inappmessage.InAppMessageOperation->com.braze.ui.inappmessage.InAppMessageOperation - Enums in package
com.appboy.enums.inappmessage.*moved tocom.braze.enums.inappmessage
- In-App Message classes under
- Content Cards
- Interface
IContentCardsUpdateHandlermoved tocom.braze.ui.contentcards.handlers.IContentCardsUpdateHandler - Interface
IContentCardsViewBindingHandlermoved tocom.braze.ui.contentcards.handlers.IContentCardsViewBindingHandler - Interface
AppboyContentCardsActionListenermoved tocom.braze.ui.contentcards.listeners.DefaultContentCardsActionListener - Classes in package
com.appboy.ui.contentcards.view.*moved tocom.braze.ui.contentcards.view.*- This is the package containing all Content Card default views.
- Class
com.appboy.events.ContentCardsUpdatedEvent->com.braze.events.ContentCardsUpdatedEvent
- Interface
- Miscellaneous
- Class
AppboyBaseFragmentActivitymoved tocom.braze.ui.activities.BrazeBaseFragmentActivity
- Class
- In-App Messages
- Removed deprecated
IInAppMessageManagerListener#onInAppMessageReceivedfromIInAppMessageManagerListener. - Removed
AppboyUserin favor ofBrazeUser.- Note that for Kotlin consumers,
Appboy.currentUser?andBraze.currentUser?are valid due to the removal of generics on theBraze.getCurrentUser()method.
- Note that for Kotlin consumers,
Added
- Added support for Conversational Push.
- Added the ability for custom broadcast receivers to not require the host package name as a prefix when declaring intent filters in your app manifest.
<action android:name="${applicationId}.intent.APPBOY_PUSH_RECEIVED" />should be replaced with<action android:name="com.braze.push.intent.NOTIFICATION_RECEIVED" /><action android:name="${applicationId}.intent.APPBOY_NOTIFICATION_OPENED" />should be replaced with<action android:name="com.braze.push.intent.NOTIFICATION_OPENED" /><action android:name="${applicationId}.intent.APPBOY_PUSH_DELETED" />should be replaced with<action android:name="com.braze.push.intent.NOTIFICATION_DELETED" />- The
appboyintents have been deprecated but are still available. They will be removed in a future release so migrating early is highly recommended. - Both the
appboyandbrazeintents are sent for backwards compatibility so only one set should be registered at a time.
- Added
BrazeUser.addToSubscriptionGroup()andBrazeUser.removeFromSubscriptionGroup()to add or remove a user from an email or SMS subscription group.- Added
brazeBridge.getUser().addToSubscriptionGroup()andbrazeBridge.getUser().removeFromSubscriptionGroup()to the javascript interface for HTML In-App Messages.
- Added
Changed
- Several classes in the android-sdk-ui artifact have been renamed to the Braze namespace/package. Whenever possible, the original classes are still available. However, they will be removed in a future release so migrating early is highly recommended.
- Classes in package
com.appboy.push.*moved tocom.braze.push.* - Classes in package
com.appboy.ui.inappmessage.viewsmoved tocom.braze.ui.inappmessage.views - Classes in package
com.appboy.ui.inappmessage.listenersmoved tocom.braze.ui.inappmessage.listeners - Interfaces in
com.appboy.ui.inappmessage.*moved tocom.braze.ui.inappmessage.* - Class
com.appboy.AppboyFirebaseMessagingService->com.braze.push.BrazeFirebaseMessagingService - Class
com.appboy.AppboyAdmReceiver->com.braze.push.BrazeAmazonDeviceMessagingReceiver - Class
com.appboy.ui.AppboyContentCardsFragment->com.braze.ui.contentcards.ContentCardsFragment - Class
com.appboy.ui.activities.AppboyContentCardsActivity->com.braze.ui.activities.ContentCardsActivity - Class
com.appboy.ui.AppboyWebViewActivity->com.braze.ui.BrazeWebViewActivity - Class
com.appboy.ui.inappmessage.AppboyInAppMessageManager->com.braze.ui.inappmessage.BrazeInAppMessageManager - Class
com.appboy.ui.inappmessage.DefaultInAppMessageViewWrapper->com.braze.ui.inappmessage.DefaultInAppMessageViewWrapper - Class
com.appboy.AppboyLifecycleCallbackListener->com.braze.BrazeActivityLifecycleCallbackListener
- Classes in package
- Changed the
ContentCardsFragmentandBrazeInAppMessageManagerto clear their respective caches of messages afterwipeData()is called.
-
14.0.318 Jul 2025Release notes
Open source →Fixed
- Fixes missing
Brazesymbol error inBrazeBannerViewFactorywhen using dynamically-linked frameworks.
- Fixes missing
-
14.0.216 Jun 2025Release notes
Open source →[!IMPORTANT] This release reverts the increase to the minimum Android SDK version of the Braze Android SDK from API 21 to API 25 introduced in 34.0.0. This allows the SDK to once again be compiled into apps supporting as early as API 21. However, we are not reintroducing formal support for < API 25. Read more here.
Fixed
- Fixes a display issue introduced in
14.0.1when changing a Banner dynamically. - The
minSdkenforced by the Flutter Android layer is now downgraded from25to21, matching theminSdkin the Android native layer.
- Fixes a display issue introduced in
-
14.0.105 Jun 2025Release notes
Open source →Fixed
- Fixes a crash on iOS when the app is force-closed while a Banner is visible on the screen.
- Note: This fix may cause display issues when trying to change Banners dynamically. This will be addressed in a future patch.
Release notes
Open source →Fixed
- Fixed an issue with
BrazePropertiesnot being kept via proguard rules. - Fixed an issue on TV integrations where in app messages wouldn't properly be given focus when visible.
Added
- Added close icon highlighting for TV integrations when selecting the close button in In App Messages.
- Fixes a crash on iOS when the app is force-closed while a Banner is visible on the screen.
-
14.0.021 May 2025Release notes
Open source →⚠️ Important: This version has a known issue related to Banners. Upgrade to version
14.0.2instead.Breaking
- Updates the native Android bridge from Braze Android SDK 35.0.0 to 36.0.0.
- Updates the native iOS bridge from Braze Swift SDK 11.9.0 to 12.0.0.
Fixed
- Fixes an issue on iOS where
getUserId()would not return any value if the user was anonymous.- This API will now return
nullif the user is anonymous.
- This API will now return
- Fixes the iOS implementation of
setDateOfBirthto correctly report dates using the Gregorian calendar instead of the user's device calendar.- Previously, the SDK would re-format the input date components with the device's calendar settings if they were non-Gregorian.
- Fixes the in-app message data model to reflect the correct types under the following circumstances:
- HTML in-app messages will now reflect their correct type
html, instead of the defaultslideuptype. - Full in-app messages will now reflect their correct type
full, instead of incorrectly being marked ashtml_full. HTML full messages will still continue to work as expected.
- HTML in-app messages will now reflect their correct type
Release notes
Open source →⚠ Breaking
- Interface
IInAppMessageViewWrapperFactorychanged to useBrazeConfigurationProvider. - Interface
IAppboyImageLoader/IBrazeImageLoaderchanged to usecom.braze.enums.BrazeViewBounds. - Class
com.appboy.configuration.AppboyConfigis nowcom.braze.configuration.BrazeConfig. The original class has been removed and old usages should be updated. - Class
com.appboy.enums.AppboyViewBoundsis nowcom.braze.enums.BrazeViewBounds. The original class has been removed and old usages should be updated. - Removed
com.appboy.push.AppboyNotificationUtils#bundleOptString. Braze.logPurchase()andBraze.logEvent()now impose a 50KB limit on event properties. If the supplied properties are too large, the event is not logged.- See
BrazeProperties.isInvalid().
- See
- HTML In-App Messages rendered via the default
AppboyHtmlViewFactorynow require the device to be in touch mode to display.- See
getIsTouchModeRequiredForHtmlInAppMessages()in the #added section for configuration on disabling this behavior.
- See
- For Kotlin consumers,
Appboy.currentUser?calls must be migrated toBraze.getCurrentUser<BrazeUser>()due to updated generics resolution.
Changed
- Several classes in the base artifact have been renamed to the Braze namespace/packages. Whenever possible, the original classes are still available. However, they will be removed in a future release so migrating early is highly recommended.
com.appboy.Appboy->com.braze.Brazecom.appboy.configuration.AppboyConfig->com.braze.configuration.BrazeConfigcom.braze.AppboyUser->com.braze.BrazeUsercom.appboy.lrucache.AppboyLruImageLoader->com.braze.images.DefaultBrazeImageLoadercom.appboy.configuration.AppboyConfigurationProvider->com.braze.configuration.BrazeConfigurationProvidercom.appboy.models.outgoing.AppboyProperties->com.braze.models.outgoing.BrazePropertiescom.appboy.support.AppboyImageUtils->com.braze.support.BrazeImageUtilscom.appboy.support.AppboyFileUtils->com.braze.support.BrazeFileUtils
- Changed the behavior of In-App Message Accessibility Exclusive mode to save and reset the accessibility flags of views after display.
- Changed the
AppboyInAppMessageWebViewClientListenerto use an Activity context when following a deeplink inIInAppMessageWebViewClientListener.onOtherUrlAction. - Deprecated
AppboyInAppMessageHtmlBaseView.APPBOY_BRIDGE_PREFIX.
Added
- Added
Braze.registerPushToken()andBraze.getRegisteredPushToken().- Note that these methods are the functional equivalents of
Appboy.registerAppboyPushMessages()andAppboy.getAppboyPushMessageRegistrationId().
- Note that these methods are the functional equivalents of
- Exposed
brazeBridgewhich replacesappboyBridgeto be used as the javascript interface for HTML In-App Messages.appboyBridgeis deprecated and will be removed in a future version of the SDK. - Added
AppboyInAppMessageHtmlBaseView.BRAZE_BRIDGE_PREFIX. - Added the ability to configure whether
View#isInTouchMode()is required to show HTML In-App Messages viaBrazeConfig.setIsTouchModeRequiredForHtmlInAppMessages().- Can also be configured via boolean
com_braze_require_touch_mode_for_html_in_app_messagesin yourbraze.xml. - Defaults to true.
- Can also be configured via boolean
- Added support for new SDK Authentication feature.
Fixed
- Fixed an issue with
setIsInAppMessageAccessibilityExclusiveModeEnabled()not being respected if set via runtime configuration. Setting this value via XML was unaffected. - Fixed an issue with the SDK repeatedly failing to initialize when not properly setting a Braze API key.
-
13.0.025 Mar 2025Release notes
Open source →⚠️ Important: This version has a known issue related to Banners. Upgrade to version
14.0.2instead.Breaking
- Updates the native Android bridge from Braze Android SDK 33.0.0 to 35.0.0.
- The minimum required Android SDK version is 25. See more details here.
Added
- Adds the
BrazeBannerViewwidget to display a Banner Card directly in Dart.- To use this feature, insert the widget
BrazeBannerView(placementId:)into your Dart view hierarchy with the relevantplacementId. - Reference our integration in our sample app.
- To use this feature, insert the widget
- Adds support for the Braze Banner Cards product and APIs to utilize them.
BrazePlugin.requestBannersRefresh(List<String> placementIds)- to request a refresh of the banners associated with the provided placement IDs. This must be called at least once to set the list of banners to retrieve. On iOS only, failures will be logged if unsuccessful.BrazePlugin.getBanner(String placementId)- to get a banner with the provided placement ID if available in cache, otherwise returns null.BrazePlugin.subscribeToBanners(void Function(List<BrazeBanner>) onEvent)- to subscribe to the stream of banners and call [onEvent] when it receives the list of banners.
- Updates the native iOS bridge from Braze Swift SDK 11.6.1 to 11.9.0.
Release notes
Open source →⚠ Breaking
- Moved all In-App Message buttons from
Buttontocom.appboy.ui.inappmessage.views.InAppMessageButton.- This ensures that the
MaterialComponentsViewInflaterdoes not interfere with standard In-App Message display when using aMaterialComponentstheme. - Apps extending a
Materialtheme should test to ensure their In-App Messages appear as expected.
- This ensures that the
- Moved
com.appboy.ui.inappmessage.AppboyInAppMessageImageViewtocom.appboy.ui.inappmessage.views.InAppMessageImageView. - Removed all getter methods from
AppboyConfig. Access to the underlying data is now directly possible via the variables of the object, e.g.appboyConfig.getApiKey()is nowappboyConfig.mApiKey.
Added
- Added
getEmptyCardsAdapter(), getContentCardUpdateRunnable(), getNetworkUnavailableRunnable()to protected methods inAppboyContentCardsFragmentfor easier customizability. - Changed the max content line length to 2 lines for Inline Image Push.
- This style can be found via
"Appboy.Push.InlineImage.TextArea.TitleContent.ContentText"
- This style can be found via
Fixed
- Changed the
AppboyContentCardsFragment.ContentCardsUpdateRunnableto determine network unavailability and feed emptiness based on the filtered list of cards and not the original input list of cards. - Fixed an issue with IAM display where a deleted local image would result in a failed image display.
- Updates the native Android bridge from Braze Android SDK 33.0.0 to 35.0.0.
-
12.1.125 Feb 2025Release notes
Open source →Added
- Updates the native iOS bridge from Braze Swift SDK 11.6.0 to 11.6.1.
-
12.1.004 Feb 2025Release notes
Open source →Added
- Updates the native iOS bridge from Braze Swift SDK 11.3.0 to 11.6.0.
-
12.0.020 Nov 2024Release notes
Open source →Breaking
- Updates the native iOS bridge from Braze Swift SDK 10.3.1 to 11.3.0.
- Updates the native Android bridge from Braze Android SDK 32.1.0 to 33.1.0.
Release notes
Open source →⚠ Breaking
- Added
getIntentFlagsto theIAppboyNavigatorinterface to more easily allow for customizing Activity launch behavior.- A default implementation is available below:
@Override public int getIntentFlags(IntentFlagPurpose intentFlagPurpose) { return new AppboyNavigator().getIntentFlags(intentFlagPurpose); } - Renamed
firebase_messaging_service_automatically_register_on_new_tokentocom_appboy_firebase_messaging_service_automatically_register_on_new_tokeninappboy.xmlconfiguration.
Fixed
- Fixed an issue with the default image loader not properly setting image bitmaps on API 23 and below devices.
- Fixed an issue where the
AppboyInAppMessageManager.ensureSubscribedToInAppMessageEvents()method wouldn't properly resubscribe after disabling and re-enabling the SDK.
Changed
- Changed Push Stories in
AppboyNotificationStyleFactoryto useBrazeNotificationPayload.
-
11.1.026 Sep 2024Release notes
Open source →Added
- Updates the native iOS bridge from Braze Swift SDK 10.2.0 to 10.3.1.
-
11.0.005 Sep 2024Release notes
Open source →Breaking
- Updates the native Android bridge from Braze Android SDK 30.4.0 to 32.1.0.
- Changes the behavior of
wipeData()on Android to retain external subscriptions (likesubscribeToContentCards()) after being called.
- Changes the behavior of
- Updates the native iOS bridge from Braze Swift SDK 9.0.0 to 10.2.0.
Added
- Adds support for 3 new Feature Flag property types:
featureFlag.getTimestampProperty(String key)for accessing Int Unix UTC millisecond timestamps asint?s.featureFlag.getJSONProperty(String key)for accessing JSON objects asMap<String, dynamic>?types.featureFlag.getImageProperty(String key)for accessing image URLs asString?s.
- Adds the
getUserId()method to get the ID of the current user. This method will returnnullif the current user is anonymous. - Adds the
hideCurrentInAppMessage()method, which dismisses the currently displayed in-app message.
Fixed
- Fixes an issue on Android where push notification stream subscriptions were not receiving events after clicking on a push notification when the app was in a terminated state.
- Thank you @Neelansh-ns for the contribution!
Release notes
Open source →⚠ Breaking
- Changed the behavior of new beta HTML In-App Messages with dashboard preview support (i.e. those with
MessageType.HTMLand notMessageType.HTML_FULL) to not automatically log analytics clicks on url follows inIInAppMessageWebViewClientListener.- Body click analytics will no longer automatically be collected. To continue to receive body click analytics, you must log body clicks explicitly from your message via Javascript using
appboyBridge.logClick().
- Body click analytics will no longer automatically be collected. To continue to receive body click analytics, you must log body clicks explicitly from your message via Javascript using
IContentCardsUpdateHandlerandIContentCardsViewBindingHandlerinterfaces now extendandroid.os.Parcelable.- This ensures that these handlers properly transition across instance state saves and reads.
- Examples on how to extend
Parcelablecan be found inDefaultContentCardsUpdateHandlerandDefaultContentCardsViewBindingHandler.
- Renamed
AppboyFcmReceivertoBrazePushReceiver.
Added
- Added
AppboyInAppMessageManager.getIsCurrentlyDisplayingInAppMessage(). - Added ability to configure whether the
AppboyFirebaseMessagingServicewill automatically register tokens in itsonNewTokenmethod.- Defaults to whether FCM automatic registration is enabled. Note that FCM automatic registration is a separate configuration option and is not enabled by default.
- Configured by changing the boolean value for
firebase_messaging_service_automatically_register_on_new_tokenin yourappboy.xml, or at runtime by settingAppboyConfig.setIsFirebaseMessagingServiceOnNewTokenRegistrationEnabled(). - Note that the Sender ID used to configure tokens received in
onNewToken()is based on the app's default Firebase Project rather than the explicitly configured Sender ID on the Braze SDK. These should generally be the same value.
Changed
- Deprecated
AppboyLifecycleCallbackListener.setInAppMessagingRegistrationBlacklist()in favor ofAppboyLifecycleCallbackListener.setInAppMessagingRegistrationBlocklist(). - Deprecated
AppboyConfig.Builder.setDeviceObjectWhitelist()in favor ofAppboyConfig.Builder.setDeviceObjectAllowlist(). - Deprecated
AppboyConfig.Builder.setDeviceObjectWhitelistEnabled()in favor ofAppboyConfig.Builder.setDeviceObjectAllowlistEnabled().
Fixed
- Fixed an issue where the
AppboyContentCardsFragmentwould not transition a customIContentCardsUpdateHandlerorIContentCardsViewBindingHandlerimplementation inonSaveInstanceState(), which caused the defaults for both to be used instead. - Fixed an issue with deeplink handling where push action button deeplinks would only work once throughout the lifetime of the application.
- Updates the native Android bridge from Braze Android SDK 30.4.0 to 32.1.0.
-
10.1.003 May 2024Release notes
Open source →Added
- Updated the Android Gradle plugin from
8.0.2to8.1.1. - Updated the native Android bridge from Braze Android SDK 30.3.0 to 30.4.0.
- Adds the
BrazeInAppMessage.isTestSendproperty, which indicates whether an in-app message was triggered as part of a test send.
Release notes
Open source →Changed
- Changed
AppboyWebViewActivityto extendFragmentActivityfor better fragment management.- Note that
AppboyWebViewActivitynow no longer performs session and in-app message registration on its own. - Clients using
AppboyLifecycleCallbackListenerwill see no effect. - Clients performing manual session integration should override
AppboyWebViewActivityto add back this registration and set the new Activity viaAppboyConfig.Builder#setCustomWebViewActivityClass()orcom_appboy_custom_html_webview_activity_class_namein theappboy.xmlfile.
- Note that
Added
- Added support for receiving messages via the Huawei Messaging Service.
Fixed
- Fixed minor display issues with Inline Image Push.
- Updated the Android Gradle plugin from
-
10.0.030 Apr 2024Release notes
Open source →Breaking
- Updates the native iOS bridge from Braze Swift SDK 8.4.0 to 9.0.0.
Added
- Adds the
getDeviceIdmethod to replacegetInstallTrackingId, which is now deprecated.
Fixed
- Fixes an issue where StrictMode DiskReadViolation was triggered on Android.
- Thanks @radivojeostojic for pointing this out.
Release notes
Open source →⚠ Breaking
- The Android SDK has now fully migrated to AndroidX dependencies. No backwards compatibility is possible with the no longer maintained Android Support Library.
- See https://developer.android.com/jetpack/androidx for more information on AndroidX, including migration steps.
- Braze Android 9.0.0 is the last SDK version compatible with the Android Support Library.
- Added a new interface method,
IAppboyNotificationFactory.createNotification(BrazeNotificationPayload).- The
BrazeNotificationPayloadis a data object that performs the task of extracting and surfacing values from the Braze push payload in a far more convenient way. - Integrations without a custom
IAppboyNotificationFactorywill have no breaking changes. - Integrations with a custom
IAppboyNotificationFactoryare recommended to switchover to their non-deprecated counterparts inAppboyNotificationUtils.java.
- The
Added
- Added support for
com_appboy_inapp_show_inapp_messages_automaticallyboolean configuration for Unity.
Fixed
- Fixed support for dark mode in HTML in-app messages and remote urls opened in
AppboyWebViewActivityfor deeplinks via theprefers-color-scheme: darkcss style.- The decision to display content in dark mode will still be determined at display time based on the device's state.
- Fixed an issue where the card parameter in
com.appboy.IAppboyImageLoader.renderUrlIntoCardView()was null for Content Cards.
Removed
- Removed
com.appboy.push.AppboyNotificationUtils.handleContentCardsSerializedCardIfPresent().
-
9.0.009 Apr 2024Release notes
Open source →Breaking
- Updates the native iOS bridge from Braze Swift SDK 7.7.0 to 8.4.0.
- The minimum iOS deployment target has been updated to 12.0.
- The minimum supported Xcode version is 15.2.
- Updates the native Android bridge from Braze Android SDK 29.0.1 to 30.3.0.
- The minimum supported Dart version is
2.15.0. - The minimum supported Swift Language Version is Swift 5.
Added
- Push notification payloads are now accessible in the Dart layer by calling
subscribeToPushNotificationEvents(void Function(BrazePushEvent) onEvent). This allows you to run custom Dart code after a push is received or when a push is clicked.- On iOS, this callback can only be triggered for push click events.
- Reference our Flutter Push Notification documentation with details on how to utilize this feature.
- This feature is compatible with the
replayCallbacksConfigKeyto replay the push event callback for any notifications that were received prior to callingsubscribeToPushNotificationEvents. - Due to an issue in the Flutter framework, this feature is not compatible with subscribing to iOS silent push notifications.
- Adds support for Braze tracking properties.
- Adds the
updateTrackingPropertyAllowList(allowList)method to dynamically configure Braze tracking properties. - For further usage details, refer to the Swift privacy manifest documentation.
- Adds the
- Deprecates
setGoogleAdvertisingId(id, adTrackingEnabled)in favor ofsetAdTrackingEnabled(adTrackingEnabled, id).
Release notes
Open source →⚠ Breaking
- The Android SDK now has a source and target build compatibility set to Java 8.
Changed
- Simplified the email regex used in the SDK to centralize most validation on the server.
- The original email validation used is reproduced below:
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])
Fixed
- Fixed an issue where in-app message icon TextViews could throw a
ClassCastExceptionon certain devices and prevent display.
Removed
- Removed
com.appboy.support.AppboyImageUtils.getBitmap(android.net.Uri)in favor ofcom.appboy.support.AppboyImageUtils.getBitmap(android.content.Context, android.net.Uri, com.appboy.enums.AppboyViewBounds). - Removed
com.appboy.AppboyAdmReceiver.CAMPAIGN_ID_KEY.- Use
Constants.APPBOY_PUSH_CAMPAIGN_ID_KEYinstead.
- Use
- Removed
com.appboy.push.AppboyNotificationUtils.isValidNotificationPriority().
- Updates the native iOS bridge from Braze Swift SDK 7.7.0 to 8.4.0.
-
8.2.001 Mar 2024Release notes
Open source →Added
- Updates the native iOS bridge from Braze Swift SDK 7.3.0 to 7.7.0.
- Adds example integrations for Braze Rich Push Notifications and Braze Push Stories to the iOS sample app.
Fixed
- Removes the automatic assignment of
BrazeDelegatein the iOS native layer, allowing for custom implementations to be assigned to thebrazeinstance.- The plugin now uses the
sdkAuthDelegateproperty for the SDK Authentication feature instead.
- The plugin now uses the
-
8.1.006 Dec 2023Release notes
Open source →Added
- Updates the native iOS bridge from Braze Swift SDK 7.2.0 to 7.3.0.
Release notes
Open source →Added support for Android 11 R (API 30).
- Note that apps targeting API 30 should update to this SDK version.
Changed
- Changed Content Card subscriptions to automatically re-fire when silent push syncs or test send cards are received via push.
- Improved several accessibility features of In-App Messages and Content Cards as per Principles for improving app accessibility.
- Changed non-informative accessibility content descriptions for in-app message and Content Card images to
@null. - Content Cards now have content descriptions on their views that incorporate the title and description.
- Changed non-informative accessibility content descriptions for in-app message and Content Card images to
- Changed the
AppboyFirebaseMessagingServiceto override theonNewToken()method to register a Firebase push token when automatic Firebase registration enabled.
Added
- Added
appboyBridge.getUser().addAlias()to the javascript interface for HTML In-App Messages. - Added
Appboy.getConfiguredApiKey()to aid in determining if the SDK has an API key properly configured. - Added an overload for
IAppboy.getCurrentUser()that adds an asynchronous callback for when the current user is available instead of blocking on the caller thread.- The following is an example of the full interface:
-
Appboy.getInstance(mContext).getCurrentUser(new IValueCallback<AppboyUser>() { @Override public void onSuccess(@NonNull AppboyUser currentUser) { currentUser.setFirstName("Jared"); } @Override public void onError() {} });
- A convenience class is also provided with `SimpleValueCallback`: - ```java Appboy.getInstance(mContext).getCurrentUser(new SimpleValueCallback<AppboyUser>() { @Override public void onSuccess(@NonNull AppboyUser currentUser) { currentUser.setFirstName("Julian"); } }); - Added
AppboyInAppMessageManager.setClickOutsideModalViewDismissInAppMessageView()allow for the dismissal of a Modal In-App Message when tapping on the frame behind the message itself.- The default (and historical) value is false, meaning that clicks outside the modal do not close the modal.
- To toggle the feature on, call:
AppboyInAppMessageManager.getInstance().setClickOutsideModalViewDismissInAppMessageView(true)
Fixed
- Fixed behavior of the
com.appboy.ui.AppboyContentCardsFragmentto not assign margin of the first card in the feed from the top of the feed. - Fixed an issue with Content Card test sends where the test send wouldn't be visible in some conditions.
- Fixed an issue with regex based event property triggers not working as expected. Previously they had to match the entire string, now they will search for matches as expected. The regex is now also case-insensitive.
- Fixed an issue with
resolveActivity()in the defaultUriActionlogic not returning a validActivityto handle external deeplinks on Android 11 devices without theQUERY_ALL_PACKAGESpermission. - Fixed an issue introduced in 4.0.1 where upgrading the SDK could result in server configuration values getting removed until the next session start.
Removed
- Removed
AppboyConfig.Builder.setNotificationsEnabledTrackingOn(). - Removed
AppboyImageUtils.getPixelsFromDp(). - Removed
ViewUtils.getDisplayHeight().
-
8.0.022 Nov 2023Release notes
Open source →Breaking
- Updates the native Android bridge from Braze Android SDK 27.0.1 to 29.0.1.
- Updates the native iOS bridge from Braze Swift SDK 6.6.1 to 7.2.0.
- Modifies the behavior for Feature Flags methods.
BrazePlugin.getFeatureFlagByID(String id)will now returnnullif the feature flag does not exist.BrazePlugin.subscribeToFeatureFlags(void Function(List<BrazeFeatureFlag>) onEvent))will only trigger in the following situations:- When a refresh request completes with success or failure.
- Upon initial subscription if there was previously cached data from the current session.
- The minimum supported Android SDK version is 21.
Fixed
- Moved the
compileSDKVersionfor Android down to 33 to match Flutter's versioning.
Release notes
Open source →⚠ Breaking
- Integrators note: most of the changes listed below are on lightly used interfaces that do no affect most clients.
- Moved
InAppMessageHtmlBase.getAssetsZipRemoteUrl(), InAppMessageHtmlBase.setAssetsZipRemoteUrl()toInAppMessageZippedAssetHtmlBase.java. - Moved
AppboyInAppMessageHtmlFullView.APPBOY_BRIDGE_PREFIXtoAppboyInAppMessageHtmlBaseView.APPBOY_BRIDGE_PREFIX - Renamed
IInAppMessage.getRemoteAssetPathForPrefetchtoIInAppMessage.getRemoteAssetPathsForPrefetchand changed signature to List<String>. - Renamed
IInAppMessage.setLocalAssetPathForPrefetchtoIInAppMessage.setLocalAssetPathsForPrefetchand changed signature to Map<String, String>. - Created In-App Message interface
IInAppMessageWithImagefor slideup, modal, and fulls to hold image based methods. These methods have been refactored out of theIInAppMessageinterface.- These methods are
getImageUrl(), getRemoteImageUrl(), getLocalImageUrl(), getBitmap(), getImageDownloadSuccessful(), setImageUrl(), setLocalImageUrl(), setImageDownloadSuccessful(), setRemoteImageUrl(), andsetBitmap().
- These methods are
- Content Card backgrounds (in the default UI), now have their colors set via
/android-sdk-ui/src/main/res/drawable-nodpi/com_appboy_content_card_background.xml. - Several Content Cards related style values are now fully decoupled from News Feed values and are enumerated below.
- The color
@color/com_appboy_card_background_borderis now@color/com_appboy_content_card_background_borderfor Content Cards. - The color
@color/com_appboy_card_background_shadowis now@color/com_appboy_content_card_background_shadowfor Content Cards. - The color
@color/com_appboy_card_backgroundis now@color/com_appboy_content_card_backgroundfor Content Cards. - The color used for the text in the empty
AppboyContentCardsFragment,@color/com_appboy_titleis now@color/com_appboy_content_card_empty_text_color. - Several News Feed dimensions values also used in Content Card styles now have Content Card specific values, enumerated below. Note that if these values were overridden in your styles for use in Content Cards, they will have to be updated to the new keys.
- The dimension
@dimen/com_appboy_card_background_border_leftis now@dimen/com_appboy_content_card_background_border_left. - The dimension
@dimen/com_appboy_card_background_border_rightis now@dimen/com_appboy_content_card_background_border_right. - The dimension
@dimen/com_appboy_card_background_border_topis now@dimen/com_appboy_content_card_background_border_top. - The dimension
@dimen/com_appboy_card_background_border_bottomis now@dimen/com_appboy_content_card_background_border_bottom. - The dimension
@dimen/com_appboy_card_background_shadow_bottomis now@dimen/com_appboy_content_card_background_shadow_bottom. - The dimension
@dimen/com_appboy_card_background_corner_radiusis now@dimen/com_appboy_content_card_background_corner_radius. - The dimension
@dimen/com_appboy_card_background_shadow_radiusis now@dimen/com_appboy_content_card_background_shadow_radius. - Removed
AppboyInAppMessageHtmlJavascriptInterface(Context)in favor ofAppboyInAppMessageHtmlJavascriptInterface(Context, IInAppMessageHtml). - Removed
IAppboy.logPushDeliveryEvent()andAppboyNotificationUtils.logPushDeliveryEvent().
Added
- Added support for upcoming HTML In-App Message templates.
- Added
appboyBridge.logClick(String), appboyBridge.logClick()andappboyBridge.getUser().setLanguage()to the javascript interface for HTML In-App Messages. - Added support for dark mode in HTML in-app messages and remote urls opened in
AppboyWebViewActivityfor deeplinks via theprefers-color-scheme: darkcss style.- The decision to display content in dark mode will be determined at display time based on the device's state.
- Added support for dark mode in the default Content Cards UI.
- This feature is enabled by default. To disable or change, override the values present in
android-sdk-ui/src/main/res/values-night/colors.xmlandandroid-sdk-ui/src/main/res/values-night/dimens.xml.
- This feature is enabled by default. To disable or change, override the values present in
- Added
IAppboy.subscribeToSessionUpdates()which allows for the host app to be notified when a session is started or ended. - Added the ability to optionally set a custom list of location providers when obtaining a single location, such as on session start. See
AppboyConfig.Builder.setCustomLocationProviderNames()for more information.- The following example showcases instructing the SDK to use
LocationManager.GPS_PROVIDERandLocationManager.NETWORK_PROVIDER.new AppboyConfig.Builder() .setCustomLocationProviderNames(EnumSet.of(LocationProviderName.GPS, LocationProviderName.NETWORK)); - In xml:
<string-array translatable="false" name="com_appboy_custom_location_providers_list"> <item>GPS</item> <item>NETWORK</item> </string-array> - By default, only the passive and network providers are used when obtaining a single location from the system.
- This change does not affect Braze Geofences.
- The following example showcases instructing the SDK to use
Fixed
- Fixed an issue where the pending intent flags on a push story only allowed for the main deeplink to be fired once.
- Fixed behavior of the
com.appboy.ui.AppboyContentCardsFragmentto not double the margin of the first card in the feed from the top of the feed. - Fixed an issue where calling
wipeData()ordisableSdk()could result in not being able to set runtime configuration afterwards.
Changed
- Deprecated
com.appboy.models.IInAppMessageWithImage#setImageUrl()in favor ofcom.appboy.models.IInAppMessageWithImage#setRemoteImageUrl(String).
-
7.0.004 Oct 2023Release notes
Open source →Breaking
- Updates the native Android bridge from Braze Android SDK 26.1.1 to 27.0.1.
- Adds support for Gradle 8.
Added
- Updates the native iOS bridge from Braze Swift SDK 6.3.0 to 6.6.1.
- Adds
BrazePlugin.logFeatureFlagImpression(String id)to log a Feature Flag impression. - Adds support for custom user attributes to be nested objects.
BrazeUser.setNestedCustomUserAttribute()BrazeUser.setCustomUserAttributeArrayOfObjects()- You can specify that the Dictionary be merged with the existing value.
BrazeUser.setNestedCustomUserAttribute(string, Map<string, dynamic>, true)
- See https://www.braze.com/docs/user_guide/data_and_analytics/custom_data/custom_attributes/nested_custom_attribute_support/ for more information.
- Adds
BrazeUser.setCustomUserAttributeArrayOfStrings()to set arrays of strings as a custom attribute. - Adds
BrazePlugin.getCachedContentCards()to get the most recent content cards from the cache. - Adds
BrazePlugin.registerPushToken()to send a push token to Braze's servers.- Deprecates
BrazePlugin.registerAndroidPushToken()in favor of this new method.
- Deprecates
- Adds an example integration of iOS push notifications as well as custom scheme deep links, universal links (iOS), and app links (Android) to the Flutter sample app.
Release notes
Open source →⚠ Breaking
- Made several changes to the default Content Card views to more easily customize and apply ImageView styling.
- Changed
Appboy.ContentCards.BannerImage.ImageContainer.ImagetoAppboy.ContentCards.BannerImage.Image.
- Changed
- Removed
com.appboy.ui.contentcards.view.ContentCardViewHolder.createCardImageWithStyle().
Added
- Added Czech and Ukrainian language translations for Braze UI elements.
- Added
android-sdk-base-jetifiedandandroid-sdk-ui-jetifiedto reference jetified SDK AAR artifacts from the artifact repository.- This is a direct replacement for
android-sdk-ui-xand is a more complete integration path for using the Braze SDK with AndroidX. - Usage as follows:
dependencies { implementation "com.appboy:android-sdk-ui-jetified:${BRAZE_SDK_VERSION}" }- If previously using the
android-sdk-ui-xmodule, you must replace any imports under thecom.appboy.uix.pushpackage to be undercom.appboy.ui.push. - The gradle properties
android.enableJetifier=trueandandroid.useAndroidX=trueare no longer required when using androidX libraries with the Braze SDK.
- This is a direct replacement for
- Added Material Design Button class names to exported consumer proguard rules.
-keepnames class android.support.design.button.MaterialButton -keepnames class com.google.android.material.button.MaterialButton
Fixed
- Fixed issue in
AppboyCardAdapterwhere a card index could be out of bounds when marking a card as seen.
Changed
- In-App Message "test sends" from the dashboard now display automatically if your app is in the foreground.
- Backgrounded apps will continue to receive a push notification to display the message.
- You can disable this feature by changing the boolean value for
com_appboy_in_app_message_push_test_eager_display_enabledin yourappboy.xml, or at runtime by settingAppboyConfig.setInAppMessageTestPushEagerDisplayEnabled()to false.
- Changed
UriActionto be more easily customizable.
Removed
- Removed the
android-sdk-ui-xmodule. See theAddedsection for more information. - Removed the China Push Sample app.
-
6.0.111 Aug 2023Release notes
Open source →Fixed
- Updates the native Android bridge from Braze Android SDK 26.1.0 to 26.1.1.
-
6.0.029 Jun 2023Release notes
Open source →Breaking
- Updates the native Android bridge from Braze Android SDK 25.0.0 to 26.1.0.
Fixed
- Fixes an issue where
BrazeContentCard.imageAspectRatiowould always return1for whole-numberintvalues.- The field
imageAspectRatiois now anumtype instead of adoubletype. No changes are required.
- The field
Added
- Added support for Braze Feature Flags.
BrazePlugin.getFeatureFlagByID(String id)- Get a single Feature FlagBrazePlugin.getAllFeatureFlags()- Get all Feature FlagsBrazePlugin.refreshFeatureFlags()- Request a refresh of Feature FlagsBrazePlugin.subscribeToFeatureFlags(void Function(List<BrazeFeatureFlag>) onEvent))- Subscribe to Feature Flag updates- Feature Flag property getter methods for the following types:
- Boolean:
featureFlag.getBooleanProperty(String key) - Number:
featureFlag.getNumberProperty(String key) - String:
featureFlag.getStringProperty(String key)
- Boolean:
- Updates the native iOS bridge from Braze iOS SDK 6.0.0 to 6.3.0.
Release notes
Open source →⚠ Breaking
- Slideup and HTML Full In-App Messages now require the device to be in touch mode at the time of display. This is enforced in their respective
IInAppMessageViewFactorydefault implementations.- See https://developer.android.com/reference/android/view/View.html#isInTouchMode().
- Removed
ViewUtils.setFocusableInTouchModeAndRequestFocus(). AppboyUnityPlayerNativeActivity,AppboyOverlayActivity,AppboyUnityNativeInAppMessageManagerListener,AppboyUnityPlayerNativeActivity,AppboyUnityPlayerNativeActivity, andIAppboyUnityInAppMessageListenerhave been removed from theandroid-sdk-unityproject.UnityPlayerNativeActivitywas deprecated in 2015. See https://unity3d.com/unity/beta/unity5.4.0b1.
Added
- Added proper support for navigating and closing Braze In-App Messages with directional-pads/TV remote input devices.
- Added the ability to customize the in-app message button border radius via
@dimen/com_appboy_in_app_message_button_corner_radius. - Added the ability to customize the in-app message button border color stroke width via
@dimen/com_appboy_in_app_message_button_border_stroke.- The stroke width used when an in-app message button border is focused is set via
@dimen/com_appboy_in_app_message_button_border_stroke_focused.
- The stroke width used when an in-app message button border is focused is set via
Fixed
- Fixed an issue where Content Cards syncs were suppressed too often.
- Fixed an issue where in-app messages could not be closed on TVs or other devices without touch interactions.
Changed
- Changed in-app messages to return focus back to the view that previously held focus before a message is displayed as given via
Activity#getCurrentFocus().
-
5.0.026 Apr 2023Release notes
Open source →Breaking
- The native Android bridge uses Braze Android SDK 25.0.0.
- The native iOS bridge uses Braze iOS SDK 6.0.0.
- If you wish to access remote URLs for in-app messages instead of local URLs, replace your implementation of the
BrazeInAppMessageUIDelegatemethodinAppMessage(_:willPresent:view:)with a custom implementation ofBrazeInAppMessagePresenteror aBrazeInAppMessageUIsubclass. This is relevant if you are caching asset URLs outside of the Braze SDK. - For reference, see our sample code here.
- If you wish to access remote URLs for in-app messages instead of local URLs, replace your implementation of the
Release notes
Open source →⚠ Breaking
- Added
IInAppMessageView.hasAppliedWindowInsets().
Added
- Added
appboyBridge.logClick()andappboyBridge.getUser().setLanguage()to the javascript interface for HTML In-App Messages. - Added
Appboy.requestGeofences()to request a Braze Geofences update for a manually provided GPS coordinate. Automatic Braze Geofence requests must be disabled to properly use this method.- Braze Geofences can only be requested once per session, either automatically by the SDK or manually with the above method.
- Added the ability to disable Braze Geofences from being requested automatically at session start.
- You can do this by configuring the boolean value for
com_appboy_automatic_geofence_requests_enabledin yourappboy.xml. - You can also configure this at runtime by setting
AppboyConfig.setAutomaticGeofenceRequestEnabled().
- You can do this by configuring the boolean value for
Fixed
- Fixed an issue where multiple calls to
ViewCompat.setOnApplyWindowInsetsListener()could result in in-app messages margins getting applied multiple times instead of exactly once. - Fixed an issue where pure white
#ffffffffin a dark theme in-app message would not be used when the device was in dark mode.- In this case, the original non-dark theme color would be used by the in-app message instead.
-
4.1.022 Mar 2023Release notes
Open source →Fixed
- Fixes an issue in
4.0.0where the version inbraze_plugin.podspecwas not incremented correctly.
Changed
- The native iOS bridge uses Braze iOS SDK 5.12.0.
- Fixes an issue in
-
4.0.014 Mar 2023Release notes
Open source →Starting with this release, this SDK will use Semantic Versioning.
Breaking
- Fixes the behavior in the iOS bridge introduced in version
3.0.0when logging clicks for in-app messages and content cards. CallinglogClicknow only sends a click event for metrics, instead of both sending a click event as well as redirecting to the associatedurlfield.- For instance, to log a content card click and redirect to a URL, you will need two commands:
braze.logContentCardClicked(contentCard); // Your own custom implementation Linking.openUrl(contentCard.url);- This brings the iOS behavior to match version
2.xand bring parity with Android's behavior.
- Removes
setBrazeInAppMessageCallback()andsetBrazeContentCardsCallback()in favor of subscribing via streams.- Reference our sample app for an example on how to use
subscribeToInAppMessages()orsubscribeToContentCards().
- Reference our sample app for an example on how to use
Changed
- The native Android bridge uses Braze Android SDK 24.3.0.
- The native iOS bridge uses Braze iOS SDK 5.11.2.
- Improves behavior when using
replayCallbacksConfigKeyalongside having subscriptions to in-app messages or content cards via streams.
Release notes
Open source →Known Issues with version 4.0.0
- Content Card clicks are not handled or logged for Content Cards due to the
"Appboy.ContentCards"style containing the"clickable=true"style. This is fixed in SDK version 4.0.2.
⚠ Breaking
- Added
beforeInAppMessageViewOpened(), afterInAppMessageViewOpened(), beforeInAppMessageViewClosed(), afterInAppMessageViewClosed()to theIInAppMessageManagerListenerinterface.- These methods are intended to help instrument each stage of the In-App Message View gaining and losing visibility status.
- Renamed
Card.getIsDismissible()toCard.getIsDismissibleByUser().
Added
- Added the ability to more easily test In-App Messages from the dashboard when sending a test push by bypassing the need to click the test push notification and instead directly display the test In-App Message when the app is in the foreground.
- A push notification will still display if a test In-App Message push is received and the app is in the background.
- You can enable this feature by configuring the boolean value for
com_appboy_in_app_message_push_test_eager_display_enabledin yourappboy.xml. The default value is false. - You can also enable this feature at runtime by setting
AppboyConfig.setInAppMessageTestPushEagerDisplayEnabled()to true. The default value is false.
- Added the ability to customize how In-App Messages views are added to the view hierarchy with a custom
IInAppMessageViewWrapperFactory.- See
AppboyInAppMessageManager.setCustomInAppMessageViewWrapperFactory(). - For lightweight customizations, consider extending
DefaultInAppMessageViewWrapperand overridinggetParentViewGroup(),getLayoutParams(), andaddInAppMessageViewToViewGroup(). - Addresses https://github.com/braze-inc/braze-android-sdk/issues/138.
- See
- Added
Card.setIsDismissibleByUser()to allow for integrators to disable the default swipe-to-dismiss behavior on a per-card basis. - Added the ability to set the initial
AppboyLoggerlog level viaappboy.xml.- In your
appboy.xml, set an integer value forcom_appboy_logger_initial_log_level. The integer should correspond to a constant inLog, such asLog.VERBOSEwhich is 2. - Values set via
AppboyLogger.setLogLevel()take precedence over values set inappboy.xml.
- In your
- Added the ability to use a custom Activity when opening deeplinks inside the app via a WebView. This Activity will be used in place of the default
AppboyWebViewActivity.- You can do this by configuring the string value for
com_appboy_custom_html_webview_activity_class_namein yourappboy.xml. Note that the class name usedappboy.xmlmust be the exact class name string as returned fromYourClass.class.getName(). - You can also configure this at runtime by setting
AppboyConfig.setCustomWebViewActivityClass(). - To retrieve the url in your custom WebView:
final Bundle extras = getIntent().getExtras(); if (extras.containsKey(Constants.APPBOY_WEBVIEW_URL_EXTRA)) { String url = extras.getString(Constants.APPBOY_WEBVIEW_URL_EXTRA); } - You can do this by configuring the string value for
Fixed
- Fixed the inability to scroll through Content Cards when not using standard input mechanisms, aiding accessibility.
- All Content Card views now have
selectableandfocusableattributes set to true. - Amazon Fire TV integrators should update to this version.
- All Content Card views now have
- Changed
AppboyInAppMessageHtmlUserJavascriptInterface.setCustomAttribute()in the HTML javascript bridge to not coerceDoubleintoFloat. - Fixed default Content Card rendering on low screen density devices. Previously, Content Cards could render without a margin and overflow off screen.
@dimens/com_appboy_content_cards_max_widthnow accurately sets the maximum possible width of a Content Card.@dimens/com_appboy_content_cards_divider_left_marginand@dimens/com_appboy_content_cards_divider_right_marginare now used to provide a margin for Content Cards when the width of the Content Card does not exceed the max width of@dimens/com_appboy_content_cards_max_width.
- Fixed an issue where images in Content Cards could be resized before they had finished a layout, resulting in an 0 width/height ImageView.
Changed
InAppMessageImmersiveBase.getMessageButtons()is now guaranteed to be non-null. When buttons are not set on the message, this list will be non-null and empty.- Calling
InAppMessageImmersiveBase.setMessageButtons()with null will instead clear theMessageButtonlist
- Calling
- Changed the SDK to compile against the 18.0.0 version of the Firebase Cloud Messaging dependency.
- Updated the exported
android-sdk-uiconsumer proguard rules to keep javascript interface methods. - Changed the WebView used in HTML In-App Messages to have DOM storage enabled via
setDomStorageEnabled(true). - Changed Content Cards to allow for blank or empty values for the title or description. In these situations, the
TextView's visibility is changed toGONEin the view hierarchy.
Removed
- Removed
Constants.APPBOY_WEBVIEW_URL_KEY.
- Fixes the behavior in the iOS bridge introduced in version
-
3.1.030 Jan 2023Release notes
Open source →Breaking
- The native Android bridge uses Braze Android SDK 24.2.0.
- The native iOS bridge uses Braze iOS SDK 5.9.0.
- The minimum iOS deployment target is 11.0.
Release notes
Open source →Breaking
- Renamed
AppboyNotificationUtils.wakeScreenIfHasPermission()toAppboyNotificationUtils.wakeScreenIfAppropriate(). Wakelocks can now be configured to not wake the device screen for push notifications.- This can be set via
AppboyConfig.setIsPushWakeScreenForNotificationEnabled()and alsocom_appboy_push_wake_screen_for_notification_enabledin yourappboy.xml.
- This can be set via
Added
- A drop-in
AppboyContentCardsActivityclass has been added which can be used to display Braze Content Cards. - Added an appboyBridge ready event to know precisely when the appboyBridge has finished loading in the context of an HTML in-app message.
- Example below:
<script type="text/javascript"> function logMyCustomEvent() { appboyBridge.logCustomEvent('My Custom Event'); } window.addEventListener('ab.BridgeReady', logMyCustomEvent, false); </script>
- Example below:
- Added
Constants.TRAFFIC_STATS_THREAD_TAGto identify the Braze network traffic with theTrafficStatsAPI. - Added the ability to configure a blacklist of Activity classes to disable automatic session handling and in-app message registration in the AppboyLifecycleCallbackListener. See
AppboyLifecycleCallbackListener.setActivityClassInAppMessagingRegistrationBlacklist(),AppboyLifecycleCallbackListener.setActivityClassSessionHandlingBlacklist(), and constructorAppboyLifecycleCallbackListener(boolean, boolean, Set<Class>, Set<Class>).
Changed
- Deprecated the Feedback feature. This feature is disabled for new accounts, and will be removed in a future SDK release.
- Changed the deprecated status of the
AppboyNotificationUtils.isUninstallTrackingPush()method. Note that uninstall tracking notifications will not be forwarded to registered receivers. - Improved in-app message triggering logic to fall back to lower priority messages when the Braze server aborts templating (e.g. from a Connected Content abort in the message body, or because the user is no longer in the correct segment for the message)
-
3.0.121 Dec 2022Release notes
Open source →Fixed
- Updates the
braze_plugin.podspecfile to statically link the iOS framework by default. This prevents the need to do a manual step when migrating to3.x.x. - Fixes an issue introduced in version
2.2.0where the content cards callback was not being called when receiving an empty list of content cards.
Release notes
Open source →Changed
- Deprecated
Card.isRead()andCard.setIsRead(). Please useCard.isIndicatorHighlighted()andCard.setIndicatorHighlighted()instead.
Added
- Added
Card.isClicked(). Clicks made throughCard.logClick()are now saved locally on the device for Content Cards. - Added
AppboyConfig.setIsInAppMessageAccessibilityExclusiveModeEnabled()which forces accessibility readers to only be able to read currently displaying in-app messages and no other screen contents.- This can also be set via
com_appboy_device_in_app_message_accessibility_exclusive_mode_enabledin yourappboy.xml.
- This can also be set via
- Updates the
-
3.0.006 Dec 2022Release notes
Open source →Breaking
- The native iOS bridge now uses the new Braze Swift SDK, version 5.6.4.
- The minimum iOS deployment target is 10.0.
- During migration, update your project with the following changes:
- To initialize Braze, follow these integration steps to create a
configurationobject. Then, add this code to complete the setup:let braze = BrazePlugin.initBraze(configuration) - This migration requires re-identifying users. To do so, you must call the
changeUsermethod on the Braze instance for non-anonymous users. You can read more about it here. - To continue using
SDWebImageas a dependency, add this line to your project's/ios/Podfile:pod 'SDWebImage', :modular_headers => true- Then, follow these setup instructions.
- For guidance around other changes such as receiving in-app message and content card data, reference our sample
AppDelegate.swift.
- To initialize Braze, follow these integration steps to create a
Added
- Adds the
isControlfield toBrazeContentCard.
Changed
- Updates the parameter syntax for
subscribeToInAppMessages()andsubscribeToContentCards().
Release notes
Open source →Breaking
- From
AppboyConfig, removedgetEnableBackgroundLocationCollection(),getLocationUpdateTimeIntervalSeconds(), andgetLocationUpdateDistance()and their respective setters inAppboyConfig.Builder. - Removed
AppboyInAppMessageImmersiveBaseView.getMessageButtonsView(). - Removed the Fresco image library from the SDK. To displaying GIFs, you must use a custom image library. Please see
IAppboy#setAppboyImageLoader(IAppboyImageLoader).- We recommend the Glide Image Library as a Fresco replacement.
AppboyConfig.Builder.setFrescoLibraryEnabled()has been removed.AppboyConfigurationProvider.getIsFrescoLibraryUseEnabled()has been removed.
Fixed
- Fixed a NPE issue with the RecyclerView while saving the instance state in the
AppboyContentCardsFragment.
Added
- Added the ability to set location custom attributes on the html in-app message javascript interface.
- Added compatibility with androidX dependencies.
- This initial release adds direct compatibility for classes found under the
com.appboy.pushpackage. These classes are commonly used in conjunction with anIAppboyNotificationFactory. To use these compatible classes, add the following gradle import:implementation 'com.appboy:android-sdk-ui-x:VERSION'and replace your imports to fall under thecom.appboy.uix.pushpackage. - The gradle properties
android.enableJetifier=trueandandroid.useAndroidX=trueare required when using androidX libraries with the Braze SDK.
- This initial release adds direct compatibility for classes found under the
- Added nullability annotation to
AppboyandAppboyUserfor better Kotlin interoperability. - Added the ability to optionally whitelist keys in the device object. See
AppboyConfig.Builder.setDeviceObjectWhitelistEnabled()andAppboyConfig.Builder.setDeviceObjectWhitelist()for more information.- The following example showcases whitelisting the device object to only include the Android OS version and device locale in the device object.
new AppboyConfig.Builder() .setDeviceObjectWhitelistEnabled(true) .setDeviceObjectWhitelist(EnumSet.of(DeviceKey.ANDROID_VERSION, DeviceKey.LOCALE));
- The following example showcases whitelisting the device object to only include the Android OS version and device locale in the device object.
Removed
- Removed the ability to optionally track locations in the background.
- Removed Cross Promotion cards from the News Feed.
- Cross Promotion cards have also been removed as a card model and will thus no longer be returned.
Changed
- Updated the Baidu China Push sample to use the version 2.9 Baidu JNI libraries and version 6.1.1.21 of the Baidu jar.
- The native iOS bridge now uses the new Braze Swift SDK, version 5.6.4.
-
2.6.102 Nov 2022Release notes
Open source →Added
- Adds support to replay the
onEventmethod for queued in-app messages and content cards when subscribing via streams.- This feature must be enabled by setting
replayCallbacksConfigKey: trueincustomConfigsfor theBrazePlugin.
- This feature must be enabled by setting
Changed
- The native Android bridge uses Braze Android SDK 23.3.0.
- Updates the parameter type for
subscribeToInAppMessages()andsubscribeToContentCards()to accept aFunctioninstead of avoid.
- Adds support to replay the
-
2.6.029 Sep 2022Release notes
Open source →Breaking
- The native Android bridge uses Braze Android SDK 23.2.0.
- The native iOS bridge uses Braze iOS SDK 4.5.1.
process(inAppMessage)is renamed toprocessInAppMessage(inAppMessage)in the iOS layer.
Added
- Adds the ability to subscribe to data for in-app messages and content cards via streams.
- Use the methods
subscribeToInAppMessages()andsubscribeToContentCards(), respectively.
- Use the methods
Changed
- Updates the iOS layer to use Swift.
BrazePlugin.handBrazePlugin.mare now consolidated toBrazePlugin.swift. - Deprecates
setBrazeInAppMessageCallback()andsetBrazeContentCardsCallback()in favor of subscribing via streams.
Release notes
Open source →Added
- Introduced support for the Content Cards feature, which will eventually replace the existing News Feed feature and adds significant capability.
Breaking
- Updated the minimum SDK version from 14 (Ice Cream Sandwich) to 16 (Jelly Bean).
Added
- Added
AppboyUser.setLocationCustomAttribute()andAppboyUser.unsetLocationCustomAttribute().
-
2.5.021 Jun 2022Release notes
Open source →Breaking
- The native Android bridge uses Braze Android SDK 21.0.0.
- Removes
logContentCardsDisplayed(). This method was not part of the recommended Content Cards integration and can be safely removed.
Added
- Adds support for the SDK Authentication feature.
- To handle authentication errors, use
setBrazeSdkAuthenticationErrorCallback(), and usesetSdkAuthenticationSignature()to update the signature. When callingchangeUser(), be sure to pass in thesdkAuthSignatureparameter. - Thanks @spaluchiewicz for contributing to this feature!
- To handle authentication errors, use
- Adds
setLastKnownLocation()to set the last known location for the user.
Release notes
Open source →Breaking
- Added
isControl()to theIInAppMessageinterface. - Added
logDisplayFailure()to theIInAppMessageinterface. In-app message display failures may affect campaign statistics so care should be taken when logging display failures. - Added the
InAppMessageControlclass to represent control in-app messages. Control in-app messages should not be displayed to users and should only calllogImpression()at render time.- Requesting in-app message display, even if the stack is non-empty, may potentially lead to no in-app message displaying if the in-app message is a control in-app message.
- Added
AppboyInAppMessageManager.setCustomControlInAppMessageManagerListener()to modify the lifecycle behavior for control in-app messages. - Removed
logInAppMessageClick,logInAppMessageButtonClick, andlogInAppMessageImpressionfrom Appboy Unity player subclasses andAppboyUnityActivityWrapper. - Removed
AppboyConfigurationProvider.getIsUilImageCacheDisabled()andAppboyConfig.Builder.setDisableUilImageCache().
Fixed
- Fixed the issue where in-app messages triggered on session start could potentially be templated with the old user's attributes.
- Fixed a bug where calling
Appboy.wipeData()orAppboy.disableSdk()could potentially lead to null instances being returned fromAppboy.getInstance(). - Fixed the issue where push deep links did not respect the back stack behavior when instructed to open inside the app's WebView.
- Fixed a bug where the push received broadcast action contained the host package name twice.
-
2.4.026 May 2022Release notes
Open source →Breaking
- The native Android bridge uses Braze Android SDK 20.0.0.
- Removes
setAvatarImageUrl().
Changed
- The native iOS bridge uses Braze iOS SDK 4.4.3.
Release notes
Open source →Fixed
- Fixed a bug where calling
Appboy.wipeData()would throw an uncaught exception when the Google Play location services library was not present.
Added
- Added the ability to listen for notification deleted intents from the
AppboyGcmReceivervia the action suffixAppboyNotificationUtils.APPBOY_NOTIFICATION_DELETED_SUFFIX. - Added a notification creation timestamp to notifications built from the
AppboyGcmReceiver. This allows for calculating the duration of a notification. Intents will containConstants.APPBOY_PUSH_RECEIVED_TIMESTAMP_MILLISin the intent extras bundle.
Changed
- Deprecated
AppboyNotificationUtils.isUninstallTrackingPush()to always return false. Uninstall tracking no longer requires sending a silent push notification to devices.
-
2.3.007 Jan 2022Release notes
Open source →Breaking
- The native Android bridge uses Braze Android SDK 17.0.0.
- The minimum supported Android SDK version is 19.
- Removes support for Android V1 Embedding APIs. Please reference the Flutter migration guide to update to the V2 APIs.
Added
- Custom events and purchases now support nested properties.
- In addition to integers, floats, booleans, dates, or strings, a JSON object can be provided containing dictionaries of arrays or nested dictionaries. All properties combined can be up to 50 KB in total length.
- Adds the ability to restrict the Android automatic integration from natively displaying in-app messages.
- To enable this feature, add this to your
braze.xmlconfiguration:
<string name="com_braze_flutter_automatic_integration_iam_operation">DISCARD</string>- The available options are
DISPLAY_NOWorDISCARD. If this entry is ommitted, the default isDISPLAY_NOW.
- To enable this feature, add this to your
Changed
- The native iOS bridge uses Braze iOS SDK 4.4.1.
Release notes
Open source →Known Issues with version 2.3.0
- If the Google Play location services library is not present, calls to
Appboy.wipeData()will throw an uncaught exception.
Breaking
- Removed the
appboyInAppMessageCustomFontFilecustom xml attribute. Custom font typefaces must now be located in theres/fontdirectory.- To override a Braze style, both
android:fontFamilyandfontFamilystyle attributes must be set to maintain compatibility across all SDK versions. Example below:
<item name="android:fontFamily">@font/YOUR_CUSTOM_FONT_FAMILY</item> <item name="fontFamily">@font/YOUR_CUSTOM_FONT_FAMILY</item>- See https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html for more information.
- To override a Braze style, both
- Removed
AppboyInAppMessageButtonView.javaandAppboyInAppMessageTextView.java. - Removed the
AppboyGeofenceService. Geofence integration no longer requires a manifest registration. Any reference toAppboyGeofenceServicecan safely be removed from your manifest. - Renamed
AppboyUnityPlayerNativeActivityWrappertoAppboyUnityActivityWrapper.
Fixed
- Fixed a bug where sessions could be opened and closed with a null activity.
Added
- Added the ability to have the Braze SDK automatically register for Firebase Cloud Messaging.
- Enabled via
com_appboy_firebase_cloud_messaging_registration_enabledboolean attribute in XML or viaAppboyConfig.Builder.setIsFirebaseCloudMessagingRegistrationEnabled(). - The Firebase Cloud Messaging Sender ID is set via
com_appboy_firebase_cloud_messaging_sender_idstring attribute in XML or viaAppboyConfig.Builder.setFirebaseCloudMessagingSenderIdKey(). - The Firebase Cloud Messaging dependencies must still be compiled into your project. The Braze SDK does not compile any Firebase Cloud Messaging dependencies as part of this release.
- Enabled via
- Added UnityPlayerActivity support to AppboyUnityActivityWrapper. Previously only UnityPlayerNativeActivity was supported.
- Added a AppboyUnityPlayerActivity class for the UnityPlayerActivity for both prime31 and non-prime31 integrations.
-
2.2.029 Oct 2021Release notes
Open source →Breaking
- The native Android bridge uses Braze Android SDK 16.0.0.
- The native iOS bridge uses Braze iOS SDK 4.4.0.
- Streamlines the Android integration process to not involve any manual writing of code to automatically register for sessions, in-app messages, or Content Card updates from the native SDK.
- To migrate, remove any manual calls to
registerActivityLifecycleCallbacks(),subscribeToContentCardsUpdates(), andsetCustomInAppMessageManagerListener(). - To disable this feature, set the boolean
com_braze_flutter_enable_automatic_integration_initializertofalsein yourbraze.xmlconfiguration.
- To migrate, remove any manual calls to
Added
- Adds the ability to set the in-app message callback and content cards callback in the constructor of
BrazePlugin. - Adds the option to store any in-app messages or content cards received before their callback is available and replay them once the corresponding callback is set.
- To enable this feature, add this entry into the
customConfigsmap in the BrazePlugin constructor:replayCallbacksConfigKey : true - Thank you @JordyLangen for the contribution!
- To enable this feature, add this entry into the
- Adds
BrazePlugin.addToSubscriptionGroup()andBrazePlugin.removeFromSubscriptionGroup()to manage SMS/Email Subscription Groups.
Fixed
- Fixes an issue in the iOS bridge where custom events without any properties would not be logged correctly.
Release notes
Open source →Breaking
- Removed
Appboy.requestInAppMessageRefresh()and removed support for Original in-app messages. Note that all customers on version 2.2.0 and newer should use triggered in-app messages. - Changed the signature of most methods on the
IAppboyinterface. Methods that logged values now return void instead of boolean.IAppboy.openSession()now returns void.IAppboy.closeSessionnow returns void.IAppboy.changeUser()now returns void. To get the current user, please callIAppboy.getCurrentUser().IAppboy.logCustomEvent()and all method overloads now return void.IAppboy.logPurchase()and all method overloads now return void.IAppboy.submitFeedback()now returns void.IAppboy.logPushNotificationOpened()now returns void.IAppboy.logPushNotificationActionClicked()now returns void.IAppboy.logFeedDisplayed()now returns void.IAppboy.logFeedbackDisplayed()now returns void.
- Removed
AppboyFeedbackFragment.FeedbackResult.ERROR. - Changed
AppboyFeedbackFragment.FeedbackFinishedListenertoAppboyFeedbackFragment.IFeedbackFinishedListener. - Changed
AppboyFeedbackFragment.FeedbackResult.SENTtoAppboyFeedbackFragment.FeedbackResult.SUBMITTED. - Removed
Appboy.fetchAndRenderImage(). Please usegetAppboyImageLoader().renderUrlIntoView()instead. - Removed
AppboyFileUtils.getExternalStorage().
Added
- Added Push Stories, a new push type that uses
DecoratedCustomViewStyleto display multiple images in a single notification. We recommend posting push stories to a notification channel with vibration disabled to avoid repeated vibrations as the user navigates through the story.
Changed
- The Braze singleton now internally performs most actions on a background thread, giving a very substantial performance boost to all actions on the
Appboysingleton.
Fixed
- Reduced the number of connections made when the Braze SDK downloads files and images. Note that the amount of data downloaded has not changed.
-
2.1.016 Aug 2021Release notes
Open source →Breaking
- The native iOS bridge uses Braze iOS SDK 4.3.2.
- The native Android bridge uses Braze Android SDK 15.0.0.
Added
- Adds
logContentCardsDisplayed()to manually log an impression when displaying Content Cards in a custom UI.
Release notes
Open source →Breaking
- Updated the minimum SDK version from 9 (Gingerbread) to 14 (Ice Cream Sandwich).
- We recommend that session tracking and in-app messages registration be done via an
AppboyLifecycleCallbackListenerinstance usingApplication.registerActivityLifecycleCallbacks().
- We recommend that session tracking and in-app messages registration be done via an
- Removed the deprecated field:
AppboyLogger.LogLevel. Please useAppboyLogger.setLogLevel()andAppboyLogger.getLogLevel()instead. - Updated the v4 support library dependency to version 26.0.0. To download Android Support Libraries versions 26.0.0 and above, you must add the following line to your top-level
build.gradlerepositories block:maven { url "https://maven.google.com" }
Added
- Added support for Android O notification channels. In the case that a Braze notification does not contain the id for a notification channel, Braze will fallback to a default notification channel. Other than the default notification channel, Braze will not create any channels. All other channels must be programatically defined by the host app.
- Note that default notification channel creation will occur even if your app does not target Android O. If you would like to avoid default channel creation until your app targets Android O, do not upgrade to this version.
- To set the user facing name of the default Braze notification channel, please use
AppboyConfig.setDefaultNotificationChannelName(). - To set the user facing description of the default Braze notification channel, please use
AppboyConfig.setDefaultNotificationChannelDescription().
Changed
- Updated the target SDK version to 26.
-
2.0.021 May 2021Release notes
Open source →Breaking
- Migrates the plugin to support null safety. All non-optional function parameters have been updated to be non-nullable unless otherwise specified. Read here for more information about null safety.
- Please reference the Dart documentation when migrating your app to null safety.
- Apps that have not yet migrated to null safety are compatible with this version as long as they are using Dart 2.12+.
- Thanks @IchordeDionysos for contributing!
- Passing through
nullas a value for user attributes is no longer supported.- The only attribute that is able to be unset is
emailby passing innullintosetEmail.
- The only attribute that is able to be unset is
- The methods
logEventandlogPurchasenow take an optionalpropertiesparameter. - The native Android bridge uses Braze Android SDK 14.0.0.
- The minimum supported Dart version is
2.12.0.
Changed
logEventWithPropertiesandlogPurchaseWithPropertiesare now deprecated in favor oflogEventandlogPurchase.
Release notes
Open source →Breaking
- Removed the following deprecated methods and fields:
- Removed the unsupported method
Appboy.logShare(). - Removed
Appboy.logPurchase(String, int). - Removed
Appboy.logFeedCardImpression()andAppboy.logFeedCardClick(). Please useCard.logClick()andCard.logImpression()instead. - Removed the unsupported method
Appboy.getAppboyResourceEndpoint(). - Removed
IAppboyEndpointProvider.getResourceEndpoint(). Please update your interface implementation if applicable. - Removed
Appboy.registerAppboyGcmMessages(). Please useAppboy.registerAppboyPushMessages()instead. - Removed
AppboyInAppMessageBaseView.resetMessageMargins(). Please useAppboyInAppMessageBaseView.resetMessageMargins(boolean)instead. - Removed
com.appboy.unity.AppboyUnityGcmReceiver. To open Braze push deep links automatically in Unity, set the boolean configuration parametercom_appboy_inapp_show_inapp_messages_automaticallyto true in yourappboy.xml. - Removed the unsupported method
AppboyUser.setBio(). - Removed
AppboyUser.setIsSubscribedToEmails(). Please useAppboyUser.setEmailNotificationSubscriptionType()instead. - Removed
Constants.APPBOY_PUSH_CUSTOM_URI_KEY. Please useConstants.APPBOY_PUSH_DEEP_LINK_KEYinstead. - Removed
Constants.APPBOY_CANCEL_NOTIFICATION_TAG. - Removed
com.appboy.ui.actions.ViewActionandcom.appboy.ui.actions.WebAction. - Removed
CardCategory.ALL_CATEGORIES. Please useCardCategory.getAllCategories()instead. - Removed
AppboyImageUtils.storePushBitmapInExternalStorage(). - Removed
AppboyFileUtils.canStoreAssetsLocally()andAppboyFileUtils.getApplicationCacheDir(). - Removed
InAppMessageModal.getModalFrameColor()andInAppMessageModal.setModalFrameColor(). Please useInAppMessageModal.getFrameColor()andInAppMessageModal.setFrameColor()instead. - Removed
com.appboy.enums.SocialNetwork. - Removed
AppboyNotificationUtils.getAppboyExtras(). Please useAppboyNotificationUtils.getAppboyExtrasWithoutPreprocessing()instead. - Removed
AppboyNotificationUtils.setLargeIconIfPresentAndSupported(Context, AppboyConfigurationProvider, NotificationCompat.Builder). Please useAppboyNotificationUtils.setLargeIconIfPresentAndSupported(Context, AppboyConfigurationProvider, NotificationCompat.Builder, Bundle)instead. - Removed
AppboyInAppMessageManager.hideCurrentInAppMessage(). Please useAppboyInAppMessageManager.hideCurrentlyDisplayingInAppMessage()instead.
- Removed the unsupported method
- Changed method signatures for
gotoNewsFeed()andgotoURI()inIAppboyNavigator. Please update your interface implementation if applicable. - Removed
Appboy.unregisterAppboyPushMessages(). Please useAppboyUser.setPushNotificationSubscriptionType()instead. - Moved
getAppboyNavigator()andsetAppboyNavigator()fromAppboy.javatoAppboyNavigator.java. - The Braze Baidu China Push integration now uses the Baidu
channelIdas the push token. Please update your push token registration code to passchannelIdinstead ofuserIdintoAppboy.registerAppboyPushMessages(). The China Push sample has been updated. - Removed the
wearboyandwear-librarymodules. Android Wear 1.0 is no longer supported. Please removeAppboyWearableListenerServicefrom yourAndroidManifest.xmlif applicable.
Added
- Added a javascript interface to HTML in-app messages with ability to log custom events, purchases, user attributes, navigate users, and close the messaage.
- Added the ability to set a single delegate object to custom handle all Uris opened by Braze across in-app messages, push, and the news feed. Your delegate object should implement the
IAppboyNavigatorinterface and be set usingAppboyNavigator.setAppboyNavigator().- See https://github.com/braze-inc/braze-android-sdk/blob/master/droidboy/src/main/java/com/appboy/sample/CustomAppboyNavigator.java for an example implementation.
- You must also provide instructions for Braze to navigate to your app's (optional) news feed implementation. To use Braze's default handling, call
AppboyNavigator.executeNewsFeedAction(context, uriAction);. - Note: Previously,
AppboyNavigatorwas only used when opening in-app messages.
Changed
- Removed the need to manually add declarations for Braze's news feed and in-app message activities (
AppboyFeedActivityandAppboyWebViewActivity) to the appAndroidManifest.xml. If you have these declarations in your manifest, they can be safely removed. - Push notifications with web url click actions now open in an in-app webview instead of the external mobile web browser when clicked.
- Migrates the plugin to support null safety. All non-optional function parameters have been updated to be non-nullable unless otherwise specified. Read here for more information about null safety.
-
1.5.007 Apr 2021Release notes
Open source →Breaking
- The native iOS bridge uses Braze iOS SDK 4.0.2.
- The native Android bridge uses Braze Android SDK 13.1.2.
- The minimum supported Flutter version is 1.10.0.
Added
- Adds a public repository for the Braze Flutter SDK here: https://github.com/braze-inc/braze-flutter-sdk.
- We look forward to the community's feedback and are excited for any contributions!
Release notes
Open source →Added
- Added Kindle Fire support and ADM support.
- Added read/unread visual indicators to newsfeed cards. Use the configuration boolean com_appboy_newsfeed_unread_visual_indicator_on in appboy.xml to enabled the indicators. Additionally, moved the
logFeedCardImpression()andlogFeedCardClick()methods to the card objects themselves. - Added support to image loading in CaptionedImage and Banner cards for dynamic resizing after loading the image url; supports any aspect ratio.
- Added Hello Appboy sample project that shows a minimal use case of the Braze SDK.
- Added wake lock to
AppboyGcmReceiverin the UI project. When theWAKE_LOCKpermission is set, the screen will be turned on when a notification is received.
Changed
- Moved constants from
AppboyGcmReceiver(ie:APPBOY_GCM_NOTIFICATION_TITLE_ID, etc.) into newAppboyNotificationUtilsclass. - Restricted productId to 255 characters for
Appboy.logPurchase().
-
1.4.018 Mar 2021Release notes
Open source →Breaking
- The native Android bridge uses Braze Android SDK 13.0.0.
- The native iOS bridge uses Braze iOS SDK 3.34.0.
Added
- Adds
BrazePlugin.setGoogleAdvertisingId()to set the Google Advertising ID and the associated Ad-Tracking Enabled field for Android. This is a no-op on iOS.
Fixed
- Fixes an issue where the Braze Android SDK's
Appboy.setLogLevel()method wasn't respected.
Release notes
Open source →Added
- Added categories.
- Added swipe to refresh functionality to the newsfeed. The swipe to refresh colors are configurable in the colors xml file.
- Added configurable session timeout to the
appboy xml. - Added images to GCM push notifications.
- Added email and push notification subscription types for a user. Subscription types are explicitly opted in, subscribed, and unsubscribed. The old email boolean subscribe method has been deprecated.
Changed
- The feedback form now displays error popups to the user on invalid fields.
Removed
- Removed click logging on slideups when action is
None.
-
1.3.003 Dec 2020Release notes
Open source →Breaking
- The native Android bridge uses Braze Android SDK 12.0.0.
- The native iOS bridge uses Braze iOS SDK 3.31.0.
Added
- Adds support for the Braze plugin to be used with Android V2 Embedding APIs. Integrations using V1 Embedding will also continue to work.
- Allows the Android Braze plugin to be used with multiple Flutter engines.
-
1.2.009 Nov 2020Release notes
Open source →Breaking
- The native iOS bridge uses Braze iOS SDK 3.30.0.
Added
- Allows the iOS Braze plugin to be used with multiple Flutter engines.
-
1.1.029 Oct 2020Release notes
Open source →Breaking
- The native Android bridge uses Braze Android SDK 11.0.0.
- The native iOS bridge uses Braze iOS SDK 3.29.1.
-
1.0.017 Sep 2020Release notes
Open source →Breaking
- The native iOS bridge uses Braze iOS SDK 3.27.0. This release adds support for iOS 14 and requires XCode 12. Please read the Braze iOS SDK changelog for details.
-
0.10.105 Aug 2020 -
0.10.031 Jul 2020Release notes
Open source →Breaking
- The native Android bridge uses Braze Android SDK 8.1.0.
- The native iOS bridge uses Braze iOS SDK 3.26.0.
Fixed
- Fixed an issue where
setBoolCustomUserAttributealways set the attribute totrueon iOS.
-
0.9.006 May 2020Release notes
Open source →Breaking
- The native Android bridge uses Braze Android SDK 7.0.0.
- The native iOS bridge uses Braze iOS SDK 3.22.0.
-
0.8.029 Jan 2020Release notes
Open source →Breaking
- The native iOS bridge uses Braze iOS SDK 3.21.3.
- The native Android bridge uses Braze Android SDK 4.0.2.
- If you are using a custom
IInAppMessageManagerListener, then you will need to define new methods added to that interface in Braze Android SDK 4.0.0. See theMainActivity.ktfile of our sample app for a reference example.
- If you are using a custom
-
0.7.006 Dec 2019Release notes
Open source →Added
- Added
BrazePlugin.launchContentCards()andBrazePlugin.refreshContentCards()to natively display and refresh Content Cards. - Adds a Dart callback for receiving Braze Content Card data in the Flutter host app.
- Similar to in-app messages, you will need to subscribe to Content Card updates in your native app code and pass Content Card objects to the Dart layer. Those objects will then be passed to your callback within a
List<BrazeContentCard>instance. - To set the callback, call
BrazePlugin.setBrazeContentCardsCallback()from your Flutter app with a function that takes aList<BrazeContentCard>instance.- The
BrazeContentCardobject supports a subset of fields available in the native model objects, includingdescription,title,image,url,extras, and more.
- The
- On Android, you will need to register an
IEventSubscriber<ContentCardsUpdatedEvent>instance and pass returned Content Card objects to the Dart layer usingBrazePlugin.processContentCards(contentCards).- See the
MainActivity.ktfile of our sample app for a reference example.
- See the
- On iOS, you will need to create an
NSNotificationCenterlistener forABKContentCardsProcessedNotificationevents and pass returned Content Card objects to the Dart layer usingBrazePlugin.processContentCards(contentCards).- See the
AppDelegate.swiftfile of our sample app for a reference example.
- See the
- Similar to in-app messages, you will need to subscribe to Content Card updates in your native app code and pass Content Card objects to the Dart layer. Those objects will then be passed to your callback within a
- Added support for logging Content Card analytics to Braze using
BrazeContentCardinstances. SeelogContentCardClicked(),logContentCardImpression(), andlogContentCardDismissed()on theBrazePlugininterface.
- Added
-
0.6.122 Nov 2019Release notes
Open source →Fixed
- Fixed an issue where the Braze Kotlin plugin file's directory structure did not match its package structure.
-
0.6.008 Nov 2019Release notes
Open source →Changed
- The native Android bridge uses Braze Android SDK 3.8.0.
- Updated the native iOS bridge to Braze iOS SDK 3.20.4.
-
0.5.219 Sep 2019Release notes
Open source →Important: This patch updates the Braze iOS SDK Dependency from 3.20.1 to 3.20.2, which contains important bugfixes. Integrators should upgrade to this patch version. Please see the Braze iOS SDK Changelog for more information.
Changed
- Updated the native iOS bridge to Braze iOS SDK 3.20.2.
-
0.5.113 Sep 2019Release notes
Open source →Important This release has known issues displaying HTML in-app messages. Do not upgrade to this version and upgrade to 0.5.2 and above instead. If you are using this version, you are strongly encouraged to upgrade to 0.5.2 or above if you make use of HTML in-app messages.
Changed
- Updated the native iOS bridge to Braze iOS SDK 3.20.1.
-
0.5.012 Sep 2019Release notes
Open source →Important This release has known issues displaying HTML in-app messages. Do not upgrade to this version and upgrade to 0.5.2 and above instead. If you are using this version, you are strongly encouraged to upgrade to 0.5.2 or above if you make use of HTML in-app messages.
Breaking
- The native iOS bridge uses Braze iOS SDK 3.20.0.
- Important: Braze iOS SDK 3.20.0 contains updated push token registration methods. We recommend upgrading to these methods as soon as possible to ensure a smooth transition as devices upgrade to iOS 13. In
application:didRegisterForRemoteNotificationsWithDeviceToken:, replace
[[Appboy sharedInstance] registerPushToken: [NSString stringWithFormat:@"%@", deviceToken]];with
[[Appboy sharedInstance] registerDeviceToken:deviceToken]];registerPushToken()was renamed toregisterAndroidPushToken()and is now a no-op on iOS. On iOS, push tokens must now be registered through native methods.