All notable changes to this project will be documented in this file.
- issue with webview not being called on the same thread. Associated with inapps.
- issue with cutting title in notifications due to text sizes.
- issue with sending
render.fail
event when inapp was loaded properly.
- workManager npe - for android api lower than 24
- workManager npe - for android api lower than 24
- safety mechanism in workManager fcm token refreshing flow for RN and Flutter.
- support for bigPicture and bigText style in notification at the same time. Text max lines is 5.
- notification callback issue when app was in foreground.
- workManager mechanism to call onRegisterForPushRequired every 20 days.
updateAccountBasicInformation
method to update anonymous users.- optional
onRegisterForPushRequired(PushRegistrationOrigin origin)
callback with origin.
- variants in inApps are now attached to clientId instead od uuid.
- Sdk is not making any calls to walkthrough endpoints.
- fresco library is now updated to 3.2.0
- Null pointer exception while launching callback from push notification in some cases.
changeApiKey(@NonNull String apiKey, InitializationConfig initializationConfig)
method. It enables developer to pass salt.
changeApiKey
method withoutInitializationConfig
will now reset salt.- notification actionButton click will now create
push.click
with parameter event instead ofpush.button.click
. - Additional parameters in
push.click
event such as:clickSource
,actionType
,url
onOpenUrl
andonDeepLink
mechanism (not affecting user).
testDelivery
andjourneyId
parameters to all push events.- context parameters to screenViews and documents. There are two additional methods.
- validation of reserved parameters in events. ReservedKeys will not be send. Only error log will be printed to logcat.
com.google.gson.JsonIOException
when calling getDocument.- issue with reading system push consent after permission change.
- deepLink handling inside inApp from url click.
- upgraded
bouncycastle
library to version 1.78.1
- blank space issue. Blank space inside deeplink is no longer causing a crash.
systemPushConsent
field to registerForPush body. This will improve notification permission management.Synerise.settings.tracker.eventsTriggeringFlush
- this is the list with action names of event's which will trigger instant send of all events in a batch.
registerForPushRequired
will be now called after full initialization of sdk. ( It was triggered during initialization in previous versions of sdk )
- NPE on getClientId after apiKey changes
- registerForPushCache was not passing request after client context change within 24h.
- registerForPushCache was not passing request after client context change within 24h.
- registerForPushCache was not passing request after client context change within 24h.
- Improved mechanism for checking capping in in-app messages. The number of views no longer resets when the account's UUID changes.
- 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.authenticateWithTokenPayload(TokenPayload tokenPayload, @NonNull String authId)
method. This method signs in a customer in with the provided token payload. - We added a new
Client.getUuidForAuthentication(@NonNull String authId)
method. This method retrieves the current UUID or generates a new one from a seed (authId
). clientId
property in theToken
model.
- Added proguard rules for joda.time and retrofit.
- Updated proguard rules for gson.
Autotracking
is now based ononTouchListener
instead ofonClickListener
.onRegisterForPushRequired
is now triggered on every launch.Client.registerForPush
has now built in cache with 24h expiration time.
- Deeplink action when clicking on push notification will directly open in app instead of prompt between app/browser. We set packageName to intent.
- Error in opening activity from notification due to react-native devTools issue. (Affecting only React Native)
- IMPORTANT:
- Due to changes in the handling of actions for URLs and deep links in Synerise campaigns, we strongly recommend comparing your configuration with the SDK documentation. Review the changes from the previous SDK version integrated into your application here: https://hub.synerise.com//developers/mobile-sdk/campaigns/action-handling/
- in
Client.simpleAuthentication
not passing email or customId affected in 412 error. Now it is fixed. IllegalArgumentException
in Mobile-Info header. Issue with character 0xa0.
setRequestValidationSalt
is now optional. Salt is not required for simpleAuthentication, but we recommend using it for improved security (it needs to be enabled in the Synerise portal first).
hostApplicationSDKPluginVersion
toSynerise.Builder
. This information will be added to application.Started event only if you use technologies different than native android.
- issue with checking number expressions in inApp campaigns
- issue with checking number expressions in inApp campaigns
- issue with checking number expressions in inApp campaigns
shouldSendInAppCappingEvent
setting to decide whether sdk should sendinApp.capping
event or not.
- issue with inApp capping. Capping was not working correctly when used together with frequency capping.
- notification priority issue with uppercase (affecting only flutter users)
- workManager conflict. Synerise SDK is now not using default work manager initializer.
- minor security improvements.
- Method
Client.recognizeAnonymous
is now not working for users authenticated with simple authentication process.
- issue with inApps not being triggered.
Tracker.sendImmediately
is now included in inApps triggering mechanism. - KeystoreException while generating secret keys. You can now handle this situation in
onInitializationFailed()
insideSyneriseListener
- issue with saving trigger events from inApp campaigns to triggers database. Before this version please make campaigns with only one trigger. Campaigns with multiple triggers will be shown only on the last trigger.
- Events send with
Tracker.send
are now saved to database before passing them to workManager. This change is transparent for developers. It will prevent event loss due to workManager issues. - WorkManager is upgraded to 2.8.1
- Room is upgraded to 2.5.2
- 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 Google. Simple Authentication needs only two methods - Client.simpleAuthentication(ClientData clientData, String authId) to recognize a customer and Client.isSignedInViaSimpleAuthentication() to check if the customer is signed in and uses the Simple Authentication feature. The Client.signOut() method and similar methods are a common way to sign out and clear the user context.
- We added a new Client.registerForPush(@NonNull String firebaseId) method. It is analogous to Client.registerForPush(@NonNull String firebaseId, boolean mobilePushAgreement), but doesn't require the mobilePushAgreement parameter and thanks to that, it doesn't update the customer in the database.
- validation mechanism for
changeApiKey
method. Now you cannot use changeApiKey with the same apiKey.
- Session Handling mechanism is no longer using getBlocking from rxJava.
- Session Handling mechanism is no longer using getBlocking from rxJava.
- Session Handling mechanism is no longer using getBlocking from rxJava.
- Session Handling mechanism is no longer using getBlocking from rxJava.
- Session Handling mechanism is no longer using getBlocking from rxJava.
getRecommendationsV2
,generateDocument
andgenerateScreenView
methods.
-getRecommendations
, getDocument
, getDocuments
and getScreenView
methods are now deprecated.
- Session checking mechanism is moved completely to background thread.
- proguard configuration. (Added -repackageclasses 'com.synerise.sdk')
- Root Activity for inApp rendering is now retrieved after delay has ended. Changing from screen A to B before delay has ended will result in inApp showed on screen B.
- default value of
recommendationEventType
torecommendation.seen
for backward compatibility
RecommendationViewEvent
which can store multiple productsId in one event.recommendationEventType
field to contentWidget in order tu change eventrecommendation.seen
torecommendation.view
- update of ssl pins for all domains.
- QUERY_ALL_PACKAGES permission.
- new method for sign out
Client.signOut(ClientSignOutMode, Boolean)
. Old method is now deprecated.
- new method for sign out
Client.signOut(ClientSignOutMode, Boolean)
. Old method is now deprecated.
- new context passing mechanism based on androidx.startup library
compileSdk
andtargetSdk
are now set to 33.- upgrade of build.gradle, picasso, fresco, rxJava, okhttp, retrofit, room and work libraries.
- ANR issue in InApps. Removed blocking mechanism.
- ANR issue in InApps. Removed blocking mechanism.
- ANR issue in
renderJinjaForceCheckSegment
method
- queueing of session refreshing mechanism. You should see decrease in signInAnonymous and token refresh requests.
Client.signOut(mode)
is now asynchronous and returns IApiCall.
OnNotificationListener
callbacks which triggers when notification is shown, clicked or dismissed.NotificationInfo
object to share information about notification.
User-Agent
header is now using package name instead of application's name.
maxDefinitionUpdateIntervalLimit
toInAppMessaggingSettings
- workManager initialization is done by default. For custom initialization please follow work manager documenation.
ActivityNotFoundException
is now handled when push is clicked. Doze mode is clearing application process and broadcastReceiver has no activity to be attached to.- Improved timeout handling when getting inAppDefinitions
IllegalArgumentException
inPreMKeySecurityManager
- issue with sending events
- timeout handler in checkSegment
- issue with triggering InApp by
push.click
event
- client.applicationStarted is now collected only in foreground. You may see decrease in events quantity.
- Room version upgraded to 2.4.3
ArrayIndexOutOfBoundsException
ArrayIndexOutOfBoundsException
JobIntentService
is no longer used in sdk.- Sending events is based on workManager
- 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.
- Banner methods such as:
fetchBanners
,getBanners
,showBanner
.
push.click
issue affecting only React-Native users.
- IllegalArgumentException bad-base 64
- new
Client.signOut(mode)
method with two modes:SIGN_OUT
andSIGN_OUT_WITH_SESSION_DESTROY
. 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,SIGN_OUT_WITH_SESSION_DESTROY
clears the anonymous session and regenerates the client UUID.
- new properties in ContentWidget:
subtitile
,identifier
andloyaltyPoints
. These properties are added toContentWidgetBasicProductItemLayout
and are provided with customization properties such as typeface, size, color, margins and 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 in the data model.
- migration to encrypted tokens (not affecting users)
- events types to "custom". Events now can be distinguished via
action
parameter authenticate
,signInAnonymous
,authenticateConditionally
,refreshToken
methods are now moved to "v3" endpoints due to encrypted token migration
- cast exception in
NotificationOpenedReceiver
- issue with dismissBroadcastReceiver ( affecting only react-native users )
- additional parameters to
RecommendationRequestBody
object. More filters for getting recommendations. - upgraded picasso library to 2.71828 version
- memory leaks in AutoTracking
setItemsIds
method toRecommendationRequestBody
in order to get recommendations for multiple products
ACTION_VIEW
for Intent inside deep link campaigns- support for universal links to be send as DEEP_LINK
- support for targetSdkVersion 31
- new mechanism for collecting statistics for android 12 and above called Notification Reverse Activity Trampoline
- support for targetSdkVersion 31
- new mechanism for collecting statistics for android 12 and above called Notification Reverse Activity Trampoline
notificationIconColor
andnotificationIcon
should be set via meta-data in manifest and are not longer set in Synerise.Builder` for more information please check documentation in push-notifications section
notificationIcon
andnotificationIconColor
from Synerise.BuildernotificationChannelName
andnotificationChannelId
from Synerise.Builder due to end of deprecation time
- IMPROVEMENTS IN CONTENT WIDGET:
badge
as a text shown on the image inContentWidget
itemLabel
to show additional information about product inContentWidget
- percentageLabel to show the discount percentage in
ContentWidget
- image scalling in
ContentWidgetBasicProductItemLayout
errorCode
field toApiErrorBody
SecurityException
while retrieving NetworkConnectionTypeNullPointerException
inNotificationClickReceiver
andNotificationDismissReceiver
USER_ACCOUNT_DELETED
toClientSessionEndReason
enum.
gson - flatten
library deleted from dependencies.
deviceId
field toRegisterClient
class (Client registration process)
Client.signInConditionally
error with saving uuidClient.authenticateConditionally
error with saving uuid
Client.signInConditionally
error part 2
Client.signInConditionally
error
- tags changed to List of HashMap
- methods to activate and deactivate promotions in a batch
- updated
Promotion
object
- Callback
CLIENT_REJECTED
forOnClientStateChangeListener
- issue with description in push notifications when image is not showing
- new methods for authentication
- uuid autobackup issue
- picasso singleton clash
- IOException when doing a lot of calls to Synerise
messagingServiceType
method to Synerise.Builder. Distinguish between hms and gmsrxJavaErrorHandlingEnabled
method to Synerise.Builder
- Upgraded retrofit and gson libraries
EventService
crash when getting back from DozeMode
itemId
not initialized in Recommendation class
getScreenView()
methodrequestEmailChange
method
- 'requestEmailChangeByFacebook' is now deprecated
requestEmailChange(String email, String password, @Nullable String uuid)
is now deprecated
OnRecommendationModelMapper
callback responsible for mapping objectsContentWidgetRecommendationOptions
new object for configuration of ContentWidgetContentWidgetRecommendationDataModel
model needed for displaying items in widget
ContentWidget
is now using recommendation v2- Images in ContentWidget are now scalling as centerInside
SyneriseListener
as a callback. Called when Synerise sdk initialization is completed.- 'hostApplicationType' to Synerise builder.
- Sending app Started event after first change of setting: sdk.enable
- RuntimeException on TimeChangedReceiver
backgroundRestricted
field to appStarted event
- ACCESS FINE LOCATION is no longer required by sdk
- System time change during session will not affect events time
- Currency issues on ContentWidget
- autotracking fix: Stop counting fragments/activities with no view
- Upgrade of FCM dependencies
- Upgrade of AGP
- Added retry mechanism on image downloading in push notifications
WalkthroughResponse
returned in Walkthrough callbackonLoaded
deleteAccount
methodisBackendTimeSyncRequired
property inTrackerSettings
- Information about device root is moved to applicationStarted event
Injector.decryptPushPayload
is now throwingDecryptionException
systemPushConsent
state depends on available notificationChannels for Oreo + versions
Chat
module
- minimum android sdk version to 21
- memory optimalisation in autoTracking module
- push encryption mechanism
Injector.decryptPushPayload
andInjector.isPushEncrypted
methods.setEncryption
method inNotificationSettings
client.applicationCrashed
inSyneriseNotification
into CustomEventpush.imageTimeout
- time synchronization with server
time
parameter to events
- timeout to 60s
authenticateByOAuthIfRegistered
anddeleteAccountByOAuth
method in Client module
authenticateByFacebookRegistered
toauthenticateByFacebookIfRegistered
- maintaining session when changing apiKey within business profile
shouldDestroySessionOnApiKeyChange
in Settings
- nullPointerException on Android 5.0
- flattenException while deserialization
- mixed cases in class names after obfuscation
refreshToken
methodgetCustomId
method toToken
- invalidCastException in
Campaign
- Token issues
getDocument
andgetDocuments
are now returning Object and a List of Objects
excludedClasses
is now also excluding screen-visited event
- dontusemixedcaseclassnames to proguard file
Settings
change to non static fields- JavaDoc not showing issue
- BuildConfig is now visible
Client.destroySession
method- AutoTracking for click's on actionButtons in Push Notifications
Client.regenerateUuid
method with customerIdentifier as a argument
- issues with autoBackup
- deprecated methods in Promotions Module
- problem with facebook login
- pre marshmallow errors on start
- autotracking collecting clicks on ViewGroup instances
- autotracking 2.0 is now working
- local Walkthrough is cleared while changing apiKey
- android-aspectjx and synerise-plugin plugin is no longer needed
- autotracking is not working (KNOWN ISSUE)
- crashHandler is now sending whole stacktrace
- Security related changes and refactoring
- setting
tags
in Client
- aspectJ config for androidX
customId
to OAuthPayload- reinitialization mechanism
CustomClientAuthConfig
from Synerise
- IllegalArgumentException x must be < bitmap.width
- Added encoding to query parameters in PromotionsApi
- 'priority' field to
Promotion
priority
as a sorting parameter toPromotionApiQuery
- removing events mechanism
InjectorActionHandler
itemPriceColor
showing wrong colortype
in events:CancelledPushEvent
,ClickedPushEvent
,ViewedPushEvent
- SecurityException on JobIntentService
itemRegularPriceColor
,itemRegularPriceSize
,priceGroupSeparator
andpriceDecimalSeparator
to ContentWidgetBasicProductItemLayout
getDocuments()
method to get documents by schema
crashHandlingEnabled()
method to Synerise init (1).
- migration to androidX
SecurityException
in JobIntentService
SyneriseExceptionHandler
to get information about crashesOnClientStateChangeListener
to listen for signIn/SignOut changes
isSignedIn
method is taking expirationTime into account
Chat
module to communicate with users- Possibility to sign out remotely
OTHER
as a sex value
- AssertionError when parsing
Event
toString
- Like/Dislike imageButton to
ContentWidget
timeFrom
is not optional inClientEventsQuery
app-version
as a query parameter in getWalkthrough- Sale price as a additional feature to
ContentWidget
Client.getEvents
method to retrieve events for a client- Event's label max length
injectorAutomatic
,locationAutomatic
,maxBatchSize
,minBatchSize
moved toSettings
module
- flatten library
excludedClasses
to exclude views from autotracking
- bitmap IllegalArgumentException fixed
getDocument
methodrecognizeAnonymus
method to Client moduleagreement
flag to registerForPush methodPromotionsApiQuery
model to create payload for getPromotions methods
productId
inContentWidgetOptions
moved to HashMapgetPromotions
are now replaced with getPromotions usingPromotionsApiQuery
getPromotions
using arguments are now deprecated
- SimplePush test to developer section
Content
module to SDKContentWidget
widget with Slider and Grid Layouts
cellCarrier
,cellCountry
,cellType
,networkType
,networkCountry
andcellRoaming
attributes toAppStartedEvent
- detector for smartphone/tablet detection
facebookSdk
updated to version 4.41.0
TransactionEvent
,CompletedTransactionEvent
andCancelledTransactionEvent
classes
eventTime
is not send via event anymore
- NullPointerException when adding event to storage
- MandatoryUpdate will not fire push notification any more
setMinTokenRefreshInterval
method insettings.sdk
to manage refresh interval
- Prevented from file descriptor leakage
GetPromotionByCode
andGetPromotionByUuid
methods- push.click event
- High Priority notification channel for Android Oreo+
NotificationHighPriorityChannelId
andNotificationHighPriorityChannelName
Settings
module- separate event for autotracking
- BackStack is not overrided when push notification comes up
- BackStack is now working with deeplinking
time
from Event moved toparameters
assourceTime
notificationChannelName
andNotificationChannelId
changed toNotificationDefaultChannelName
andNotificationDefaultChannelId
- new synerise plugin version which requires another apply plugin: 'android-aspectjx'
usesCleartextTraffic
flag as true in manifest to support loading images on Android 9.0 +
- Retrieving app state when starting app from notification banner.
- Upgraded version of fresco.
isNotificationLaunched
flag to stop asking for banners and walkthrough when notification is launchednotificationIconColor
method to define color of notification iconProductEvent
andRecommendationEvent
classes to create specific eventsProductViewEvent
,RecommendationSeenEvent
,RecommendationClickEvent
events
- notification icon were not displayed properly
baseUrl
to "https://api.snrapi.com/"
authId
optional parameter added toClient.authenticateByOAuth
,Client.authenticateByFacebookRegistered
andClient.authenticateByFacebook
methods
TargetSdkVersion
upgraded to 28CompileSdkVersion
upgraded to 28
Push.RECEIVED
event will not be tracked
ProductViewEvent
event typeRecommendationClickEvent
event typeRecommendationSeenEvent
event type
Promotions.getPromotions()
parameters are now optional (nullable)
- Notifications content text on some devices were not displayed properly
Client.confirmEmailChangeByFacebook()
method, useClient.confirmEmailChange()
instead_
character validation when adding customAttributes
Client.requestEmailChangeByFacebook()
methodClient.confirmEmailChangeByFacebook()
method
- Internal UUID mechanism in case of account deletion
OnErrorNotImplementedException
error will not crash your app anymore
Agreements
fields getters
- Optional
smsAgreement
parameter toClient.confirmPhoneUpdate()
method
Client.changeApiKey()
method to dynamically change API Key
- Optional
Agreements
andAttributes
parameters fromClient.authenticateByFacebookRegistered()
method
Client.regenerateUuid()
method to generate new uuid for anonymous client.Client.authenticateByOAuth()
method to sign in with already prepared OAuth authorization.- Optional
Agreements
andAttributes
parameters toClient.authenticateByFacebook()
andClient.authenticateByFacebookRegistered()
methods
Firebase Core
version update (to 16.0.7)- Password moved from
Client.confirmEmailChange()
toClient.requestEmailChange()
- Anonymous token will not overwrite authenticated one anymore, during some possible cases.
AspectJ
version update (to 1.9.2)Synerise Gradle Plugin
version update (to 3.0.3)
Client.deleteAccountByFacebook()
from now signs out client properly
Client.requestEmailChange()
methodClient.confirmEmailChange()
methodClient.deleteAccountByFacebook()
methodClient.authenticateByFacebookRegistered()
method
- Google Services updated to 4.2.0
Client.getToken()
from now returns Token instance instead of JWT String- Auto-tracking labels
Synerise Simple Push
containing long message and image did not display text properly
timestamp
field fromApiErrorBody
class
Synerise.locationAutomatic(boolean)
method to obtain user location and send location event automatically.
- RxJava2 version updated to 2.2.4
UndeliverableException
exceptions won't be thrown (via setting error handler withRxJavaPlugins
)
Synerise.notificationChannelId(String)
methodClient.confirmAccount(String)
method
- Unknown notification priority is now treated with default importance
Client.deleteAccount()
from now requires client's password
Promotions.getPromotions
method from now handles empty lists
Client.registerAccountWithoutActivation
method. Now you can useClient.registerAccount
and control behaviour from the backend
Promotions
moduleCacheManager
to obtain cached API models
- Some
Promotion
entity fields types Client.changePassword()
now requires old client's passwordProfile
methods were distributed betweenClient
andPromotions
Client.getPromotions
->Promotions.getPromotions
Client.getPromotion
->Promotions.getPromotion
Client.activatePromotionBy
->Promotions.activatePromotion()
Client.deactivatePromotionBy
->Promotions.deactivatePromotion()
Client.getOrAssignVoucher
->Promotions.getOrAssignVoucher
Client.assignVoucherCode
->Promotions.assignVoucher
Client.getAssignedVoucherCodes
->Promotions.getAssignedVoucherCodes
Profile.registerClientByEmail
->Client.registerAccount
Profile.registerClientByEmailWithoutActivation
->Client.registerAccountWithoutActivation
Profile.registerForPush
->Client.registerForPush
Profile.activateClient
->Client.activateAccount
Profile.requestPasswordReset
->Client.requestPasswordReset
Profile.confirmResetPassword
->Client.confirmPasswordReset
- Major parts of authorization module
- Overall validation
Client.getAnalytics
methodSynerise.clientRefresh(boolean)
methodSynerise.poolUuid(String)
methodClient.createAuthToken
methodProfile.getClient
methodProfile.createClient
methodProfile.registerClientByPhone
methodProfile.confirmPhoneRegistration
methodProfile.updateClient
methodProfile.deleteClient
methodProfile.getToken
methodProfile.getPromotions
methodProfile.getPromotionsBy
methodProfile.redeemPromotionBy
methodProfile.getOrAssignVoucher
methodProfile.getClientVoucherCodes
methodProfile.assignVoucherCode
method
- Overall SDK validation
JsonParseException
caused ofbirthDate
being aDate
field type (now isString
)
ApiErrorCause
path
attribute changed tofield
- API version incremented to
4.3
SQLiteStorage.deleteAppStarted
NullPointerException occurring only on specific devicesEventService.onHandleWork
RuntimeException occurring on devices running Android 8.1 and later
- Unique
code
to eachApiErrorCause
Client.authenticateByFacebook()
method to obtain client's auth token with Facebook one
Event
local and stream class incompatibilityMobileInfoInterceptor.intercept(Chain)
error causingOutOfMemoryError
on specific devices
- Obsolete
GetOrAssignPayload
model class
ApiError
public fields likepath
,message
,status
,error
,timestamp
anderrors
listObject
value as an argument toTrackerParams
event optional parameters
- Client's personal information (
AccountInformation
) entity - Deep links configuration within Manifest
- Auto-tracking CompoundButton spannable string exception
- Profile promotions response structure
- Overall password validation
- Client method to obtain external client's authorization token
- Profile's
getClientVoucherCodes()
entity - Profile's
getPromotionsBy(parameter)
entity - Client's
getAssignedVoucherCodes()
entity
- Firebase version incrementation (17.3.2)
- Promotion deactivation by uuid and code
- Profile promotions take
limit
as a parameter to fetch your data
- Get client promotions with new status and presentation options
- Birth date and phone number are now nullable within Client and Profile's entities
Client.getAssignedVoucherCodes()
return type is nowClientVoucherCodesResponse
- Push campaign key
push.receiveInBackground
changed topush.received
- Android O activity's screen orientation lock
- Get client voucher codes endpoint url
- Silent command pushes
- Change client's password optional validation
- Deep links are now based on URI scheme which allows to pass extra query data
- Synerise notification channels
- Assign voucher Profile and Client API methods
- Get assigned vouchers Profile and Client API methods
- Get or assign voucher Profile and Client API methods
- Location callback
- New auto-tracking labels and actions
- New Profile activate account feature
- New Client delete account feature
- New Client change password feature
- New Client request phone update feature
- New Client confirm phone update feature
- Major documentation update
- Tracker events nomenclature
- Synerise push messages type detection
- Tracker and Injector debug modes are now merged with Synerise debug mode
- Firebase version incrementation (17.1.0)
- Google Play Services version incrementation (4.0.0)
- Gradle version incrementation (3.3.0-alpha03)
- Push message type is now validated with it's content type, not message type
- FirebaseInstanceIDService implementation as it is deprecated with new Firebase (17.1.0)
- Standardize event source type
- Password validation
- Synerise Promotions
- Synerise Vouchers activation
- From now it is possible to define custom base url to apply across whole SDK
- Javadoc update
- Compile and target sdk updated to 27
- Auto-refreshing Client token in order to sustain it's session
- Setting custom client's email on demand
- Client's Analytics metrics
- Intent extras are now extractable from Synerise Simple Notification
- Obsolete verification of internal modules initialization
- SMS sign in and sign up support
- RxJava2 features to extract from IApiCall
- Fetch banners on demand
- Fetch push messages on demand
- Banner is showed after available images get loaded
- Dagger2 for Xamarin compatibility
- Validation for internal modules initialization
onBindViewHolder()
aspect tracking- Walkthrough transformations
- Banners are now displayed after all available images get loaded
- Internal keys, refactor and optimizations
- Custom client id is now custom identifier
- Few minor internal bugs
- Tracker minimum batch size configuration
- Tracker maximum batch size configuration
- Tracker auto flush timeout configuration
- Triggers for campaign banners
- OnBannerListener
shouldPresent(Map)
method argument changed toshouldPresent(TemplateBanner)
- Custom indicators layout
- Banner optional callbacks
- Walkthrough optional callbacks
- Mandatory Update and First Run Message support
- Reminder about confirming email after sign up
- New parameters to AppStartedEvent
- New placeholders while loading images
- Welcome screen
- Gradle version to 3.1.1
- New uuid mechanism
- Walkthrough pager loop
- Android O importance bug
- Keyboard covering input
- Signing client in sends also client's UUID
- Models with email and/or password validation
- Sending VisitScreen event from aspect
- Support for Tracker and Android O Background Execution Limits
- Common templates for walkthrough, banners and welcome screen
- Major SDK core optimization
- Major Injector rebuild
- OkHttp header encoding
- Event duplication
- Nullable serialized models
- Synalter multiple modifications of same view
- Walkthrough and WelcomeScreen are now retrieved from API
- Client.logIn() sign in with SDK generated UUID
- Sample app fix for signIn() and getClient()
- Get client profile model
- Retrieve client's UUID from Client
- Get client profile model
- Unit and Instrumental tests
- Injector base url configuration
- Updated Support, MultiDex, RxAndroid, Dagger, OkHttp versions
- Walkthrough page transformations fix
- TextInputLayout hints for Oreo
- Synalter - powerful tool to modify content
- README is now up to date
- Sample app is now up to date
- Dagger2, RxJava2 and OkHttp versions update
- Walkthrough does not require to be called on demand
- Walkthrough page transformations
- Onboarding
- Welcome Screen
- Redundant debug modes in Profile and Client
- Walkthrough
- AppStartedEvent is now unique and queued
- Removing duplicated events
- Removed redundant colors
- README
- Code cleanup
- Detecting duplicated events
- Changelog
- Tracking views interactions with AspectJ
- Removing duplicated events
- MultiDex in sample/build.gradle
- TrackerViewActivity to test tracking views interactions
- Application class is now MultiDexApplication
- BaseViewAspect class has now dedicated overloaded methods
- Removed underscores in
ProfileFeaturesActivity#createClient()
attributes (sample app)