All notable changes to this project will be documented in this file.
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 toparams
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()
params 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)