Skip to main content

lotse 0.2.0 copy "lotse: ^0.2.0" to clipboard
lotse: ^0.2.0 copied to clipboard

Deep links, attribution, analytics, in-app feedback and push for Flutter apps, on one event stream with the Lotse backend.

0.2.0 #

  • Message pushes: your backend can send a push to one user or one install through the Lotse server API (POST /v1/messages). A tapped message push reaches the app through initialPush and pushOpened like a campaign push, with its targetPath, and the SDK records push_open with the props messageId and deliveryId (campaign pushes keep campaignId and deliveryId). With an older SDK the notification still shows, but a tap only opens the app.

  • A push to a userId only reaches devices on which identify ran with a valid userHash, so it needs the identity secret of the project (see "Identity verification" in the README). Without it, address the push to the install: your app hands Lotse.instance.installId to your backend.

  • Breaking: LotsePush.campaignId is now String?, null for a message push; the new LotsePush.messageId is set instead. The unnamed constructor is replaced by LotsePush.campaign and LotsePush.message.

    Migration: code that only routes push.targetPath changes nothing. Code that reads campaignId checks it for null (if (push.campaignId case final id?)). Tests that build a push write LotsePush.campaign(campaignId: '7', deliveryId: '42') instead of LotsePush(campaignId: '7', deliveryId: '42').

  • Message data: a message from the server API can carry data for your app. A tapped message push hands it to the app in LotsePush.data, without the keys of Lotse, FCM and APNs; Lotse.messageDataOf(message.data) reads it anywhere, also in a background handler without init.

  • Silent pushes: a message with "silent": true shows no notification and is never a tap, so it never reaches initialPush or pushOpened. Read it with Lotse.messageDataOf in FirebaseMessaging.onBackgroundMessage or in a native handler. A badge sets the number on the app icon on iOS.

  • Push permission: Lotse.init(requestPushPermission: false) does not ask at start; Lotse.instance.requestPushPermission() asks later and returns whether notifications are allowed. The push token is reported either way.

  • Analytics consent: Lotse.init(analytics: false) and Lotse.instance.setAnalyticsEnabled(...). Off, no event, heatmap tap or heatmap screenshot leaves the device, and what waits is dropped; push, links, feedback, users, in-app messages and surveys keep working.

  • macOS, Windows and Linux: the SDK runs there without push and no longer touches Firebase. See "On macOS, Windows and Linux" in the README for the entitlements a macOS app needs.

  • Replay pause: LotseReplayPause stops the replay of the last seconds while its child is shown, for screens that must never be recorded, such as a mode for children.

  • iOS push without Firebase: the SDK takes the APNs token and tapped pushes through a small native part of its own and needs no GoogleService-Info.plist. The project needs an APNs key for the iOS app; the SDK no longer reports an FCM token on iOS.

0.1.2 #

  • The SDK reports the package name (Android) or bundle id (iOS) of the app. With several apps in one project, each with its own push credential, a push now goes out with the credential of the device's own app. Older versions keep the project's first credential.
  • Web apps that use the SDK compile to WebAssembly (flutter build web --wasm). On the web, the SDK no longer imports the libraries of package_info_plus, device_info_plus and flutter_local_notifications that pull in dart:io.

0.1.1 #

  • pub.dev lists iOS and web next to Android. The SDK ran there already; only the install referrer is Android only, and the SDK skips it elsewhere.
  • The README explains how to install the agent skills with the skills CLI.

0.1.0 #

First release on pub.dev.

  • Setup: Lotse.init with the public key from the console registers the device and reports session_start. Lotse.captureLaunchLinks keeps a link that opens the app before init is done.
  • Links: deferred deep links after an install from a link (deferredLink), resolveLink, and the Play install referrer for attribution on Android.
  • Analytics: track with a queue that survives being offline, screen views with LotseScreenObserver, heatmaps from taps, app updates.
  • Users: identify and reset, with identity verification by a hash your backend computes.
  • Feedback: the feedback sheet with screenshot and masking (LotseConfidential, LotseUnmasked), replay of the last seconds, conversations with unread count, support chat, feature board with votes, surveys and in-app messages, custom texts.
  • Push: FCM on Android and iOS, initialPush and pushOpened for tapped pushes.
  • Agent skills for setup, events, deep links, push, feedback and the Lotse MCP server in skills/.