Changelog
Every Bubbl SDK release, newest first. Filter by platform to see the releases that touched yours. Subscribe with RSS.
Android, iOS, Flutter and React Native share one version number, and a release lists only the platforms it changed where that's known. To move an app from 4.x, see Migrating from 4.x to 5.x.
AndroidFlutterReact Native
Fixed
Read the migration guide →Bubbl.permissions.openSettings() now works before Bubbl.start on Android, so an app can send people to its settings page (after a camera refusal, say) before it starts Bubbl. iOS 17 and later already did. Below the minimum OS version it stays a no-op.On Android,
openSettings() before start relies on Bubbl's AndroidX App Startup initializer, so it does nothing in an app that removed it.AndroidiOSFlutterReact Native
Breaking
A new SDK with no compatibility layer: nothing from the 4.x API keeps its old name. Nothing from a 4.x install carries over either, and each install registers as a new device.
One
start(apiKey, options) call replaces 4.x's install and boot. BubblOptions.baseUrl is required and must be https://; there's no default host, and environment, runtimeBaseUrl, transmissionBaseUrl and ingestBaseUrl are gone.Push, geofencing and notification taps are automatic, so push and token forwarding, location tracking calls and tap forwarding are gone. Correlation IDs and feeding locations in by hand have no 5.0 equivalent.
track(name, properties), setSegments, submitSurvey(message, answers) and setNotificationListener replace track(BubblTrackEvent), updateSegments, submitSurveyResponse and the default-modal switches; notification styles move to Android resources and iOS asset-catalogue colours.iOS: through Swift Package Manager only, not CocoaPods. Pushes go straight from Bubbl to APNs, without Firebase.
Runs on Android 8.1 (API 27) and iOS 17 or later. It installs down to Android 6 (API 23) and iOS 13, where
start logs one line and every call does nothing; check with Bubbl.isSupported.Events are typed, and new event types arrive in minor releases: Android's
BubblEvent is an open interface and Flutter's an abstract class (no longer sealed), so a when or switch over events needs a default branch.Flutter needs Flutter 3.32 or later. React Native needs React Native 0.76 or later with the New Architecture: the package is a TurboModule only.
Added
Read the migration guide →Consent, opt-out and deletion:
BubblOptions.requireConsent, setConsent, optOut and deleteMyData.Bubbl.permissions, with requestNotifications, requestLocation, status and openSettings. Bubbl shows its privacy view before the system prompt when the dashboard's privacy notice calls for it.Drawing notifications yourself:
setNotificationListener, then reportDisplayed, reportOpened, reportCtaClicked, reportDismissed, reportMediaViewed, reportMediaCompleted and reportSurveyStarted; present shows a message in Bubbl's screen and openCta follows its call to action.isBubblMessage, so an app's own push handling can skip Bubbl's pushes.Starting with a device credential from pairing a phone with a code:
start(context, credential, options) on Android, start(credential:options:) on iOS, and startWithCredential on Flutter and React Native, with a credential-rejected event when the server refuses it.Sandbox and Production workspaces with
pk_test_… and pk_live_… keys: registerTestDevice(code) approves a Sandbox install, diagnostics report environment and testDevice, and messages carry isSandbox.diagnostics(), including installId (to find the install under Active users in the dashboard), credentialRejected and supported.Android:
google-services.json is optional. Upload it under Configuration › Firebase › Android apps and the SDK starts Firebase for you.iOS: pictures on Bubbl's pushes through your app's notification service extension (the
BubblNotificationService product), and the SDK's privacy manifest (PrivacyInfo.xcprivacy).iOS:
setPushToken, willPresent and didReceive for apps that turn the automatic push integration off with BubblAutoIntegrationEnabled.Flutter: events as a Dart stream (
Bubbl.events) or through addEventListener. A notification handed to Dart that Dart can't take is shown by Bubbl instead of being lost.Flutter: pictures on iOS pushes through the
BubblFlutterNotificationService pod, with Swift Package Manager on or off.React Native: an Expo config plugin (Expo SDK 52 or later) for the push entitlement, location usage strings, pictures on iOS pushes (
ios.imageNotifications), background refresh (ios.backgroundRefresh) and plain http for local development.React Native: a Jest mock,
BubblReactNativeNotificationService for an iOS notification service extension, and BubblPush for an Objective-C AppDelegate.React Native: where there's no native module (the web, Expo Go, Jest, or a build from before the install), calls do nothing and say why once instead of throwing, and
diagnostics() resolves as not started.