mehery_sender 0.1.15
mehery_sender: ^0.1.15 copied to clipboard
Flutter SDK for Mehery PushApp — push notifications, event tracking, in-app messages (banner, popup, PiP), and Android native notification templates.
Changelog #
All notable changes to mehery_sender are documented in this file.
The format follows Keep a Changelog and Semantic Versioning. See VERSIONING.md for bump rules and upgrade constraints.
Unreleased #
0.1.15 - 2026-06-20 #
Documentation URL update — no API or behavior changes.
Changed #
documentationURL —pubspec.yaml, README, anddocs/now point to the hosted guide at docs.mehery.com/guide/pushapp/flutter-sdk/.
Migration from 0.1.14 → 0.1.15 #
Bump mehery_sender: ^0.1.15 only. No code changes.
0.1.14 - 2026-06-20 #
Documentation URL update — no API or behavior changes.
Changed #
documentationURL —pubspec.yaml, README, anddocs/now point to the hosted guide at docs.mehery.com/guide/pushapp/flutter-sdk/.
Migration from 0.1.13 → 0.1.14 #
Bump mehery_sender: ^0.1.14 only. No code changes.
0.1.13 - 2026-06-19 #
Pub.dev metadata release — no API or behavior changes.
Changed #
- Repository URLs —
homepage,repository,issue_tracker, anddocumentationinpubspec.yamlnow point to PushApp-Flutter.
Migration from 0.1.12 → 0.1.13 #
Bump mehery_sender: ^0.1.13 only. No code changes.
0.1.12 - 2026-06-19 #
Fixes inline in-app slots waiting for tooltips or overlay dismissals.
Fixed #
- Inline + tooltip: Poll results split by template type — inline dispatches immediately to placeholder listeners; tooltips and overlays no longer block inline rendering.
- Queue lock: Inline items no longer enter the overlay queue; legacy inline entries in the queue are drained without blocking; inline path releases
_isProcessingQueuewhen needed.
Added #
meSendIsInlineInAppTemplateCode/meSendIsTooltipInAppTemplateCode— template routing helpers inmesend_parsing.dart.
Migration from 0.1.11 → 0.1.12 #
No host code changes — bump mehery_sender: ^0.1.12 only.
0.1.11 - 2026-06-19 #
Fixes background FCM handling reported by integration teams: Firebase init across isolates and tray display for data-only pushes.
Added #
meSendHandleBackgroundRemoteMessage— primary API for FCM background isolates; passDefaultFirebaseOptions.currentPlatformfrom a host top-level handler.meSendConfiguredFirebaseBackgroundOptions— documents options stored in the current isolate only.- README §2.3 troubleshooting — isolate static issue,
requestNotificationsPermissionNPE, data-only tray table. - Example —
example/lib/firebase_background_handler.dartwith recommended registration pattern.
Fixed #
- Background Firebase init:
configureMeSendFirebaseBackgroundInitin [main] no longer implied background isolate configuration; options must be passed intomeSendHandleBackgroundRemoteMessage. - Background tray (Android):
ensureTrayDisplayReady(background: true)skipsrequestNotificationsPermission(no Activity in background isolate — fixes NPE and allows data-only tray notifications). - Data-only FCM: Tray display uses parsed
datatitle/body when nonotificationblock is present (existing parser; background path no longer crashes beforeshow).
Changed #
meSendFirebaseMessagingBackgroundHandler— deprecated for direct registration; use host wrapper +meSendHandleBackgroundRemoteMessage.- Example
main.dartregistersfirebaseMessagingBackgroundHandlerinstead of SDK handler directly.
Migration from 0.1.10 → 0.1.11 #
- Add
lib/firebase_background_handler.dart(see README §2.3 or example). - Replace
FirebaseMessaging.onBackgroundMessage(meSendFirebaseMessagingBackgroundHandler)with your top-level handler. - No other host changes required if you already used the wrapper pattern from 0.1.10.
0.1.10 - 2026-06-19 #
Integration-hardening release (Rocket AP-1–AP-4): non-throwing init, single Android FCM path, safe template parsing, context guards, and unified SDK logging.
Added #
meherySenderLog/meherySenderLogPrefix— all SDK diagnostics use the[MeherySender]prefix (with optional subsystem tags such as[API],[Push],[InApp]) so host teams can filter logcat / Xcode console separately from app logs.- Device QA checklist in example/README.md for physical Android + iOS verification.
Changed #
- AP-1:
initializeAndSendTokenreturnsFuture<bool>; emitsregistrationState.failedinstead of throwing (unlessmeherySenderStrictRegistrationMode). - AP-2: Removed plugin
LiveActivityMessagingServicefrom defaultMESSAGING_EVENT— single FCM path viafirebase_messaging(opt-in native service documented in AndroidREADME.md). - AP-3: Safe parsing for in-app template fields (
draggable,html, alignments). - AP-4: In-app overlays use
_resolveInAppContext()(navigator key + mounted check). - Logging: Replaced raw
print()inlib/with gatedsdkPrint/meherySenderLog; HTTP and push subsystems use tagged[MeherySender][…]output.
Fixed #
- Analyzer warnings in
lib/andtest/(dead null-aware code, unused fields).
Migration from 0.1.8 → 0.1.10 #
- pubspec — bump
mehery_sender: ^0.1.10. - AP-1 — init return type:
initializeAndSendTokenis nowFuture<bool>. Check the return value or listen toregistrationStateinstead of relying on try/catch for missing tokens. Throws only whenmeherySenderStrictRegistrationModeistrue. - AP-2 — Android FCM: No host change required if you already use
firebase_messaging+MeSendPushNotificationDisplay.ensureInitialized(). Do not add a secondMESSAGING_EVENThandler unless you opt into native rich templates (AndroidREADME.md). - Debug logging: Set
meherySenderApiLoggingEnabled = truebefore creatingPushappto trace registration, API, push, and in-app flows in release/profile builds. Filter logs with[MeherySender].
Compatibility matrix (0.1.10) #
| Component | Minimum | Tested |
|---|---|---|
| Flutter | 3.38.1 | 3.44.1 |
| Dart | 3.10.0 | 3.12.1 |
| Android (API) | 21 | minSdk 21, compileSdk 34 |
| iOS | 15.0 | 15.0+ |
firebase_core |
4.10.0 | 4.10.0 – 4.11.0 |
firebase_messaging |
16.3.0 | 16.3.0 – 16.4.0 |
flutter_local_notifications |
22.0.0 (transitive) | 22.0.0 |
mehery_sender |
— | 0.1.10 |
0.1.8 - 2026-06-19 #
Integration-hardening release: proper Flutter plugin, documented host setup, CI, privacy/security guides, and production-safe defaults.
Added #
- Flutter plugin — Android native code auto-registered via
pubspec.yamlplugin:(com.mehery.sender); no manual copy of Kotlin into host apps. Pushapp.navigatorObservers— wire onMaterialAppfor automaticpage_open/page_closedevents.MeSendDeviceRegistrationStateandPushapp.registrationState— lifecycle stream (pending,registered,failed,tokenRefreshed) plusregistrationSnapshot.meSendParseTrackNotificationArgs()— safe parsing for nativetrackNotificationmethod-channel payloads.configureMeSendFirebaseBackgroundInit()— FlutterFire options for background FCM handler.- CTA URL controls —
meherySenderCtaUrlAllowedHosts,meherySenderCtaUrlValidator,meSendIsCtaUrlAllowed(). - Account switch —
login(newUserId)delinks previous user automatically (no manuallogout()required). - Automated tests — identifier/payload parsing, registration gating, push classification, route observer, method channel, registration state, CTA allowlist (57 tests).
- GitHub Actions CI —
flutter analyze,flutter test, example Android APK + iOS simulator build (.github/workflows/ci.yml). - Documentation
- README.md — compatibility matrix, setup checklist, registration state, CI
- IOSREADME.md — optional NSE / Live Activity / push-only paths
- VERSIONING.md — semver & deprecation policy
- PRIVACY.md — data collection & GDPR/CCPA host checklist
- WEBVIEW_SECURITY.md — unrestricted JS & CTA allowlist
- PUBLISHING.md — pub.dev publish checklist & false_secrets audit
Changed #
- Monolith split —
lib/mehery_sender.dartis a barrel; implementation inapi/,push/,in_app/,websocket/,widgets/(part/part of). - Firebase —
firebase_core ^4.10.0,firebase_messaging ^16.3.0;flutter_local_notifications ^22.0.0(transitive). - Minimum SDK — Dart
>=3.10.0, Flutter>=3.38.1. - API logging —
meherySenderApiLoggingEnableddefaults tokDebugMode(off in release). - Routine APIs —
sendEvent,login,initPage, etc. queue or no-op instead of throwing when device registration is pending (meherySenderStrictRegistrationModeopt-in for throws). - Route observer — immediate page events (removed 5s delay).
- Example app — aligned with README;
dependency_overridesremoved. - Android bridge — unified
mehery_channel(ping,trackNotification); EventChannelmesend_event_channelregistered in plugin. - Deprecated —
typedef MeSend = Pushappmarked@Deprecated; usePushapp.
Fixed #
- Analyzer / build —
super_tooltipAPI compatibility; PiP missing asset replaced with bundled icon. - Payload parsing — defensive parsing for in-app template fields (no cast crashes on malformed JSON).
- Background FCM — documented/init pattern for
Firebase.initializeAppwith hostfirebase_options. - Duplicate FCM listeners — single attachment via
MeSendPushNotificationDisplay.ensureInitialized(). - In-app overlays —
navigatorKey/ mounted context guards; staleBuildContextcrashes reduced. - Slack / debug webhooks — removed hardcoded URLs and debug telemetry scaffolding.
- Unused dependencies — removed dead
pubspecentries from earlier revisions.
Compatibility matrix (0.1.8) #
| Component | Minimum | Tested |
|---|---|---|
| Flutter | 3.38.1 | 3.44.1 |
| Dart | 3.10.0 | 3.12.1 |
| Android (API) | 21 | minSdk 21, compileSdk 34 |
| iOS | 15.0 | 15.0+ |
firebase_core |
4.10.0 | 4.10.0 – 4.11.0 |
firebase_messaging |
16.3.0 | 16.3.0 – 16.4.0 |
flutter_local_notifications |
22.0.0 (transitive) | 22.0.0 |
mehery_sender |
— | 0.1.8 |
Hosts within this matrix do not need dependency_overrides for Firebase packages.
Migration from 0.1.7 #
- pubspec — bump
mehery_sender: ^0.1.8,firebase_core: ^4.10.0,firebase_messaging: ^16.3.0; remove Firebasedependency_overridesif present. - Android — remove any manually copied
lib/android/Kotlin; rely on plugin merge. Rebuild afterflutter pub get. - iOS —
cd ios && pod install(example lockfile uses Firebase 12.15.x). - MaterialApp — add
navigatorObservers: pushApp.navigatorObserversfor automatic page tracking. - Background handler — call
configureMeSendFirebaseBackgroundInit(options: DefaultFirebaseOptions.currentPlatform)beforeFirebaseMessaging.onBackgroundMessage(...). - Foreground push — use
MeSendPushNotificationDisplay.ensureInitialized()afterFirebase.initializeApp; do not attach FCM listeners twice in host code. - Optional — subscribe to
pushApp.registrationState; setmeherySenderCtaUrlAllowedHostsfor production in-app HTML (WEBVIEW_SECURITY.md).
0.1.7 #
0.1.0 #
First semver-aligned integration baseline for production hosts.
Added #
firebase_coreas a direct dependency (required for FlutterFire imports and pub.dev validation).- PushApp-style README and
PushSessionGeoDatafor session geo API.
Breaking #
- Class rename: public SDK entry type
MeSend→Pushapp. A compatibility aliastypedef MeSend = Pushappwas added (now deprecated as of 0.1.8). - Identifier format:
Pushapp(identifier: …)expects the full app id from the Mehery dashboard (e.g.demo_1751694691225). Tenant = substring before the first_; channel id = full string. Legacytenant$channelstill parsed. - Session geo:
postSessionGeorequires app-suppliedPushSessionGeoData(no random geo).postSessionGeoWithRandomSampleremoved.
Migration from 0.0.x #
- Replace
MeSend(...)withPushapp(...)(or keepMeSendalias temporarily). - Update
identifierto the dashboard full app id (or keep legacytenant$channelif already used). - Replace random/sample geo calls with explicit
PushSessionGeoDataandpostSessionGeo(geo). - Add
firebase_coreto hostpubspec.yamlif not already present.
0.0.12 #
- README added.
0.0.11 #
- Fixed null assertion warnings; minor improvements.
0.0.10 #
- Fixed null assertion warnings; minor improvements.
0.0.9 #
- Fixed null assertion warnings; minor improvements.
0.0.8 #
- Fixed null assertion warnings; minor improvements.
0.0.3 - 2025-07-18 #
- Initial published features (push registration, in-app messages, events).
0.0.1 2025 #
- Initial package scaffold and Mehery PushApp SDK prototype.