All notable changes to this project will be documented in this file. This project adheres to Semantic Versioning.
- An option to pause automatic in-app displaying has been added. To pause, set
IterableAPI.inAppManager.isAutoDisplayPaused
totrue
(default:false
).
- In rare instances
regiserDeviceToken
API can cause crash. This should fix it.
- In-app messages now get "pre-loaded" with a timer (or until the in-app loads) to mitigate seeing the loading of the message
- The JSON payload is now checked to be a valid JSON object before serialization
- Some classes that were intended for internal framework usage only have been assigned proper permission levels (thanks, made2k!)
- The root view controller is now correctly found on projects that are newly created in iOS 13
nil
is properly returned when deep linking encounters an error
- Added internal
deviceAttributes
field for compatibility
- This SDK release is based off of 6.2.4, as 6.2.5 had some framework specific code that we don't believe has any user impact, but out of caution, is omitted from this release, and has the noted fixes below.
- Action buttons now show properly when a mediaURL isn't specified
- The
trackEvent
event is now named accordingly - Fixed the
campaignId
data type within our SDK (thanks, nkotula!)
- Fixed the
campaignId
data type within our SDK (thanks, nkotula!)
- Properly attribute the source of in app closes
IterableInAppManagerProtocol
has been givengetMessage(withId id: String)
(Objective-C:@objc(getMessageWithId:)
)
- For Objective-C apps,
IterableLogDelegate.log
has had a typo fixed; the new signature is@objc(log:message:)
- For Objective-C apps,
IterableAPI.updateSubscriptions
has had a typo fixed; the new signature is@objc(updateSubscriptions:unsubscribedChannelIds:unsubscribedMessageTypeIds:subscribedMessageTypeIds:campaignId:templateId:)
- Moved podspec
resources
toresource_bundles
to avoid name collisions for static libraries (thanks, iletch!) - Give
LogLevel
an Objective-C specific name (IterableLogLevel
) (thanks, osawhoop!)
- Made class extensions internal rather than public to avoid collisions (thanks, RolandasRazma!)
- Moved Mobile Inbox support to GA (no longer in beta), and:
- 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)
- Added support for Swift Package Manager
Please see each method's source code documentation for details.
IterableAPI.track(inAppOpen messageId: String)
IterableAPI.track(inAppClick messageId: String, buttonURL: String)
- Fixed in-apps where display types that were not
fullScreen
were not displaying properly or becoming unresponsive.
- Fixed the function signature of the
updateSubscriptions
call (thanks, Conor!) - Fixed
NoneLogDelegate
not being usable forIterableConfig.logDelegate
(thanks, katebertelsen!)
- Converted a log message variable to be interpreted as an UTF8 String (thanks, chunkyguy!)
- Enabled
BUILD_LIBRARY_FOR_DISTRIBUTION
for better compatibility across development environments
IterableAPI.spawnInAppNotification(_:)
- In-app messages are automatically shown by SDK now. Please check our migration guide.
IterableAPI.get(inAppMessages:)
- Use
IterableAPI.inAppManager.getMessages()
instead
- Use
- There is no need to set
IterableConfig.pushIntegrationName
for new projects.
Please see method documentation for details about how to replace them.
IterableAPI.inAppConsume(messageId:)
IterableAPI.showSystemNotification(..)
IterableAPI.getAndTrack(deeplink:callbackBlock:)
- Fixed a bug in token to hex conversion code.
- Use
WKWebView
instead of deprecated classUIWebView
. - Migrated all Objective-C code to Swift.
- Inbox
- Brand new inbox functionality. Please see documentation for more details.
- In this version we have changed the way we use in-app notifications. In-app messages are now being sent asynchronously and your code can control the order and time in which an in-app notification will be shown. There is no need to poll for new in-app messages. Please refer to the in-app messages section of README file for how to use in-app messages. If you are already using in-app messages, please refer to migration guide section of README file.
- Url scheme
iterable://
is reserved for Iterable internal actions. In an earlier beta version, the reserved url scheme wasitbl://
but we are not using that now.itbl://
scheme is only there for backward compatibility and should not be used. - Url scheme
action://
is for user custom actions.
- Increase number of in-app messages fetched from the server to 100.
- Support for
action://your-custom-action-name
URL scheme for calling custom actions- For example, to have
IterableCustomActionDelegate
call a custombuyCoffee
action when a user taps on an in-app message's Buy button.
- For example, to have
- Support for reserved
itbl://sdk-custom-action
scheme for SDK internal actions.- URL scheme
itbl://sdk-custom-action
is reserved for internal SDK actions. Do not use it for custom actions. - For example, future versions of the SDK may allow buttons to call href
itbl://delete
to delete an in-app message.
- URL scheme
- Carthage support with Xcode 10.2
- Xcode 10.2 Warnings
- URL Query parameters encoding bug
- We have improved the in-app messaging implementation significantly.
- 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.
- It should be straightforward to migrate to the new implementation. There are, however, some breaking changes. Please see migration guide for more details.
spawnInAppNotification
call is removed. Please refer to migration guide mentioned above.
- You can now use
updateEmail
if the user is identified with eitheremail
oruserId
. Earlier you could only callupdateEmail
if the user was identified byemail
. - The SDK now sets
notificationsEnabled
flag on the device to indicate whether notifications are enabled for your app.
- nothing yet
- Carthage support with Xcode 10.2
- More refactoring and tests.
- Now we do not call createUserForUserId when registering device. This is handled on the server side.
destinationUrl
was not being returned correctly from the SDK when using custom schemes for inApp messages.
- Call createUserForUserId when registering a device with userId
- Refactoring and tests.
- You can now set
logHandler
in IterableConfig. - Now you don't have to call
IterableAPI.registerToken
on login/logout.
- Don't show in-app message if one is already showing.
- Fixed issue that affects clients who are upgrading from Objective C Iterable SDK to Swift SDK. If you have attribution info stored in the previous Objective C SDK, it was not being deserialized in Swift SDK.