All notable changes to this project will be documented in this file.
Note that Objective-C class names are prefixed by SNR
. In the changelog below, these are names used in Swift, without the prefix.
- Some potential issues with retrieving system push consent by the SDK. The SDK set the constent to false when the general consent for the application was enabled, but at least one of the following options was disabled: alerts, sounds, badges.
Synerise.settings.tracker.eventsTriggeringFlush
option in settings to let you set the list of event actions which will trigger instant sending of all events in the queue. The default array contains only push event's actions.
- All events connected with push campaigns will flush the queue and send events immediately.
- Improvements to push notifications registration.
- Improvements to stability.
- Nullability of
clientId
property in theToken
model.
- Improved mechanism for checking capping in in-app messages. The number of views no longer resets when the account's UUID changes.
- Improvements to stability.
- Global Control Group support for in-app messages. From now on, you can use this feature in in-app messaging communication. This lets you take your marketing efforts to the next level and provides a solid foundation for accurate measurement of campaign effectiveness. Read more at https://hub.synerise.com/docs/settings/configuration/global-control-group/.
- We added a new
Client.authenticate(tokenPayload:authID:success:failure:)
method. This method signs in a customer in with the provided token payload. - We added a new
Client.getUUIDForAuthentication(authID:)
method. This method retrieves the current UUID or generates a new one from a seed (authId
). clientId
property in theToken
model.
- We added additional validation for the
Synerise.initialize(clientApiKey:)
andSynerise.initialize(clientApiKey:baseUrl:)
methods. Now, if you try to initialize the sdk when it's already running, the method is blocked and no action is invoked. - Improvements to stability.
- Some potential issues with notification processing in
NotificationServiceExtension
.
Synerise.settings.sdk.localizable
option in settings to let you localize some strings displayed by the SDK.
- Improvements to stability.
- Issue with non-scrolling in-app messages.
- The delegate method
snr_registerForPushNotificationsIsNeeded()
is invoked when the SDK is initialized completely. - When the
Client.registerForPush(registrationToken:mobilePushAgreement:success:failure:)
method fails, it invokes thesnr_registerForPushNotificationsIsNeeded()
delegate method after a short delay.
- Improvements to stability.
- Swift Package Manager (SPM) support.
- Issue with location of some SDK files in the Documents directory. The old location caused the SDK files to be visible in the shared documents directory if the host application file sharing was enabled.
- Potential issue with native notification buttons when Simple Push campaign contained Rich Media (Single Media) or had a custom notification category identifier.
- Improvements to stability.
- The
Synerise.setRequestValidationSalt(_:)
method accepts nil now.RequestValidationSalt
is not required for Simple Authentication, but we recommend using it for improved security (it needs to be enabled in the Synerise portal first).
- The
notificationServiceExtensionDidFailDecryptionWithError(_ error:)
method inNotificationServiceExtensionDelegate
was not invoked in some cases when decryption failed. - The
push.decryptionFailed
event was not sent in some cases when decryption failed.
Synerise.settings.inAppMessaging.shouldSendInAppCappingEvent
option in settings to enable or disable sendinginApp.capping
event by the SDK.
- Improvements to stability.
Synerise.setHostApplicationSDKPluginVersion(_:)
method which specifies the version of the Synerise SDK plugin in the host application.
- Improvements to stability.
- Potential in-app messaging issue that could have caused blank screen after dismissing a modal displayed over an in-app message. This problem occurred in a specific view hierarchy and modal presentation style when the in-app message template was
TOP_BAR
orBOTTOM_BAR
.
.anonymous
and.google
inTokenOrigin
enumeration type.- LICENCE for the SDK.
ClientStateDelegate
for handling client sign-in state is also invoked when a customer uses Simple Authentication.- The
snr_notificationDidReceive(notificationInfo:)
method inNotificationDelegate
is also invoked in foreground state and in the host app after clicking on notification and move to app.
- Improvements to stability.
- The issue that could have caused incorrect sorting of in-app messages.
- Potential issues with Simple Authentication requests.
tags
property in theClientSimpleAuthenticationData
model.
- Improvements to stability.
- The issue that could have caused a customer sign out in some cases when a customer context was changed.
- Potential issues with sharing data sources related to using
Synerise.setRequestValidationSalt(_:)
before SDK initialization.
- Improvements to stability.
Promotion
model mapping caused in previous versions (3.13.2 and 3.14.0).- Potential issues related to validating models from the SDK due to redundant data (if result model is Dictionary).
- AutoTracking
.plain
mode that sent other events than it should (now, it send onlyscreen.view
events).
- New authentication mechanism - Simple Authentication. It allows identification of customers without implementing more complicated processes such as RaaS, OAuth, or authenticating by third party services, for example Facebook or Apple. Simple Authentication needs only two methods -
Client.simpleAuthentication(data:authID:success:failure:)
to recognize a customer andClient.isSignedInViaSimpleAuthentication()
to check if the customer is signed in and uses the Simple Authentication feature. TheClient.signOut()
method and similar methods are a common way to sign out and clear the user context. - We added a new
Client.registerForPush(registrationToken:success:failure:)
method. It is analogous toClient.registerForPush(registrationToken:mobilePushAgreement:success:failure:)
, but doesn't require themobilePushAgreement
parameter and thanks to that, it doesn't update the customer in the database.
- We changed the behavior when a customer context changes. Now, events that were queued before the context change are force-sent to the previous client profile.
- Improvements to stability.
- We have introduced new extra parameters within the internal screen.content event. This event is sent whenever a screen view is generated, providing information about the specific screen view such as document UUIDs, document slugs, and crucial meta parameters of a document used in a screen view.
- Potential issues related to banner trigger automation.
- In-app events (inApp.capping, inApp.renderFail, inApp.controlGroup) didn't contain the
variantId
parameter, now it's fixed.
- We added additional validation for the
Synerise.changeClientApiKey(clientApiKey:)
method. Now, you try to change the current API key to the same one, it's blocked and no action is invoked. - We updated terminology in header files from 'client API key` to 'profile API key'.
- We added a new
Content.generateDocument(slug:success:failure:)
method. It's analogous toContent.getDocument(slug:success:failure:)
. The old method is deprecated. The new method generates the document that is defined for the provided slug. - We added a new
Content.getRecommendationsV2(options:success:failure:)
method. It's analogous toContent.getRecommendations(options:success:failure:)
. The old method is deprecated. The new method gets recommendations that are defined for the options provided. - We added a new
Content.generateScreenView(feedSlug:success:failure:)
method. It's analogous toContent.getScreenView(success:failure:)
. The old method is deprecated. The new method generates a customer's highest-priority screen view campaign that is defined for the provided slug. - We added models correlating with new methods:
ScreenView
,Document
.
Content.getDocument(slug:success:failure:)
is deprecated now.Content.getDocuments(apiQuery:success:failure:)
is deprecated now.Content.getRecommendations(options:success:failure:)
is deprecated now.Content.getScreenView(success:failure:)
is deprecated now.
- Optimalization of the In-app messaging module.
- Optimalization of the SDK data management.
- Improvements to stability.
- Default value of
recommendationEventType
property inContentWidgetRecommendationsOptions
to.seen
for backward compatibility.
- Added re-downloading in-app definitions after in-app cache operations fail after a HTTP 304 response from the API.
- Reinitialization of the SDK is now synchronized with the SDK launch and can be invoked anytime.
- Improvements to stability.
RecommendationViewEvent
for sending events with recommended item identifiers in one frame.recommendationEventType
property inContentWidgetRecommendationsOptions
to choose whether to sendRecommendationSeenEvent
for each recommendation separately orRecommendationViewEvent
for all recommendations in one frame.
- Creation time of an event is now updated when the event is passed to the SDK by
Tracker.send(_:)
method.
- We added a new
Client.signOut(mode:fromAllDevices:success:failure:)
method. It is analogous toClient.signOut(mode:)
. It is an asynchronous method and notifies the backend that the client is signed out and determines if all other devices should be signed out too. Remember,signOutWithSessionDestroy
mode clears the anonymous session and regenerates the client UUID. TheClient.signOut(mode:)
method is deprecated now.
- The issue that could have caused a crash in some cases in in-app cache operations when API returned error status.
- The
snr_notificationDidDissmis(notificationInfo:)
method inNotificationDelegate
contains the spelling mistake in the name and it is replaced with a new method with a correct name -snr_notificationDidDismiss(notificationInfo:)
. The previous method is deprecated for backward compatibility and will be removed from the 5.0.0 version of the SDK.
- Excess of anonymous log-in requests has been removed.
- Improvements to stability.
- Issue of an additional in-app alert not being displayed when a simple push with action buttons was received in the foreground (existed since version 4.8.0).
NotificationDelegate
for better handling of events from simple push notifications. These delegate methods are invoked when a notification is received, clicked, or dismissed. Additionally, these methods are invoked with aNotificationInfo
object passed in them, which provides the payload and info about the campaign.
- Formatting application name containing special chars to user-agent in networking requests.
- Proper respecting
Synerise.settings.tracker.autoTracking.excludedViewTags
for view controllers in autotracking.
- Improvements to stability.
- Issue that could have caused crash in some cases in networking session management.
Synerise.settings.inAppMessaging.maxDefinitionUpdateIntervalLimit
option in settings to set maximum interval between automatic In-app definition updates. The minimum and default value is 600 seconds (10 minutes).
- The minimum value for
Synerise.settings.inAppMessaging.renderingTimeout
is changed to 1 second. - Optimalization of the In-app messaging module.
- Optimalization of the SDK data management.
- Improvements to stability.
- Optimization of networking requests setup to avoid issues with missing headers.
- Potential In-app messaging issue which caused presenting in-app message when the user was not in the required segment.
- Issue with In-app messaging database execute operations which caused crash when the SDK could not open persistent store for the database.
- In-app messaging triggering issues in some cases. The module was enabled too late, so for example triggering
push.click
events when the app was closed was not possible. - Potential issues with in-app messages processing when the sdk is reinitialized.
- Memory management problems when in-app message was hidden. They were caused by implementing
SyneriseDelegate
methods to handle the SDK actions and choosingSyneriseActivityActionHide
as the activity action. - Issue with in-app messaging mechanisms causing a crash when the SDK could not open the database.
- Potential issue with maintaining anonymous token for networking requests when customer context is changed.
SRInApp.hide
method to JS interface in the In-app messaging module. This method instantly hides the currently presented in-app message. This method is similar toSRInApp.close
, but it is not recognized as user discard.SRInApp.hideAndTrigger
method to JS interface in the In-app messaging module. This method allows triggering the next in-app message instantly after the current message is hidden. The method sends an event built from the provided parameters. This method is similar toSRInApp.closeAndTrigger
, but it is not recognized as user discard.
- Rotation issue after an SDK activity is closed. When an activity was closed, the rotation of the view controller under it was blocked.
- Default action handling for URL and deeplink when delegate was not set. When
SyneriseDelegate
was not set, default actions were not invoked.
SRInApp.closeAndTrigger
method to JS interface in the In-app messaging module. This method allows triggering the next in-app message instantly after the current message is closed. The method sends an event built from the provided parameters.
- All the SDK delegate reference types from weak to strong. This is for secure host app implementation and de-allocating objects by ARC.
Synerise.settings.inAppMessaging.renderingTimeout
default value from 2 to 5.- Exclude unwanted SwiftUI maintaining view controllers from AutoTracking.
- Improvements to stability.
- In-app message timeout mechanism: even though an in-app message timed out, it was was rendered.
- Unnecessary sending of the
inapp.show
event when rendering a timed-out in-app message. - Crash occurring when re-initialization was performed instantly after initialization.
- Issues with mapping response in the
Promotions.getAssignedVoucherCodes(success:failure:)
method.
- The
action
parameter in in-app messaging error messages was changed frominApp.jinjaRenderFail
toinApp.renderFail
. - Improvements to stability.
- Fix with presenting in-app messages for SwiftUI.
- Improvements to stability.
- We added in-app messaging module. In-app messages are designed to enhance the user experience in your mobile application without ever being intrusive. Customizable layouts can personalize content and style to create the perfect in-app message to fit your brand. Using Synerise segmentation, you can target and engage the most relevant audience.
Injector.getBanners
method.Injector.fetchBanners(success:failure:)
method.Injector.showBanner(_:markPresented:)
method.
IMPORTANT:
- Due to recommendations and deprecations introduced by Apple, armv7, armv7s (iOS devices), and i386 (iOS Simulator) architectures are no longer supported.
- Support for iOS 9 and 10 will end soon and the minimum deployment target will change to iOS 11.
- Support for bitcode will end soon.
- Issues with thread prioritization (iOS 16 issues detected by Thread Performance Checker).
- End support for armv7, armv7s (iOS devices) and i386 (iOS Simulator).
- Improvements to stability.
- Potential issues related to sharing data with notification extensions.
- Improvements to stability.
- We added a new
Client.signOut(mode:)
method with two modes:.signOut
and.signOutWithSessionDestroy
. They both notify the backend that the client is signed out, clear the client session on the device with a JWT Token, and work similiarly toClient.signOut()
. Additionaly,signOutWithSessionDestroy
clears the anonymous session and regenerates the client UUID.
- New labels in Content Widget: 'subtitle', 'identifier' and 'loyaltyPoints'. These properties are added to
ContentWidgetBasicProductItemLayout
and are provided with customization properties such as inserts, font, font color, and an additional label for loyalty points as suffix text. Appearance of the properties is set inContentWidgetBasicProductItemLayout
and their data inContentWidgetRecommendationDataModel
. All properties are optional and will not be displayed if they were not set it in the data model.
IMPORTANT: Distribution of this version changed from Framework to XCFramework to provide support for Apple Silicon chips, SPM (in future) and also to adapt a new way of distributing frameworks by Apple that help to organize binaries for multiple platforms and debug symbols (dSYM, BCSymbols) better.
Remember, that the old way of distributing fat framework is still available and it could be downloaded from GitHub (path: 'SDK/framework') and from GitHub releases (https://github.com/Synerise/ios-sdk/releases).
- The way of distributing framework by CocoaPods: from Framework to XCFramework.
- Additional validation of Synerise notification payload in
NotificationServiceExtension
. Developers had to check whether the notification contains the Synerise payload before passing it toNotificationServiceExtension
. Now, additionally,NotificationServiceExtension
checks it internally and rejects the notification when it is not valid Synerise payload format.
- Some clients have issue with correct value of
sdkVersion
in AppStarted event, which propably occurs depending to project settings. We have changed it to save hardcoded value so it will solve those issues permanently. - We found issue with synchronizing data for notification encryption purposes in some cases and we have fixed it.
- We have added Swift name for
SNRToken
class so now that class supports Swift naming style and it is visible asToken
name. customId
property inToken
class should not be nonnull type and it has changed to optional.
- Events types to "custom". Events now can be distinguished via action parameter.
- Swift names for some public classes.
- Improvements to stability.
IMPORTANT: This major version does not change compatibility.
- Potential issue with reading and saving SDK version metadata from the SDK bundle.
- Potential issues related to sharing data with extensions.
- JWT Token encryption support cooperating with backend.
NotificationServiceExtensionDelegate
for better error handling in Notification Service Extension.NotificationServiceExtension.serviceExtensionTimeWillExpireRequest(_:withMutableNotificationContent:)
method in Notification Service Extension.
- Deeplinks from campaigns have default action now when delegate method is not implemented - the SDK opens url.
- Remove unnecessary anonymous token refresh operations.
- Improvements to stability.
.pinActivationRequired
fromClientConditionalAuthStatus
.
IMPORTANT: Distribution of this version changed from Framework to XCFramework to provide support for Apple Silicon chips, SPM (in future) and also to adapt a new way of distributing frameworks by Apple that help to organize binaries for multiple platforms and debug symbols (dSYM, BCSymbols) better.
Remember, that the old way of distributing fat framework is still available and it could be downloaded from GitHub (path: 'SDK/framework') and from GitHub releases (https://github.com/Synerise/ios-sdk/releases).
- The way of distributing framework by CocoaPods: from Framework to XCFramework.
- Some clients have issue with correct value of sdkVersion in AppStarted event, which propably occurs depending to project settings. We have changed it to save hardcoded value so it will solve those issues permanently.
- Swift names for some public classes.
- Potential issue with sending
push.view
events in notification services. - Incorrect type for
extras
property inRecommendationResponse
model.
variantId
is sended as number, instead of string in events.
- Various parameters in
RecommendationOptions
to get recommendations inContent.getRecommendations(options:success:error:)
method. RecommendationResponseExtras
andRecommendationResponseExtrasSlot
models.- Mapping
extras
property (RecommendationResponseExtras
) inRecommendationResponse
model.
productIDs
parameter inRecommendationOptions
to get recommendations for multiple items inContent.getRecommendations(options:success:error:)
method.
- Potential issue with native notification buttons when Simple Push campaign contains Rich Media (Single Media).
- Analytics for Simple Push campaigns.
- Optional badge as a text shown on the item in
ContentWidget
. - Optional label (
topTextLabel
) to show additional information about product inContentWidget
. - Label with percentage discount (if set
isDiscountPercentageVisible
in item layout) value shown before sale price inContentWidget
.
- The SDK does not throw exception when data model mapping returns nil or required properties are nil.
ClientAuthenticationResult
is changed toClientConditionalAuthResult
.ClientAuthenticationStatus
is changed toClientConditionalAuthStatus
.ClientAuthenticationContext
is changed toClientConditionalAuthenticationContext
.
salePriceMargin
setting property fromBasicProductItemLayout
.
- Mapping
errorCode
inApiError
.
- Potential issues with deprecated OAuth, Facebook and Apple Sign In methods.
- Potential issues with SDK reinitialization.
- Potential issues with merging anonymous profile when client has signed in.
context
parameter inClient.authenticateConditionally(token:clientIdentityProvider:authID:context:success:failure:)
- Potential issues with cleaning bearer token in HTTP requests.
ClientSessionEndReason.ClientDeleted
is changed toClientSessionEndReason.UserAccountDeleted
.
ExactPrice
value inPromotionDiscountType
model.
ClientSessionEndReason.ClientDeleted
as reason when client deletes account.
- Internal validation for network request is disabled.
- Issues with the SDK reinitialization process.
- mapping
currentRedeemLimit
property inPromotion
model.
- nullability of properties in
Promotion
model.
lastingTime
property inPromotion
model.PromotionTypeHandbill
value inPromotionType
model.
- Issue with token refreshing occuring by SDK in version 3.8.1.
Promotions.activatePromotions(identifiers:success:failure:)
method.Promotions.deactivatePromotions(identifiers:success:failure:)
method.Promotion
model has got new properties.
- dSYM content removed from inside framework bundle.
Client.requestAccountActivationByPin(email:success:failure:)
method.Client.confirmAccountActivationByPin(pinCode:email:success:failure:)
method.SNRClientSessionEndReasonClientRejected
option inSNRClientSessionEndReason
enumeration.
- Improvements to stability.
- UUID regeneration is performed automatically when the session is recovered from the client token after app reinstall.
Client.signInConditionally(email:password:success:failure:)
method.Client.authenticateConditionally(token:clientIdentityProvider:authID:success:failure:)
method.Client.authenticate(token:clientIdentityProvider:authID:success:failure:)
method.ClientAuthenticationResult
model.ClientAuthenticationStatus
enum.
VoucherStatus
is changed toVoucherCodeStatus
.
- Client UUID is renewed after reinstallation when session is valid.
- Potential issues in generating screen.content event.
- Compatibility both for
String
andData
types in method that uses Sign in with Apple.
- Issue with Recommendations v2 mapping caused in previous version (3.7.2).
- Potential issue with sending double push.view event in some cases.
AddedProductToCartEvent
is changed toProductAddedToCartEvent
.RemovedProductFromCartEvent
is changed toProductRemovedFromCartEvent
.AddedProductToFavoritesEvent
is changed toProductAddedToFavoritesEvent
.ProductViewEvent
is changed toProductViewedEvent
.
- Additional UIKit classes excluded from AutoTracking.
ScreenViewResponse
model mapping (data
property issue).- Potential issues with fetching Recommendations v1 campaign which is not compatible.
- More debug events.
- Potential issues with regenerating anonymous after an account is deleted.
CancelledPushEvent
name toPushCancelledEvent
.Client.requestEmailChange(email:password:success:failure:)
is deprecated.Client.requestEmailChangeByFacebook(email:success:failure:)
is deprecated.
Client.requestEmailChange(email:password:externalToken:authID:success:failure:)
method.Content.getScreenView(success:failure:)
method.
- Some of deprecated methods have been deleted.
NSError
is changed toSNRApiError
in failure blocks in module methods.
ContentWidget
is supporting Recommendations v2.ContentWidgetRecommendationOptions
configuration object forContentWidget
.imageContentMode
inContentWidgetBasicProductItemLayout
.
- Some issues with fetching notification encryption data when device is locked.
- Issue with Push Notification registration after SDK is reinitialized.
- More debug logs.
- Currency issues on
ContentWidget
.
- Improvements to stability.
- Issue that could have caused loading images with delay in campaigns.
- UI improvements in Banner campaign.
- Improved appearance of Simple Push with Rich Media for Dark Mode.
- Improvements to stability.
- Improvements to stability.
- Issue that causes not sending events for Walkthrough and Banner campaigns.
- Issue that could have caused crash in
Client.retrieveToken(success:failure:)
. - Issue that fix crash in
ContentWidget
when displaying image inBasicProductItemLayout
.
[MODULE].setLoggingEnabled(_:)
methods are deprecated. Please useSynerise.setDebugMode(_:)
only.
- Single Image Notification (Rich Media) displays title and body on extended view.
InjectorWalkthroughDelegate
delegate methodsnr_walkthroughDidLoad(walkthroughDictionary:)
is invoked when it is implemented instead of old methodsnr_walkthroughDidLoad()
.- Preventing from displaying campaign when image resources are not formatted correctly.
- SDK throws
SNRInternalInconsistencyError
when some settings options are configured after Synerise initialization but should be before.
- Some issues with notification processing in
NotificationServiceExtension
.
- Walkthrough dictionary returned in
InjectorWalkthroughDelegate
delegate methodsnr_walkthroughDidLoad(walkthroughDictionary:)
Client.deleteAccount(clientAuthFactor:clientIdentityProvider:authID:success:failure:)
method.- New option to set whether events should be sent when server time synchronization has failed -
Synerise.settings.tracker.isBackendTimeSyncRequired
.
- Information about device root is moved to AppStarted event.
- Improvements to stability.
- Improvements to stability.
- Some issues with notification encryption configuration when regenerating data.
- Issue that could have caused crash in
SyneriseCrashHandler
.
- Debug logs contain simple module name, not a class name.
- Improvements to stability.
Chat
module.
- Image thumbnail in Rich Media (Single Media) Synerise notification.
- Dynamic interactive iOS buttons in Synerise notifications generated from Simple Push campaign.
- Implementing encrypted notifications is now easier.
- Support for encrypted notifications (enabled by
Synerise.settings.notifications.encryption
).
- Events sends own occuring time to backend.
Synerise.settings.notifications.appGroupIdentifier
is moved toSynerise.settings.notifications.appGroupIdentifier
. The previous option is active but deprecated.
automaticallyAdjustContentViewSize
bool property for specify whether expanded notification should automatically adjust its size to downloaded image.
- Issues with generating UUID for Apple Sign In authentication requests.
TokenOriginApple
inTokenOrigin
enumeration type.
Client.authenticateByOAuthIfRegistered(accessToken:authID:success:failure:)
method.Client.authenticateByAppleSignInIfRegistered(identityToken:authID:success:failure:)
method.Client.deleteAccountByOAuth(accessToken:success:failure:)
method.Client.deleteAccountByAppleSignIn(identityToken:success:failure:)
method.Synerise.settings.sdk.shouldDestroySessionOnApiKeyChange
in settings.
- Maintaining session when changing clientApiKey within business profile.
- Improvements to stability.
- Content mode settings for image views in Rich Media notifications.
- Way of obfuscation in SDK to much pretty style.
- Freezeing host app issue occuring sometimes by SDK in version 3.6.7.
- Freezeing host app issue occuring sometimes by SDK in version 3.6.6.
Client.refreshToken(sucess:failure:)
method.Token
object has claims property with properties of token.
- Improvements to stability.
- Persistent events are sent when the app launches.
- Improvements to stability.
- Passing attributes property in OAuth authorization context.
Client.destroySession
method.Client.regenerateUuid(clientIdentifier:)
method with customerIdentifier as input for regenerated uuid.- Apple Sign In authorization (
Client.authenticateByAppleSignIn(context:authID:success:failure:)
). - Swift names for some public classes.
- Error codes for
Error
are enumeration type now. - Improvements to stability.
- saving events in persistent storage.
- Issue with removing data from keychain when app is launched first.
- More information in
CrashEvent
from Crash Handler.
- Improvements to supporting synerise react native sdk.
Synerise.setHostApplicationType
method to specify host app type.
Tracker
tries to send events when app enters to foreground.- Better handling when there is no internet connection.
- Improvements to stability.
- Improvements to stability.
- Security related changes.
tags
property inClientUpdateAccountContext
andClientRegisterAccountContext
.
authId
ascustomId
in OAuth authorization payload.
- Improvements in reinitialization mechanism (
Synerise.changeClientApiKey
).
Promotion.priority
property added to sorting whitelist.- Improving SDK stability
priority
property inPromotion
class.
- Uncommon case with stop tracking events because of invalid events in batch.
- Support multiple scenes in campaigns (walkthrough, banner etc.) for iOS 13.
ContentWidgetImageButtonCustomAction
sends model in its receive click action.
- SDK persists its last and current version in application's data.
PromotionResponse
mapping metadata toPromotionResponseMetadata
object in metadata property.Client.registerForPush(mobileAgreement:success:failure:)
is deprecated.
ContentWidget
doesn't require productID parameter for recommendations.
Client.regenerateUUID
method regenerates client's UUID if session is anonymous.
Token.tokenString
property attributes.ClientRegisterAccountContext.city
property mapping.
ClientUpdateContext.lastActivityDate
.
regularPriceFont
andregularPriceFontColor
properties toContentWidgetBasicProductItemLayout
.priceGroupSeparator
andpriceDecimalSeparator
properties toContentWidgetBasicProductItemLayout
.
Content.getDocuments(apiQuery:success:failure:)
method.
Synerise.setCrashHandlingEnabled(_:)
to pass info about Users application crashes as dedicated events to the backend.
ClientStateDelegate
for handling client sign-in state.
SIGN_OUT
SDK Command.
Chat
constructor requirestracker_key
.
Chat
module.
- Improvements to stability.
OTHER
option toClientSex
.
- Sale price as a additional feature to
ContentWidge
. - Optional button action as a additional feature to
ContentWidget
.
Client.getEvents()
method.- 'app-version' as a query parameter in walkthrough request.
- Event's label max length is 64 characters.
PromotionsApiQuery
object to fetch promotions better way.- 'mobilePushAgreement' parameter in
Client.registerForPush()
method.
WidgetGridLayout.getSize(prefferedWidth:)
name toWidgetGridLayout.getSize(preferredWidth:)
.Client.getPromotions(statuses:types:page:success:failure:)
is deprecated.Client.getPromotions(statuses:types:limit:page:success:failure:)
is deprecated.Client.getPromotions (statuses:types:limit:page:includeMeta:success:failure:)
is deprecated.
ContentWidgetItemLayout.backgroundColor
- property type.- Swift name for
RecommendationOptions
class.
- Documentation in header files.
- 'ContentWidget' with Slider and Grid Layouts.
- Header annotation in
Client.recognizeAnonymous()
- Transaction Events (
CompletedTransactionEvent
,CancelledTransactionEvent
).
- Network information is sent in the
ApplicationStartedEvent
. - Mobile Operator information is sent in the
ApplicationStartedEvent
.
Client.setCustomEmail
andClient.setCustomIdentifier
methods nullability.
- Events don't contain 'time' parameter.
- Improvements to networking.
Client.retrieveToken(success:failure:)
method
Client.getToken(success:failure:)'
is deprecated.
Synerise.settings.sdk.minTokenRefreshInterval
option in settings.
ClientRegisterAccountContext.tags
property is array now.
- New option to set time interval counting backwards from expiration time, within which token will be automatically refreshed by SDK -
Synerise.settings.sdk.minTokenRefreshInterval
.
- Dynamic change of AutoTrack mode.
Content
module.Content.getDocument
method.- Push Consent information is sent in the AppStartedEvent.
Tracker.setConfiguration()
is deprecated.Tracker.setAutoTrackMode()
is deprecated.Tracker.setLocationAutomaticEnabled()
is deprecated.Injector.setAutomatic()
is deprecated.
- Mandatory Update campaign.
- Improving SDK stability.
- New option to disable whole SDK activity -
Synerise.settings.sdk.enabled
. - New option to disable notifications activity -
Synerise.settings.notifications.enabled
. - New option to disable auto tracking activity -
Synerise.settings.tracker.autoTracking.enabled
. - New option to disable declarative tracking activity -
Synerise.settings.tracker.tracking.enabled
.
ProductViewEvent
,RecommendationClickEvent
andRecommendationSeenEvent
has changed its structure.
- Synerise API host.
- New additional 'authID' parameter in
Client.authenticateByFacebook()
method. - New additional 'authID' parameter in
Client.authenticateByOAuth()
method.
authID
parameter (ClientFacebookAuthenticationContext
,ClientOAuthContext
).
- New event classes (
ProductViewEvent
,RecommendationSeenEvent
,RecommendationClickEvent
). - New additional
authID
parameter (ClientFacebookAuthenticationContext
,ClientOAuthContext
).
- Simple Push campaign doesn't send 'push.received' event by now.
- Posiibility to excluding compontents from autotracking by class.
- Posiibility to excluding components from autotracking by tag.
- New structure and code organization for SDK settings (
SNRSynerise.settings
). - Improvements to user anonymous session.
- Improvements to user anonymous session.
- Change to allow anonymous client using whole methods.
Client.requestEmailChangeByFacebook()
.
- Improvements in oauth authentication.
- Improvements to user session handling.
- Facebook authentication.
Client.requestEmailChange()
method (newsleeterAgreement has been added to arguments).Client.confirmEmailChange()
method (smsAgreement has been added to arguments).
Client.authenticateByOAuth()
method.Client.regenerateUUID()
method.
Client.authenticateByFacebook()
method uses context optionally.Client.requestEmailChange()
method.Client.confirmEmailChange()
method.
Synerise.isSyneriseSimplePush()
method.Synerise.isSyneriseSilentCommand()
method.Synerise.isSyneriseSilentSDKCommand()
method.Synerise.isSyneriseBanner()
method.
- Autotracking events.
Client.authenticateByFacebook()
method.Client.authenticateByFacebookIfRegistered()
method.Client.requestEmailChange()
method.Client.confirmEmailChange()
method.Client.deleteAccountByFacebook()
method.
Client.authenticateByFacebookToken()
method.
Client.getToken()
returns token and its origin (SYNERISE, FACEBOOK, OAUTH or UNKNOWN).
- Improving SDK stability.
Synerise.locationAutomatic()
method to obtain user location and send location event automatically.
- Improving SDK stability.
Client.deleteAccount()
method.
Client.confirmAccount()
method.
Client.deleteAccount()
method requires password.
Client.updateAccount()
method. Unless sex property in update context is set, api request payload doesn't contain it.
Client.registerAccount()
method option to registration without email.
Promotions.getPromotions()
.
Promotions.getPromotionByUuid()
.Promotions.getPromotionByCode()
.
Synerise.setDebugModeEnabled()
to eneable logs from all modules.
Loyalty
module is renamed toPromotions
.CacheService
is replaced byCacheManager
.- New functionality in
SNRApiError
(see Error Handling section in README). - Synerise SDK invokes all delegation methods on main thread.
- Improving Synerise SDK stability.
- Optimisation of networking in Synerise SDK.
- Method name for Swift:
Client.registerClient()
->Client.registerAccount()
. - Improving SDK stability.
Loyalty
module.CacheService
to obtain cached API models.
- SDK callbacks executes on main thread.
- Some Promotion entity fields types.
- Some Promotion enum types (
PromotionStatus
,PromotionType
,PromotionDiscountValue
). - Major parts of authorization module.
Client.changePassword()
now requires old client's password.- Profile methods were distributed between Client and Loyalty.
Client.getPromotions()
->Loyalty.getPromotions()
.Client.getPromotion()
->Loyalty.getPromotion()
.Client.activatePromotionBy()
->Loyalty.activatePromotionBy()
.Client.deactivatePromotionBy()
->Loyalty.deactivatePromotionBy()
.Client.getOrAssignVoucher()
->Loyalty.getOrAssignVoucher()
.Client.assignVoucherCode()
->Loyalty.assignVoucherCode()
.Client.getAssignedVoucherCodes()
->Loyalty.getAssignedVoucherCodes()
.Profile.registerClient()
->Client.registerAccount()
.Profile.registerForPush()
->Client.registerForPush()
.Profile.activateClient()
->Client.activateAccount()
.Profile.requestPasswordReset()
->Client.requestPasswordReset()
.Profile.confirmResetPassword()
->Client.confirmPasswordReset()
.
- Overall validation.
Profile
module.Client.getAnalytics()
method.Client.setConfiguration()
method.Client.createAuthToken()
method.
- Notifications with Rich Media now can have URL actions.
- Removed validation for email, birthdate and phone number in several functions in the SDK.
- Added argument validation for nonnull argument in Client and Profile modules (SDK throw
InvalidArgumentException
).
- Issue with logout and client's auto refresh.
- Client method to obtain client's authorization token by Facebook token.
ApiError
class with more information from backend system.
- Improving SDK stability.
- Option to disable In App Push Notification Alerts.
- Client models structure (
ClientAccountInformation
,ClientUpdateContext
). ClientSex
is now enum type instead of object.
ClientAgreeementsContext
model (useClientAgreeementsContext
instead).
- Client method to obtain external client's authorization token.
- Simple Push campaign sends events to Synerise.
- Password validation is removed in the entire SDK.
- Synerise SDK can be initialized at any moment of the application's lifecycle.
- Public methods are more orderly and better described.
- Assign voucher Profile and Client API methods.
- Get assigned vouchers Profile and Client API methods.
- Get or assign voucher Profile and Client API methods.
- New method to deactivate promotion by uuid.
- New method to deactivate promotion by code.
- New method to fetch promotions data with limit parameter.
- New method to fetch promotions data with statuses and expiration options.
- Promotions API models structure (
ClientPromotion
,ProfilePromotion
). - Method
Profile.activateAccount()
changed toProfile.activateClient()
. - Method
Profile.confirmAccount()
changed toProfile.confirmPhoneRegistration()
. - Method
Profile.resetPassword()
changed toProfile.requestPasswordReset()
.
- Registration method doesn't throw but invoke failure with error.
- Improving SDK stability.
- New Client change password feature (old password validation).
- Improving SDK stability.
- Improving SDK stability.
- Registration with pool ID.
- New Client change password feature.
- New method to create account without activation.
- Method to request update of phone number.
- Method to confirm update of phone number.
- Method to activate account manually.
- Promotions API integration.
- Walkthrough and banners appearance.
- SDK stability.
- Bitcode support.
- Option to change API baseURL for on-premise installations.
- Campaign Banners appearance.
- Synerise activities are now presented via own UIWindow.
- Email validator to support all TLDs.
- Automated customId assignation from code pool upon client registration.
- Method to get current client's UUID.
- customId property in
ClientProfileContext
. - improvements for exceptions/errors handling in obj-c/swift.
- Profile.createClient.
Profile.deleteClient()
.
- Added analytic matrics support.
- Method to check client is signed in.
- Configuration options for Client (client auto refresh).
- Option to auto refresh client's login.
- Method to set client's email for Tracker.
- Method to set client identifier in Tracker.
- Improvement in SDK logging (framework version information added).
- Configuration options for Tracker.
- clientId in Tracker is String object by now.
- Default settings for event sending.
- Improvements for campaign automation support.
- Option to register with phone number and confirmation with code received by phone.
- Option to login with phone number and password.
- Swift method names (incorrect parameter names in some classes).
- Swift naming convenction for some classes.
ClientProfileContext
class visibility to public.
- Validation for email, password, birthdate, phone number in SDK methods (SDK throws exceptions).
- New method for fetching client profile information:
Profile.getClient()
.
- Property type 'clientId' changed from NSInteger to NSNumber in
CreateClientContext
model. - Property type 'birthDate' changed from NSDate to NSString in few models:
ClientAccountInformation
,ClientUpdateAccountContext
,UpdateClientContext
,CreateClientContext
.
- Preloading campaign banners.
- Preloaded campaign banners can be triggered by events.
- Banner optional delegate methods.
- Images load before showing mobile campaign (walkthrough, banner).
- New parameters in view tracking.
- Injector starts automatically or manually.
- Walkthrough optional delegate methods.
- Banner optional delegate methods.
- Mandatory Update and First Run Message support.
- New parameters to AppStartedEvent.
- Placeholder while loading images.
- Welcome screen.
- SyneriseSDK optional delegate methods.
- New uuid mechanism.