All notable changes to this project will be documented in this file. This project adheres to Semantic Versioning.
- Fixed logic issue where notifications were being disabled even when auto push registration was turned off
- Support for JSON-only in-app messages, JSON-only messages are now handled by the
onNewInApp
handler and consumed after retrieval - Enhanced notification state tracking to align with system notification permissions changes
- Fixed Crash while initializing IterableSDK on some devices (Unsupported IV Length).
-
- Added
IterableDecryptionFailureHandler
interface to handle decryption failures of PII information.
- Added
- Removed
encryptionEnforced
parameter fromIterableConfig
as data is now always encoded for security
- Migrated from EncryptedSharedPreferences to regular SharedPreferences to prevent ANRs while EncryptedSharedPreferences was created on the main thread. We are now using our own encryption library to encrypt PII information before storing it in SharedPreferences.
- In-Apps are now robust with animation, resolving flickering and animation issues observed on Pixel 6 Pro with API 35.
- Fixed an issue where AuthManager was not reset correctly when logging out a user.
- Fixed
ConcurrentModificationException
leading to crashes during application launches. - Addressed a text truncation issue in Embedded Message templates for applications targeting Android 14 and Android 15.
- Improved InboxActivity compatibility with edge-to-edge layouts, ensuring seamless handling of notches and display cutouts.
- Fixed an issue where the SDK would crash if the
IterableInAppMessage
object was null when consuming an in-app message.
- SDK now provides more insight into JWT refresh failures, so you can take appropriate action in your application code. With this update, when a JWT refresh fails (for any of various reasons), the SDK calls
onAuthFailure
on theIterableAuthHandler
instance you can provide to the SDK at initialization. For more information, see the documentation for Iterable's Android SDK. - The IterableAuthHandler's
onTokenRegistrationFailed(Throwable object)
has been replaced withonAuthFailure(Throwable object)
which will be called when JWT token refresh fails.
- Introducing a new method
setAuthRetryPolicy
inIterableConfig
to set the retry policy for JWT token refresh. - You can now use method -
pauseAuthRetries(boolean pauseRetry)
to pause or resume the JWT token refresh retries. trackPurchase
method now acceptsattributionInfo
parameter to track purchase with attribution information.
- Embedded manager listeners are active only if feature is enabled
- Embedded manager syncs messages as soon as user logs in
- Fixed a bug to prevent app crashes due to malformed authTokens
- Fixes a bug where push notifications opens would lead to app crashes
- Fixes a bug where crashes would occur due to SDK not being initialized
- Updates Glide library in embedded message OOTB views to version 4.16.0
- introduces support for embedded messaging: an eligibility–based, personalized messages sent from Iterable to your mobile and web apps, which can display them inline, using native interface components.
- To display embedded messages, you can use customizable, out-of-the-box components provided by the SDK (cards, notifications, banners), or you can build fully custom components of your own design.
- To learn more, read Embedded Messages with Iterable's iOS SDK.
IterableConfig
is updated with anenableEmbeddedMessaging
flag that needs to be set to true to allow use of embedded messaging functionality
- when JWT is invalid,
IterableAuthManager
is updated to fetch and store a new JWT token locally IterableRequestTask
now has a retry mechanism that fetches a new JWT token and retries the request if JWT is invalid- retries are capped at a max of 5
- SDK now handles
null
scenarios preventing crashes whenIterableEncryptedSharedPreference
creation fails. - Updated crypto library to version 1.1.0-alpha06. 1.1.0-alpha05 solves a race condition during creation process.
This release allows you to use projects hosted on Iterable's EU data center. If your project is hosted on Iterable's European data center (EUDC), configure the SDK to use Iterable's EU-based API endpoints:
Java
IterableConfig config = new IterableConfig.Builder()
// ... other configuration options ...
.setDataRegion(IterableDataRegion.EU)
.build();
IterableApi.initialize(context, "<YOUR_API_KEY>", config);
Kotlin
val configBuilder = IterableConfig.Builder()
// ... other configuration options ...
.setDataRegion(IterableDataRegion.EU)
.build();
IterableApi.initialize(context, "<YOUR_API_KEY>", config);
- Addressed React Native SDK push notification deep linking issues where the app would restart instead of resuming the last activity upon being backgrounded.
- Resolves an additional push notification problem wherein the customActionHandler and urlHandler were not being invoked in specific scenarios, as documented in issue #470. (Credit to @tnortman-jabra for the report and the fix)
IterableInAppManager.setRead
now acceptsIterableHelper.FailureHandler failureHandler
- Fixes an issue where
IterableInAppManager.removeMessage
caused build failure in React Native SDK pointing to legacy method calls. - Fixes an issue where custom action handlers were not invoked when tapping on push notification when the app is in background.
IterableInAppManager.setRead
now acceptsIterableHelper.SuccessHandler successHandler
.IterableApi.inAppConsume
now acceptsIterableHelper.SuccessHandler successHandler
andIterableHelper.FailureHandler failureHandler
.
setEmail
andsetUserId
now acceptsIterableHelper.SuccessHandler successHandler
andIterableHelper.FailureHandler failureHandler
.
- OTT devices (FireTV) will now register as
OTT
device instead ofAndroid
under user's devices.
-
Custom push notification sounds! To play a custom sound for a push notification, add a sound file to your app's
res/raw
folder and specify that same filename when setting up a template in Iterable.Some important notes about custom sounds and notification channels:
- Android API level 26 introduced notification channels. Every notification must be assigned to a channel.
- Each custom sound you add to an Iterable template creates a new Android notification channel. The notification channel's name matches the filename of the sound (without its extension).
- To ensure sensible notification channel names for end users, give friendly names to your sound files. For example, a custom sound file with name
Paid.mp3
creates a notification channel calledPaid
. The end user can see this notification channel name in their device's notification channel settings. - Be sure to place the corresponding sound file in your app's
res/raw
directory.
-
To help you access a user's
email
address,userId
, andauthToken
, the SDK now provides convenience methods:getEmail()
,getUserId()
, andgetAuthToken()
.
-
Updated the Security library and improved
EncryptedSharedPreferences
handling.To work around a known Android issue that can cause crashes when creating
EncryptedSharedPreferences
, we've upgradedandroidx.security.crypto
from version1.0.0
to1.1.0-alpha04
. WhenEncryptedSharedPreferences
cannot be created, the SDK now usesSharedPreferences
(unencrypted).If your app requires encryption, you can prevent this fallback to
SharedPreferences
by setting theencryptionEnforced
configuration flag totrue
. However, if you enable this flag andEncryptedSharedPreferences
cannot be created, an exception will be thrown. -
Improved JWT token management. This change addresses an issue where
null
values could prevent the refresh of a JWT token.
-
Fixed an issue which could prevent in-app messages from respecting the Position value selected when setting up the template (top / center / bottom / full).
-
Fixed crashes that sometimes happened during in-app message animations.
This release includes support for encrypting some data at rest, and an option to store in-app messages in memory.
In Android apps with minSdkVersion
23 or higher (Android 6.0)
Iterable's Android SDK now encrypts the following fields when storing them at
rest:
email
— The user's email address.userId
— The user's ID.authToken
— The JWT used to authenticate the user with Iterable's API.
(Note that Iterable's Android SDK does not store the last push payload at rest—before or after this update.)
For more information about this encryption in Android, examine the source code
for Iterable's Android SDK: IterableKeychain
.
This release also allows you to have your Android apps (regardless of minSdkVersion
)
store in-app messages in memory, rather than in an unencrypted local file.
However, an unencrypted local file is still the default option.
To store in-app messages in memory, set the setUseInMemoryStorageForInApps(true)
SDK configuration option (defaults to false
):
Java
IterableConfig.Builder configBuilder = new IterableConfig.Builder()
// ... other configuration options ...
.setUseInMemoryStorageForInApps(true);
IterableApi.initialize(context, "<YOUR_API_KEY>", config);
Kotlin
val configBuilder = IterableConfig.Builder()
// ... other configuration options ...
.setUseInMemoryStorageForInApps(true);
IterableApi.initialize(context, "<YOUR_API_KEY>", configBuilder.build());
When users upgrade to a version of your Android app that uses this version of
the SDK (or higher), and you've set this configuration option to true
, the
local file used for in-app message storage (if it already exists) is deleted
However, no data is lost.
If your app targets API level 23 or higher, this is a standard SDK upgrade, with no special instructions.
If your app targets an API level less than 23, you'll need to make the following changes to your project (which allow your app to build, even though it won't encrypt data):
- In
AndroidManifest.xml
, add<uses-sdk tools:overrideLibrary="androidx.security" />
- In your app's
app/build.gradle
:- Add
multiDexEnabled true
to thedefault
object, underandroid
. - Add
implementation androidx.multidex:multidex:2.0.1
to thedependencies
.
- Add
- Added new methods for
setEmail
,setUserId
andupdateEmail
which acceptsauthToken
, providing more ways to passauthToken
to SDK - Added two interface methods -
onTokenRegistrationSuccessful
andonTokenRegistrationFailed
. Override these methods to see if authToken was successfully received by the SDK.
setAuthToken
method is now public allowing additional way to provideauthToken
to SDK.
- Removed collection of advertising ID.
- Fixed an issue where
disableDevice
would get called with no device token.
- This release makes offline events processing available to all Iterable customers who'd like to use it — just ask your customer success manager to enable it for your account. Offline events processing saves a local copy of events triggered in your app while the device is offline (up to 1000 events). When a connection is re-established and your app is in the foreground, the events will be sent to Iterable. For more information, read Offline events processing.
- Fixed an issue where configurations would not be loaded.
config
inIterableApi
is now accessed through sharedInstance.
- Fixed in-apps disappearing due to the functionality of loading HTML changing in Android SDK version 29+.
- Fixed in-app layouts always showing up in the
top
format.
- Notification Badging/Dots can be explicitly enabled or disabled in AndroidManifest by setting
iterable_notification_badging
value totrue
orfalse
. Read More.
- Fixed device registration failure users in JWT enabled projects.
- Fixed an issue where app would hide from app switcher when external links are deep linked from push notification.
- Fixed a regression with pending intents losing immutability that was causing issues on Android 12. (Thanks to @scaires)
- Notification Trampoline restriction is now handled by the SDK allowing push notification to work seamlessly on Android 12+.
- Prevented in-app messages from executing JavaScript code included in their HTML templates.
- Prevented web views from accessing local files.
-
Changed two static methods on the
IterableApi
class,handleAppLink
andgetAndTrackDeepLink
, to instance methods. To call these methods, grab an instance of theIterableApi
class by callingIterableApi.getInstance()
. For example,IterableApi.getInstance().handleAppLink(...)
.⚠ WARNING This is a breaking change. You'll need to update your code.
-
Added the
allowedProtocols
field to theIterableConfig
class.Use this array to declare the specific URL protocols that the SDK can expect to see on incoming links (and that it should therefore handle). Doing this will prevent the SDK from opening links that use unexpected URL protocols.
For example, this code allows the SDK to handle
http
andcustom
links:Java
IterableConfig.Builder configBuilder = new IterableConfig.Builder() .setAllowedProtocols(new String[]{"http", "custom"}); IterableApi.initialize(context, "<YOUR_API_KEY>", config);
Kotlin
val configBuilder = IterableConfig.Builder() .setAllowedProtocols(arrayOf("http","custom")) IterableApi.initialize(context, "<YOUR_API_KEY>", configBuilder.build());
Iterable's Android SDK handles
https
,action
,itbl
, anditerable
links, regardless of the contents of this array. However, you must explicitly declare any other types of URL protocols you'd like the SDK to handle (otherwise, the SDK won't open them in the web browser or as deep links).
- Auth keys and API keys will no more be logged in Android Logcat for security reasons.
- Crash on closing system dialog is now addressed for Android 12+.
- Fixed an issue where push notifications retained data from previously sent notifications.
- When syncing in-app queues, new messages that already have
read
set totrue
will not spawn anInAppDelivery
event.
- Added
android:exported
attribute to activities as required in Android 12. - Pending intents now specify its mutability as required in Android 12. (Thanks to @sidcpatel!)
- Push notifications will now have timestamps on devices with SDK 17 and above.
updateCart
has been added to the SDKdataFields
have been added as a field toCommerceItem
- Devices with Android 11 should now be able to open browser when performing open url actions instead of landing on the app.
- Added a new static method -
setContext
toIterableAPI
. Use this method in your ReactNative project to pass context to IterableSDK from Application -onCreate
method.
-
The following properties have been added to the
CommerceItem
class:sku
- The item's SKUdescription
- A description of the itemurl
- A URL associated with the itemimageUrl
- A URL that points to an image of the itemcategories
- Categories associated with the item
Set these values on
CommerceItem
objects passed to theIterableApi.trackPurchase
method.
-
To resolve a breaking change introduced in Firebase Cloud Messaging version 22.0.0, version 3.3.1 of Iterable's Android SDK bumps the minimum required version of its Firebase Android dependency to 20.3.0.
If upgrading to version 3.3.1 causes your app to crash on launch, or your build to fail, add the following lines to your app's
build.gradle
file:android { ... compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } ... }
-
Updated minimum version for
firebase-messaging
to 20.3.0 to useFirebaseMessaging.getToken()
instead of deprecatedFirebaseInstanceId.getToken()
. -
Notifications will now show timestamp.
- Offline events processing - This feature saves a local copy of events triggered in your app while the device is offline (up to 1000 events). When a connection is re-established and your app is in the foreground, the events will be sent to Iterable. This feature is off by default, and we're rolling it out on a customer-by-customer basis. After you start using this version of the SDK, we'll send you a message before we enable the feature on your account (unfortunately, we can't give you an exact timeline for when this will happen). If you have any questions, talk to your Iterable customer success manager.
- Removed
legacyGCMSenderId
fromIterableConfig
. - Removed deprecated functions
spawnInAppNotification
and redirectedgetInAppMessages
to be called fromIterableInAppManager
.
- Updated minimum version for
firebase-messaging
to 19.0.0. - Added dependency on Kotlin standard library.
- Non-silent inbox messages will now properly account for the read state.
- In-app message prioritization - Ordering the display of in-app messages based on a priority you select in Iterable when creating in-app campaigns
-
Support for the display of a custom message (title and body) in an empty mobile inbox. For more details, see Customizing Mobile Inbox on Android
-
Support for syncing in-app message read state across multiple devices:
- When the SDK fetches in-app messages from Iterable, it examines each message's
read
field to determine if it has already been read. - The SDK's default implementation no longer automatically displays in-app messages that have already been seen on another device (even if those messages were not configured to go directly to the inbox).
If you'd like to try out these beta features, talk with your Iterable customer success manager.
- When the SDK fetches in-app messages from Iterable, it examines each message's
- Support for the display of a custom message (title and body) in an empty mobile inbox. For more details, see Customizing Mobile Inbox on Android
- Support for syncing in-app message read state across multiple devices:
- When the SDK fetches in-app messages from Iterable, it examines each message's
read
field to determine if it has already been read. - The SDK's default implementation no longer automatically displays in-app messages that have already been seen on another device (even if those messages were not configured to go directly to the inbox).
- When the SDK fetches in-app messages from Iterable, it examines each message's
- Changed the timeout for GET calls (
/inApp/getMessages
in particular) from 3 to 10 seconds.
- Fixed a crash that would sometimes happen when dismissing an in-app message while the app is in background.
-
This beta SDK release includes support for two new Iterable features (both of which are in beta):
- Offline events processing - Capturing engagement events when a device is offline and sending them to Iterable when a network connection is reestablished
- In-app message prioritization - Ordering the display of in-app messages based on a priority you select in Iterable when creating in-app campaigns
If you'd like to try out these beta features, talk with your Iterable customer success manager.
- Fixed Firebase check to work without a Firebase database URL in
google-services.json
that may not be present in some recently created Firebase projects.
- Added support for delayed initialization of the SDK. While we still recommend calling
IterableApi.initialize
inApplication#onCreate
, apps initializing the Iterable SDK later should now work properly with push actions and background push notifications without issues.
- Fixed
IllegalStateException
crash inIterableInAppFragmentHTMLNotification
by adding safety checks before dismissing the in-app dialog. - Fixed a crash in the in-app dialog that could occur in some cases when the device is rotated while the in-app dialog is beginning to load.
- Fixed a crash in
IterablePushActionReceiver
whenextras
arenull
. This was only happening in automated analysis tools and not in production, but was nevertheless showing up in crash reports.
- Added support for in-app animations. Select the checkbox to use preset animations when creating a template to see this feature in action.
- Added support to set custom color and transparency for in-app background.
- Fixed an issue where closing an in-app could crash the app if the message gets deleted from another logged in device while it is being displayed.
- The method
getExpiresAt
inIterableInAppMessage
is now public.
- Added authentication support.
- Added a new method -
setAutoDisplayPaused
toInAppManager
. This method pauses the display of in-app messages and can be used to prevent interruptions in certain areas of your app.
- Changed
messageId
argument to be non-null intrackPushOpen
.
- Fixed an issue where the in-app message queue wasn't being refreshed on app launch.
- Removed warning messages from logs when using string resources for notification channel name.
app_name
was removed from published strings and replaced with plain string values in test manifests.disableToken
now disables all devices with the current device token whenemail
anduserId
are not set.
- Fixed an issue where in-app click events were not being registered after displaying an in-app message.
- Fixed NullPointerExceptions in
IterableInAppFragmentHTMLNotification
that could occur in some cases when the activity is destroyed and recreated. - Fixed an issue where in-app messages were not getting cleared upon logout.
- Added support for new parameters -
mergeNestedObject
inupdateUser
method. - Added public methods -
setDeviceAttribute
andremoveDeviceAttribute
to support additional device attributes.
- Method tracing now logs only in VERBOSE log level.
IterableInAppMessage
now stores thecampaignId
it belongs to. (Thanks to @nkotula!)
- The SDK now uses
DialogFragment
to show in-app messages. In-app messages are more stable than before and resilient to device configuration changes like device rotation.
- Fixed an ArrayIndexOutOfBoundsException in IterableRequest which is thrown from inside HttpUrlConnection/OkHttp module in certain Android firmwares
- Added support for new parameters -
subscribedMessageTypeIDs
,campaignId
,templateId
inupdateSubscriptions
method.
-
Changes since beta:
- Added support for various ways to customize the default interface for a mobile inbox
- Added a sample project that demonstrates how to customize the default interface for a mobile inbox
- Added tracking for inbox sessions (when the inbox is visible in the app) and inbox message impressions (when a individual message's item is visible in the mobile inbox message list)
- Removed all old initialization methods starting with
sharedInstanceWithApiKey
- Removed
sendPush
methods (these API methods can't be called from mobile apps) - Removed all deprecated methods with extra parameters for push registration:
void registerDeviceToken(String token)
is the only one available now for token registrationvoid disablePush()
is the only one available for disabling the current push token- Platform is always FCM, and push integration name is taken from
IterableConfig
- The SDK now depends on AndroidX libraries. Migrate your app to use AndroidX before using version 3.2.0 or higher of the SDK.
- When
pushIntegrationName
is not set onIterableConfig
, the SDK now defaults it to the app's package name. If you've set up your push integration with the new Mobile Apps UI, you don't have to specifypushIntegrationName
in the SDK anymore.
- Added a new static method to
IterableFirebaseMessagingService
:isGhostPush
. Use this method to determine whether a Firebase message is an Iterable ghost push or silent push message.
- Fixed the height of full-screen in-app messages to make sure they're not clipped by the Android navigation bar.
- The SDK doesn't log an error message anymore when a custom notification channel name is not set.
- Automatic push registration is now only done if the app is running in foreground
- Push notifications now also display image thumbnails when collapsed
- Connection timeout for GET requests is now 3 seconds, to match other request timeouts
Api-Key
header is now also used for GET requests
- Fixed possible exceptions when an in-app message is not on the screen when it's being resized
- Fixed a NullPointerException that could occur in some cases when trying to get Advertising ID
- Removed FirebaseInstanceIDService dependency to support newer versions of
firebase-messaging
library. This bumps the minimum required version offirebase-messaging
to 17.4.0.
- Fixed deserialization of in-app messages stored with beta versions of the SDK
- SDK platform and version is now sent with every API request via headers
Api-Key
header name is now used for the API key instead ofapi_key
, for consistency with HTTP header naming conventions
- Fixed an issue that could cause the SDK not to persist in-app message properties (processed/consumed)
- Fixed a NullPointerException that could occur in IterableActivityMonitor if it was initialized after application start
BREAKING CHANGES
The in-app messaging implementation has been significantly improved:
- The SDK now maintains a local queue and keep it in sync with the server-side queue automatically
- Iterable servers now notify apps via silent push messages whenever the in-app message queue is updated
- In-app messages are shown by default whenever they arrive
Check the In-app messages documentation for more details.
Please refer to the Migration guide if you've been using in-app messages in your app and updating a newer version of the SDK.
-
BREAKING CHANGE: Added
IterableContext
argument toIterableCustomActionHandler
The new method signature is:
boolean handleIterableCustomAction(IterableAction action, IterableActionContext actionContext)
actionContext
can be used to determine where the call is calling from - push message, in-app message, or a deep link. -
The SDK now sets
notificationsEnabled
flag on the device to indicate whether notifications are enabled for the app -
Changes to in-app links:
action://
URL scheme is now reserved for app-specific custom actions. When a user clicks on a link withhref
=action://myCustomAction
, the SDK callsIterableCustomActionHandler.handleIterableCustomAction
with action type set tomyCustomAction
.iterable://
URL scheme is now reserved for actions handled by the SDK (i.e. future versions of the SDK may defineiterable://delete
as an action to delete the in-app message)itbl://
links will keep working as custom actions (similar toaction://
URLs) for backwards compatibility, butitbl://
namespace is deprecated in favor ofaction://
.- Migration: if you've been using
itbl://
links in the past, please update your templates withaction://
instead
-
Connect timeout for deeplink resolution is now 3 seconds
spawnInAppNotification
has been removed. Please refer to the in-app migration guide (above)
- Fixed the URL parameter in
inAppClick
event
- The SDK now passes
preferUserId
flag to create a user by userId if it does not exist when using userId to identify the user - Incresed the deep link timeout to 3 seconds
- Fixed InAppClick event parameter to properly track the URL that was clicked
- Fixed a NullPointerException when an in-app message was being shown while the app was in background
- Added an option to specify notification channel name via manifest metadata (
iterable_notification_channel_name
) - Added support for color resource references in
iterable_notification_color
manifest metadata parameter
updateEmail
can now be used if the user is identified with userId- Connection timeout is now 3 seconds
- Fixed a NullPointerException when the app has a plain-text label in
AndroidManifest.xml
instead of a string resource reference
- Added
updateEmail
method with success & failure callbacks
- Added public methods to
IterableFirebaseMessagingService
andIterableFirebaseInstanceIDService
that can be called from a customFirebaseMessagingService
subclass
- Added a new field to
IterableConfig
-logLevel
- to specify the log level for Iterable SDK log messages
- The SDK now uses
preferUserId
flag to create a user by userId instead of the deprecatedcreateUserForUserId
API
- The SDK now catches any RuntimeExceptions that may sometimes happen when calling
getAdvertisingIdInfo
registerDeviceToken
anddisableToken
now use the email/userId that was set at the time of the call, to handle login/logout correctly
- Added support for user registration with userId. The SDK will now create a new user for userId if it does not exist before registering the device on the user's profile.
- Added new device fields (Iterable SDK version, app version, app package name) to
registerDeviceToken
call - Deferred Deep Linking support
- Fixed a NullPointerException when an in-app was resized after being dismissed
- The SDK now registers the token when a new email/userId is set and disables the old device if email/userId was previously set and then changed. This can be disabled by setting
autoPushRegistration
tofalse
inIterableConfig
.
- Fixed a NullPointerException when SDK isn't initialized in Application#onCreate and the app is opened from a push notification
Released on 2018-08-10
- The new email is now persisted when
updateEmail
is called - SDK now ensures that only one in-app message can be shown at a time
Released on 2018-07-30
- Full FCM support
- Added support for push action buttons
- Added a new SDK initialization method that takes
IterableConfig
object with configuration options - User ID/email is now decoupled from SDK initialization. It can be changed by calling
setEmail
orsetUserId
on theIterableApi
instance. - The SDK now stores attribution data within 24 hours of opening the app from a push notififcation or from an App Link in an email
- Added two handlers:
IterableUrlHandler
andIterableCustomActionHandler
that can be used to customize URL and custom action handling for push notifications - Added
getPayloadData()
method to retrieve the entire notification payload for the notification that opened the app (thanks @steelbrain)
- Removed GCM support
- Old initialization methods (
sharedInstanceWithApiKey
) are now deprecated - Old
registerForPush
andregisterDeviceToken
methods are now deprecated
- If you're using GCM, update your Android app to Firebase Cloud Messaging
- Replace
IterableAPI.sharedInstanceWithApiKey(...)
with the following:
IterableConfig config = new IterableConfig.Builder()
.setPushIntegrationName("myPushIntegration")
.setUrlHandler(this) // If you want to handle URLs coming from push notifications
.build();
IterableApi.initialize(context, "YOUR API KEY", config);
- Call
registerForPush()
to retrieve the push token and register the device. - User email/userId is now persisted, so you'll only need to call
setEmail
orsetUserId
when the user logs in or logs out. - The SDK now tracks push opens automatically, as long as the SDK is initialized in
Application
'sonCreate
. See README for instructions. Once it is set up, remove all direct calls totrackPushOpen
.
Released on 2018-03-31
- Updated requests to not send when there is an exception while constructing the JSON request body.
- Fixed the reference to internal fields in NotificationCompat.Builder for buildVersion 27.
Released on 2018-03-07
- Fixed the load sequence for retrieving a notification image.
Released on 2018-01-22
- Added non-empty data body for notification rendering.
- Added default channel id support.
Released on 2017-11-30
- Fixed error in IterablePushRegistration when
getDeviceToken
returns an empty PushRegistrationObject.
Released on 2017-11-20
- Added the
updateSubscriptions
function to create to modify channel, list, and message subscription preferences.
Released on 2017-11-03
- Added support for html based in-app notifications.
Released on 2017-10-20
- Fixed payload path for image url.
Released on 2017-07-28
- Added support for android image notifications.
- Fixed load error for empty image url.
Released on 2017-07-19
- Fixed in-app button clicks without an action defined.
Released on 2017-07-19
- Added the in-app consume logic to automatically remove the notification from list of in-app notifications.
- Fixed the payloadfor trackInAppClick to contain the userId.
Released on 2017-06-09
- Added full support for newly created Firebase applications
- Added new functionality for
registerForPush
which takes in the optional pushServicePlatformIterableConstants.MESSAGING_PLATFORM_GOOGLE
(GCM)IterableConstants. MESSAGING_PLATFORM_FIREBASE
(FCM)
IterableFirebaseInstanceIDService
handles firebase token registrations automatically on install.- Added in default tracked device values for
registerDeviceToken
- Changed IterablePushRegistrationGCM to IterablePushRegistration so the registration class is not GCM specific.
- Changed the disable logic to no longer enable the deviceToken prior to disabling.
Released on 2017-02-23
- fixed uploaded pom file
Released on 2017-02-22
- Added support for Android deeplink tracking
getAndTrackDeeplink
tracks a click and returns the destination url.
Released on 2017-01-09
- Updated the PendingIntent request code to use the messageId instead of the current timestamp.
Released on 2017-01-09
- fixed overwritten pushnotification metadata on subsequent notifications
Released on 2016-12-28
- added support for In-App Notifications with different views layouts
- Full screen
- Bottom
- Center
- Top
- includes tracking for In-App opens and clicks
- includes support for GET requests
Released on 2016-10-13
- Added ability to send data by userId