- SDK no longer checks for the bluetooth state (on / off). This information used to be valuable in the past due to the fact that bluetooth off meant no iBeacon detection.
As this behavior was changed a couple of years ago, this information no longer provides enough value and triggers a popup asking for a permission.
- CoreBluetooth dependency removed.
- MocaDriver no longer takes into account the bluetooth status to start or stop scanning iBeacon regions.Fixes and improvements
- Improved Geofence evaluation logic. It does not trigger enter or exit events in scenarios where the location accuracy is not enough to determine if inside or outside the geofence.
Fixes and improvements
- Added additional protection against a potential crash after calling reverseGeocodeLocation:preferredLocale:completionHandler: method.
This method is available since iOS 11.0, despite of that, some iOS 11+ devices will anyway crash with a “unrecognized selector sent to instance”.
(crash is now handled properly).
- AFNetworking could potentially return a 200 OK response while calling a “failure” block”, generating a crash. Added code to properly handle this scenario.
- bugfix: Do not attempt to show PopUpView if the parent View is nil.
- bugfix: WiFiOnly Switch was activated after muting SDK Notifications
Fixes and improvements
- When initing the SDK without MOCAConfig.plist, load the default device api url as well.
- Added a new setting to mute all campaign notifications. Activate it by calling [MOCA muteNotifications:YES]
Fixes and improvements
- Fixed a bug that completely shut down proximity services instead of just disable proximity drivers making impossible to restart it afterwards.
Fixes and improvements (Internal)
- Fixed segmentation for PurchaseHistory, and other LazyCollections.
- Added doesNotContain Operator
- Synchronize Instance serialization to avoid mutate collections while fast enumerating.
- Add additional checks in the RegionManager Region Operations to ensure weak references are still valid.
- Add additional checks in the ProximitySync isEqualsTo method.
- Added YOUR_APP_KEY_HERE check. Throw an exception if this happens.
- Added location to custom events
- Added location to Campaign events
Fixes and improvements
- Fixed a bug that reported wrong result of UIBackgroundFetch
- JourneyManager: Do not process EventBus messages during initialization
- PermissionHandler: Avoid iterating listeners while fast enumerating them.
- Added validations for certain non-ISO country codes returned by iOS.
- JourneyManager subscribes once per key (instead of once per experience).
- EventBus: Added an additional mutex to event buffer
- EventBus: Added additional mutex for other critical sections.
- EventBus: Use Async Queue to dispatch events always (not only while dispatching buffer events)
- Privacy enhancement: Send the device name as a md5 hash.
Fixes and improvements
- Improved handling of bluetooth radio states.
- Save user automatically in moca cloud.
- Added instance upload on background fetch
- Do not track PlaceMarks if do not have at least country.
- Improved local push logging for Regions
- New Event OnMocaReady allows to perform tasks once the SDK has been completely initialized.
- AppTrigger is now a specialization of AutomationTrigger
- Triggable tags (change on a Tags trigger evaluation of Variants / Campaigns / Experiences).
- Support for DWELL triggers and DELAYED Triggers.
- New Triggable event: on location change
- New Segment variable: location.age, it returns the location age in seconds.
- Segmentation engine: ability to compare objects with or without case sensitivity
- Segmentation engine: Support for NotIn operator.
- AppInstall trigger is valid during the first 3 sessions, not only the first time.
- Visit tracking returns placemarks names always in english.
- Minor code formatting improvements.
- JourneysManager: Avoid mutating collections while fast enumerating.
- Add tag to current profile instead of instance directly.
- RegionGroup proximity Tracking
- Campaign Attribution tracking for RegionGroups
- Mutex on the Event Bus.
- Added new iPhone model names.
- User AutoLogin if still logged in.
- Tag serialization works the same way than in Android.
- Fixed bug in search view verb string.
- Segmentator now compares Strings with Numbers correctly.
- Region Group remembers its last triggered child region.
- Segmentator supports count for ViewedItems.
- Synchronize CLRegions in a smarter way, so regions are monitored again ONLY if they are not being monitored yet.
- Fixed a bug that prevented the moca driver from starting correclty when passing from “Denied” Location permissions to any other Location permission.
- Improved debug logging with local push.
- Improved handling of Region Group events
- Added optional logging via local push notifications. Useful to debug SDK location engine. ( Use CUSTOM_DEBUG_PUSH TRUE in the mocaconfig.plista)
- Fixed a bug that could prevent a tag from being loaded from local storage.
- Improved tag loading code to take into account `NSNull` values.
- Only track exit beacon events when the state has transitioned from inside to outside (and not Unknown -> Outside), so no more “fake” exit events are sent. This also solves a performance issue when a beacon Region contains hundreds of beacons.
- Move de-serializing data work off the UI Thread.
- Background fetch callback could be called more than once by the CRM Sync client if the data was not processed correctly.
- Memory handling improvements.
- Improved MOCA Event Bus memory management to fully avoid memory leaks.
- MOCA Event bus process events publishing asynchronously using GCD.
- Improved OnEnter Trigger logic to be more tolerant to beacon exits. This greatly increases the detection confidence for dwell triggers with bluetooth beacons.
- Supports the INSTALL_EVENT automation trigger
- Automatically handles custom scheme links so the app itself invokes them and closes the webview afterwards.
- Parse delayMs in location group trigger
- remove PUT calls when saving user
- Load cart in user object
- Expose Cart in the MOCA inteface
- Use MOCASerializableObjects for persistance in the ItemSet class.
- Change all PUT methods to POST.
- Unit tests of new Segment Lexer
- Bugfixes: Fixed an npe generated while loading ViewItem from storage
- Added missing header to Cloud Tags Sync
- Fixed the verb used in the “rate” event
- Items added to the cart using the update method are now persisted correctly
- Custom event tracking builder accepts null properties (and discards them)
- Support for triggers on dwell. (backend sync api 2.1)
- Improved exit beacon handling. Beacon is treated as “outside” after ~15 seconds of not having it in range.
- Experiences are always a notification first, and if user taps on it, it shows the associated content. On iOS 9, the behavior remains the same.
- Included additional protections against nil system properties reported by iOS.
- Added additional checks in NAO Beacon configuration.
- Remote notifications push token is no longer required for proximity-only features.
- MOCA Indoor Client is restarted after receiving a valid NAO key. This caused the indoor clients to not to return location objects if they were created inmediately after iniitalizing the app for the first time.
- Proximity NAO Clients starts with low power mode by default. This setting can be changed in the config by adding the CUSTOM_NAO.PROXIMITY_POWER_MODE = HIGH key-value in the MOCA SDK config.
- Added a new Indoor Client call in order to upload logs to NAO Cloud: - (void) uploadLogs;
- Check incoming notifications are MOCA notifications before Manage them. This improves the compatibility with 3rd party SDKs.
- Added the API method [MOCA isMocaNotification:notification] which unifies the checking of a local or remote notification.
- Full support for the UNNotification API. UILocalNotification still supported for devices < iOS 10
- Fixed a visual issue in the iPhone X that caused that was difficult to press the X close button of the experiences.
- Added parameter in the sync call to inform the backend about the requesting operating system
- Fixed a bug that caused segments in experiences to not to be parsed correctly.
v2.3.3 / v2.3.3n
- Allow set the location permission strategy property in the Config object.
- Check if beacon setting is enabled before starting to range beacons
- Added an error message when trying to create an indoor client without the NAO Dependency available.
- Fixed a bug in the Indoor Tracker (indoor analytics) that prevented the module from starting.
- Sent the entity id in the url when performing the entity call.
- Full support for iOS new location model permissions
- In the geo events, the permission status is also tracked
- The app status (background, foreground) is tracked in the geo events
- bugfix: Solved an issue that could cause a user to not to receive a push notification (with content-available: 1) after opening app the application
- All UI method calls are done from the Main Thread.
- Support for beacon detection in foreground with the "When in use" location permission. (before this version, beacons always needed the "Always" permission)
- Restored MOCAExperienceRepeatImmediately. It is needed for custom actions.
- Enhanced: Imrpoved response time of OnExit Geofence.
- Enhanced: Ensure all UI calls are done in the Main thread.
- Fixed: bitcode support
- Added a new property needed for a future A/B testing feature.
- Added a method to get the default action delegate [[MOCA ProximityService] actionDelegate]
- Rename a symbol in the Apple reachability class to avoid conflicts with 3rd party libs