April 27th, 2021
The SDK interface has been completely rethought to be easier to use and more meaningful:
Messageclass fields have been renamed.
- Campaign action callbacks signature and name have been modified, and are using the new
ActionInfoclass as argument.
- The custom handling of Custom Web Page campaigns has been removed, we recommend to use silent pushes instead.
- All calls to
FollowAnalytics.push.*methods must now be made on the UI thread.
- Other changes in the SDK public interface, make sure to check our updating guide.
You will find more info in our Updating to 7.0 guide.
- Contextual campaigns triggers can be combined together with a new
THENoperator, additionally to the existing
- If InApp archiving is enabled, an InApp message can be re-displayed in the exact same way as it was displayed by the SDK, thanks to the
Message.displayInApp()method. See the Archiving messages section for more details.
- There is a new SDK callback
onInAppNativeActionwhich is called whenever a Native Alert or Evaluation Booster InApp campaign dialog is closed. It provides to your app all information regarding the action which closed the InApp. See the Behavior on native InApp action section for more details.
Note that some of those new features depends on their FollowAnalytics platform counterparts. Please contact your CSM manager to know their availability on the platform side.
Message.titlewhich was not set for Custom Web Page campaigns.
- Fixed some edge cases on compaign triggers combining geofencing/tagged/session events.
- Fixed the url opening on Interactive Notifications when they are dismissed.
April 8th, 2021
- Fixed a potential crash in
February 5th, 2021
- Improved the console message when the API Key set in the
Configurationis missing or invalid.
- Removed an incorrect console message
[ERROR] : FollowAnalytics SDK not initializedwhich was printed only in
debugat SDK initialization.
January 21th, 2021
- Added compatibility with Swift Package Manager.
- Campaigns can now be triggered on an event's key/value condition, and on multiple values.
- Now the
apiModeparameter in the
Configurationis not set automatically according to
isVerbosevalue. See the Updating from 6.8 to 6.9 section for more details.
- Improved communication with server when network is unstable.
- Improved the queueing of InApp campaigns, to guarantee only one InApp can be displayed at the same time.
FollowAnalytics.getOptInAnalytics()methods to the JS interface.
- Added a complete description of the FollowAnalytics JS interface to our documentation.
- In order to extend the stats, a new log is sent whenever something prevents a campaign from being displayed.
- Fixed an issue where some crash report logs were permanently kept into the device's local storage when they were exceeding a certain size.
- Fixed the JS interface methods in order to accept null arguments.
- Embedded KSCrash and SSZipArchive dependencies into the SDK framework.
December 16th, 2020
- Added contextual delivery for silent pushes.
- Fixed an issue where a geofencing campaign could be triggered twice if the user is already in the geofence area at the time the SDK retrieves the campaign definition.
December 8th, 2020
- Fixed the swizzling of the
application:handleEventsForBackgroundURLSession:completionHandler:AppDelegate method, which was causing a crash if a background
URLSessioncompletes while the app is in background.
October 19th, 2020
- Fixed a background crash that could occur after the app is put in background for more than 30s on SDK v6.7.2.
September 29th, 2020
- Fixed an issue, on projects configured with the SceneDelegate, where the deviceId alert would not be displayed after opening the device registration email link.
- Added support for multi windows applications on iPad.
- Additional fix for contextual campaigns based on session events when the user is opt-out analytics.
September 11th, 2020
- Fixed an issue where a new push message may not be archived if the app was closed.
- Fixed the sending of the push token at first app launch when the project is not configured with the SceneDelegate lifecycle and the user is opt-out analytics.
- Fixed an issue where contextual campaigns based on session events were not triggered when the user is opt-out analytics.
- Fixed the sending of the push token at first app launch when the project is not configured with the SceneDelegate lifecycle and the user is opt-out analytics on SDK v6.7.0.
August 28th, 2020
- Added compatibility with projects configured with the SceneDelegate lifecycle.
- Improved the push notification registration status managing in cases where notifications are allowed in the OS settings, with only the Lock Screen and/or Notification Centre enabled and Sounds/Badges/Banners disabled. Now in those cases
trueand the SDK will send to the API a push registation status set to
openNotificationSettingsEventually()will also open the notification settings screen when notifications are allowed in the OS settings but none of the alerts, sounds or badges options are enabled.
- Now, when a push notification is opened, the
isReadproperty of the related
FAMessageis automatically set to true.
FANotificationInfo.campaignIdwhich is now deprecated. More info in the Implement custom behavior on notification tap section.
FAMessage.campaignId, which is now deprecated. More info in the Archiving Messages section.
- Added a new property
FAMessage, providing the iOS
UNNotificationRequestunique identifier for archived push messages. More info in the Archiving Messages section.
- Now it is possible to retrieve the
- Fixed an issue where an event without detail could trigger a contextual campaign that requires a detail.
July 17th, 2020
- Now the SDK allows you to handle a flag to opt-in/opt-out for notifications from your app. More info in the Opt-In Notifications section.
- Added the
FollowAnalytics.openNotificationSettingsEventually()method that opens the iOS app settings screen to let the user enable notifications.
- Added the
FollowAnalytics.getPushNotificationsRegistrationStatus()method that provides the FollowAnalytics Push campaigns registration status.
- Added all those new methods to the JS Interface.
FAMessage.urlis the url of the Rich Media attachment if the message comes from a Push campaign.
- Data Wallet feature is no longer available.
June 11th, 2020
- Fixed an issue with the
remove(values: Set<String>, toSet: String)method, where the request was not sent to the API.
May 29th, 2020
- Fixed an issue with silent push archiving where
FAMessage.isSilentwas not persisted.
May 20th, 2020
- Now silent pushes are also archived when push messages archiving is enabled.
- Improved the sending of the push token at the initial launch.
May 14th, 2020
- Fixed an issue that was ending the current session when the application is put in background.
May 8th, 2020
- Added the possibility to disable the Swizzling done by the SDK. See the Disabling Swizzling documentation for more information.
- Fixed other possible cases where Scheduled InApp campaigns could be displayed while the app is in background.
- Added documentation about how to create and handle Interactive Notifications
- Now opening an Interactive Notification by tapping on a custom action button will count in the push opened stats.
- Now, by default, the last known location is no longer logged when a session starts.
- Added new parameter
lastKnownLocationEnabledto the configuration to enable the logging of the last known location when the session starts. See the Updating from 6.4 to 6.5 guide for more information.
March 16th, 2020
- Fixed a bug where Scheduled InApp campaigns could be displayed while the app is in background.
March 13th, 2020
- Now in In-App Custom Web Page, any link that must be opened in another window/tab (for instance, with
target="_blank") will be opened outside of the In-App and will be handlable in the shouldOpenUrl() callback.
- Fixed In-App Native Alert statistics.
- Fixed campaigns retrieving that was not occurring immediately after re-opening the app if the session was closed.
- Fixed small UI glitches that were occurring while opening links from some In-App Templates.
- Improved documentation with an example about how to handle Universal Links with the SDK.
- Improved stability.
February 10th, 2020
- Improved the Application Delegate swizzling by keeping intact the original methods signature. Cohabitation with other SDKs, like Firebase, is now fully functional.
- Fixed Message objects that were archived with null properties for In-App templates.
- Fixed the deallocation of the View Controller responsible to present In-App campaigns.
- Fixed the queue responsible to present campaigns to handle In-Apps load fails.
December 16th, 2019
- Fixed system popup displaying when Location Services is disabled.
December 12th, 2019
- Fixed crash at SDK initialization when provided
December 11th, 2019
- Replaced the
automaticallyOpenNotificationURLConfiguration parameter with a new callback
shouldOpenURLallowing URL handling on the application side before they get opened. To understand better this change check our Updating from 6.4.0 to 6.4.1 guide.
- Added inline video and autoplay to Custom Web Page In-App campaigns.
- Added possiblity to use FollowAnalytics interface from JS code inside Custom Web Page In-App campaigns.
- Added possibilty to share device id across applications of the same publisher through Keychain Sharing.
- Fixed opt-in analytics statistics.
- Fixed displaying of In-App campaigns from view controllers inside tab bar controllers.
- Fixed dismissing of In-App campaigns that could also dismiss an app modal view.
- Improved geofencing campaigns triggering when more than one campaign shares the same exact coordinates.
- Fixed crash when calling SDK methods while it's not initialized.
- Improved SDK Validator information for situations where the API Key is not defined, incorrect or when there is no internet connection.
December 11th, 2019
- Fixed badge number updating from Push Notifications.
October 7th, 2019
- This version brings breaking changes, it's highly recommended to check our Updating from 6.3 to 6.4 guide.
- Increased minimum target to iOS 9.0.
- Added new method
requestProvisionalNotificationAuthorizationfor allowing delivery of quiet notifications from FollowAnalytics notifications.
- Added new methods to allow logging of locations:
logLocation(withLatitude: Double, longitude: Double)
- Removed the automatic location update done internally by the SDK.
- Improved geofencing feature stability.
- Now calling
enableGeofencing()in no longer needed, geofencing works out of the box as soon as your app get the "Always" location authorization.
- Fixed fullscreen In-App displaying on iPhone X and newer devices.
onNotificationTappedthat could be called twice in some conditions.
onNotificationTappedsignature, now it take a non-null
notificationInfoobject and a non-null
onNotificationReceivedthat was not called in background in some conditions.
- Added new callback
onNativeInAppButtonTappedto handle the tap on custom buttons for
- Added new parameter
automaticallyOpenURLto the configuration.
- Fixed push notification on iOS 13 for apps built with XCode 11.
- Fixed crash on iOS 13 for apps built with XCode 11.
- Removed deprecated callbacks
- Fixed crash when receiving a notification in foreground on devices with iOS under 10.0.
- Bug fixes and stability improvements.
September 24th, 2019
- Continuing stability improvements
September 18th, 2019
- Stability improvements
September 9th, 2019
- Fixed crash on devices with iOS < 10.0
- To add
FANotificationExtensionfrom CocoaPods check our updated instructions
July 25th, 2019
- Improved communication with FollowAnalytics platform for the push notification registration request.
July 5th, 2019
- Fixed bug on
onNotificationTappedwhen app is in foreground.
June 24th, 2019
- Fixed crash when an invalid
detailsargument is passed to
FollowAnalytics.logError(). In this case this argument will be ignored and the Event/Error will be sent with no
details. To be valid, the
detailsargument must be one of the following : a
String, or a
Dictionaryrepresenting a valid flat JSON object (i.e. that doesn't contain any nested Dictionary or Array field). More info in the Tagging Events and Errors section.
June 3rd, 2019
- Now in-app templates embedded videos will start playing automatically.
May 16th, 2019
- Added new callback
onNotificationTappedto handle the tap on notifications.
- Added new callback
onNotificationReceivedto handle notification reception.
- Now external links in in-app templates will be opened outside of the app.
- Fixed and improved sessions management.
- Fixed bug related to campaign statistics.
- Fixed bug where notifications was not displayed in foreground when
Force push in foregroundwas selected in the campaign editor.
- Deprecated callbacks:
April 19th, 2019
- Fixed crash in Xamarin iOS SDK when displaying fullscreen in-app templates.
April 8th, 2019
- Fixed issue where debug logs would be printed while Configuration.isVerbose was set to false.
April 4th, 2019
- Fixed issue where in-app campaigns would be displayed while campaigns were paused.
March 18th, 2019
- Improved Configuration by adding attributes and callbacks.
getSDKPlatform()methods are available from In-App templates.
- Fixed a minor bug related to Geofencing and In-App templates.
January 3rd, 2019
- Fixed a minor bug for the LogAction capability in In-App templates.
January 2nd, 2019
- Added the LogAction capability to In-App templates.
- Improved the background color handling for campaigns.
- Improved the handling of different AppDelegate protocol usage.
- Fixed a layout mishap where some close buttons would appear out of the clickable area.
- Fixed a bug causing some crash reports not to be sent to the platform.
- Dropped FAFollowApps in favor of FollowAnalytics
- The SDK no longer replaces UIApplication's delegate, instead it uses method swizzling on the existing delegate.
Jul 11th, 2018
- FAWebView deprecated in favor of a WKWebView solution using our new FAWKWebViewJSBridge
June 12th, 2018
- New GDPR feature
- New Datawallet feature
- Fixes a potential deadlock in handling network requests
- Fixes an issue with FollowAnalyticsMutableConfiguration where on device, api were sent in production mode, even if debug set to true
- Fixes typo in FollowAnalyticsAPIMode
May 18th, 2018
- Breaking: deprecates FAFollowApps, replaced with FollowAnalytics. When updating, at minimum, all imports must be changed to
<FollowApps/FAFollowApps.h>. The new FollowAnalytics interface is available by importing
<FollowAnalytics/FollowAnalytics.h>. For the time being all calls to FollowApps are marked as deprecated but continue to function without change. The documentation for the new FollowAnalytics interface is in the header files. Please keep importing
<FollowApps/FAFollowApps.h>if you don't wish to adopt the new interface.
- overall improvements in network handling with better offloading from caller thread
- fixes an AppStore publication problem when using strip-frameworks.sh. It must be used for both FollowAnalytics.framework and FANotificationExtension.framework
- new opt-in analytics feature
- fixes an issue about country detection
- deprecation of previously provided Settings.bundle
- for manual installs the directory structure of the distribution changed, please see the details in the doc. Additionally the FANotificationExtension is included in the distribution zip file. In the future we intend to include FANotificationExtension as a sub-spec to FollowAnalytics pod.
- documentation clarifies integration steps such as use of debug flag
- new log subsystem
February 26th, 2018
- Fixed a bug that prevented InApps to be displayed under special conditions.
- Added public method to get the status of the user Notification preferences.
- The framework is now dynamic (available only iOS 8+).
⚠️ To use the new framework, please use
We kept the old framework static (compatible with iOS 6) on the pod
FollowApps who should not be updated for future releases.
November 24th, 2017
- Fixed bug when openURL was called and the notification was received in foreground.
November 23th, 2017
- Fix for title and identifier in iOS Push Notifications.
November 22th, 2017
- Added title, subtitle and custom sound for contextual notification.
- Added a delegate with a completion handler when openUrl is called from a notification.
- (void)followAppsNotificationHandleOpenURLWithCompletion:(void (^_Nonnull)(void))completionOpenUrl
- Fixed random crash that appeared during the deserialisation of NSDecimalObject
- Handle an unlimited number of geofences
- Remove warnings from Xcode 9
- Fixed new session not being called after the third change of the userId.
- Send notification token for each new session
August 2nd, 2017
- Fix fullScreen inApp not appearing at forefront of the tabulation bar when a navigation bar was also present.
July 27th, 2017
- Fix crash related to FALog.
- Replace SSZipArchive as a framework dependency.
July 12th, 2017
- Remove warnings.
- Update third party.
June 9th, 2017
⚠️In this release, you will have to change the configure method⚠️
- New initialize method:
+ (BOOL)configureWithId:(nonnull NSString *)FAId sharedAppGroup:(nullable NSString * )appGroup automatise:(BOOL)automatise debugStateOn:(BOOL)isDebug options:(nullable NSDictionary *)options
- Add a new framework for Notification Extension (FANotificationExtension).
- Add badge management. For more information, please refer to the latest documentation.
- Add new method to let the developer decide when the geofencing should be activated.:
May 26th, 2017
- Add a method for configuring follow with the watch.
- Fix followAppsShouldHandleParameter and deepLink called twice On iOS 10 and later when the app is opened from a remote notification.
April 26th, 2017
Added a delegate method for registering notification categories:
- (void)followAppsRegisterNotificationCategoriesIf you have notification categories, you should register them inside this method.
Fix one duplicate symbol with third party.
- Fix followAppsShouldHandleParameter called twice On iOS 10 and later when the app is opened from a local notification.
April 12th, 2017
- In-App template: SDK 5.0 introduces a new type of campaign: inApp templates. For more information, please refer to the latest documentation.
- Campaign Storage - Inbox support
New feature: all scheduled campaigns received by a device can be archived locally and accessed from the developer's code, formatted as a message object.
- Classes :
- Object :
- Classes :
For more information, please refer to the documentation.
User Attributes: Some methods are now deprecated and replaced.
:::objective-c + (void)addCustomUserAttributeSet:(NSSet )attributeSet forKey:(NSString )key + (void)removeCustomUserAttributeSet:(NSString )attribute forKey:(NSString )key
are now replaced with:
+ (BOOL)addCustomUserAttributeSet:(NSSet *)set toSetWithKey:(NSString *)key //Add a set of string element to the specify set. + (BOOL)removeCustomUserAttribute:(NSString *)attribute fromSetWithkey:(NSString *)key //Remove one element from the specify set.
You can also use:
+ (BOOL)addCustomUserAttribute:(NSString *)attribute toSetWithKey:(NSString *)key //Add only one string element into the specify set + (BOOL)removeCustomUserAtributeSet:(NSSet *)set fromSetWithKey:(NSString *)key // remove a set of string element from a specify set
Every method about user Attribute now returns a
January 16th, 2017
- Added Localized string when displaying push in foreground.
- iOS10 native display format notification in forgreground if forcePushInForeground activated.
December 7th, 2016
Improves iOS 10 notification compatibility.
If you do not use CocoaPods, please add the following library to your project:
UserNotificationsThis requires you to implement the following method to handle notifications:
:::objective-c - (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler
November 3rd, 2016
- Fix on deep-linking
- Improve Device ID registration
- Display validator when opening app from specific link
September 30th, 2016
This version has an issue with deep-linking, where some deep-linking might trigger the display of the device ID in the app. Please stop using this version and update to v4.2.1.
AdaptiveSDK now allows to fetch tags from Segment
️Removed deprecated method:
- (void)followAppsShouldHandleParameters:(NSDictionary *)openingParameters
You should now use
Validator now shows the device ID
Automatically register the device ID if the app is open from the associated e-mail sent from the product.
new deprecated methods:
+ (void)pauseRichCampaignDisplay + (void)resumeRichCampaignDisplay
+ (void)pauseCampaignDisplay; + (void)resumeRichCampaignDisplay
resumemethods now work on all kinds of campaign.
April 29th, 2016
- SDK can now handle App Deep Linking URLs, we directly call openURL method, so you don't have to add some code in your application to handle it.
- Further improved compatibility with 3rd party libraries (KSCrash)
- Improved TUNE integration, the validator check if TUNE is correctly configured with Follow.
- Developers can now have access to the original AppDelegate (Swift only)
March 21st, 2016
- Improved compatibility with 3rd party libraries
- Multi device support
March 1st, 2016
- Add User Attritbutes feature
- Fix for delivery Notification containing deep link when application was killed
- Fix In-App Notification delivery
- Improved Push Notification registration
February 8th, 2016
- Improved campaign and deep link parameters handling
- Bug fixes
January 26th, 2016
- Allow fetching of custom params from last Push Notification
October 15th, 2015
- Improvements for 3rd party library conflicts
- In-App campaigns can now be paused/resumed according to UI needs
- same goes for OpenURL in campaign buttons
- SDK is now full Bitcode
- URL schemas management improvements
- Validator improvements, checking valid API Key existance
- SDK will now warn you when trying to perform logs without initializing the SDK
September 21st, 2015
- Better integration with third party frameworks (FMDB, Mapbox, KSCrash)
August 28th, 2015
- AdaptiveSDK: You can now automatically benefit from the tags you have set using Mixpanel, Google Analytics, Localytics or UrbanAirship
- Validator now helps you check your configuration of the SDK
- Fixed possible occasional crash in background
- improved readability of header file and documentation
July 15th, 2015
- Contextual Campaigns feature
- Improvement on session count reliability
- Fix for when receiving 2+ coupon campaigns at the same time
April 20th, 2015
- Fixed a bug related to crash handling
- changed interactive notification callback method
March 12th, 2015
- Improvements for edge cases on iOS 8 interactive notifications
March 4th, 2015
- Fixed iOS 8 notifications with actions (added a callback)
November 4th, 2014
- Optimizations for edge cases
October 21st, 2014
- Fixed issue where application delegate would not receive touches
September 29th, 2014
- iOS8 and xCode 6 compatibility: Push registration Interactive Push
- General Availability of Attribution Analytics feature: integration with MobileAppTracking SDK
- Ability to display the device ID in order to target a single device for push test purpose through internal API and url scheme
- Improved session reliability considering foreground/background application lifecycle
- Easier integration: SDK delivered both as a pod and a framework
May 5th, 2014
- crash logs were not matching what's done on Android and what the server is now expecting. It's changed, and 1.4.8 should not be used.
Should not be used, see 1.4.9
- crash logs are now fully detailed. As of this version, they will not be shown in the error section of the platform, only taken into account for the Crash analysis section.
April 28th, 2014
- The switch in Settings / Application is now "End user usage reports" instead of "Send usage reports"
April 25rd, 2014
- A crash log is not sent anymore if the user kills the app in background. It now notifies the platform that the app was terminated
- If the app crashes in background out of an SDK session (for instance the app has a task that lasts 3 minutes and crashes at the end), it has no impact on the SDK. This crash will not be reported. Previously, it would be randomly reported on other sessions.
April 23rd, 2014
- Logs are now limited to 60Kb overall.
- Performance improvements during intense logging activity.
- Change on setUserId: it now starts a new session every time it's called, if the userId sent is different from the previous and not empty.
April 16th, 2014 * Added a method to unset the user Id (starts a new session).
April 10th, 2014
- New fix for arm64 (iPhone 5S, iPad mini Retina, etc.) on log saving.
April 7th, 2014
- SDK would not log any events where the developer had set the details field to "nil".
March 18th, 2014
- Updated crash lib, mostly to fix issues with arm64.
March 8th, 2014
- can now log details as String or Hash.
- can track push openings