Batch 1.13 comes with a number of changes, some of which deprecate old APIs. While deprecated APIs are still supported, it is greatly encouraged to migrate to the new ones.
This migration guide will help you update your implementation.
Batch now supports setting a deeplink delegate.
This allows you to handle deeplinks directly, rather than have it be handled by iOS'
openURL. Universal links were not supported, your application had to implement a scheme, and anything that was not a valid NSURL would be ignored.
A workaround was to call
[Batch enableAutomaticDeeplinkHandling:false], but it had a couple of limitations:
If you previously used
[Batch enableAutomaticDeeplinkHandling:false], consider using a deeplink delegate.
In order to implement the delegate, you need to make a class that implements that protocol, and set it. Like most delegates, it is weakly retained, so make sure it is retained somewhere else.
Once set, Batch will call you on
-openBatchDeeplink: when your app should process a deeplink. iOS'
openURL will not be called.
In older SDKs, Batch had a single method to enable push notification:
For simplicity, it combined requesting the permission to display notifications and asking iOS for a push token. We also advised to call this method at every app launch to make sure the token is always up to date.
In many cases, this was enough. But if your application followed the good practice to ask the user at some other point in your app than on the first launch, developers had to add their own logic to avoid calling this method unless notifications had already been accepted by the user.
It was also confusing, as it got its name from a method on
UIApplication, but behaved very differently.
So, in Batch 1.13, we split this method in two:
[BatchPush requestNotificationAuthorization]This method does exactly what
[BatchPush registerForRemoteNotifications]used to do: triggers the system notification authorization prompt, and asks for a push token after the user replies.
[BatchPush refreshToken]This method only asks iOS to refresh the push token.
Now, developers who don't immediatly ask for notifications can simply call
[BatchPush refreshToken] in
[BatchPush requestNotificationAuthorization] when they want to trigger the system prompt.
To support iOS 12, Batch 1.13 also introduces:
[BatchPush requestProvisionalNotificationAuthorization]to request provisional notifications on iOS 12
[BatchPush setSupportsAppNotificationSettings:], allowing you to tell iOS that your application supports supplemental notification settings. This needs to be called BEFORE
For more info, see the methods' documentation.
With Batch 1.13.0, we have overhauled how event data works. Even if the deprecated APIs still work, you should migrate to the new format as soon as possible to avoid issues.
If you didn't add data to your events, you can safely skip this documentation.
Starting with Batch SDK 1.13.0, you can attach custom data to events using
BatchEventData. You will then use this event when calling
It is very similar to
It supports setting the following data:
An event supports at most 10 tags and 10 attributes.
Any attempt to add an invalid tag or attribute will fail. Setting a value for an existing key will overwrite it.
BatchEventData *data = [BatchEventData new]; [data addTag:@"sports"]; [data addTag:@"squash"]; [data addTag:@"daily_digest"]; [data putBool:@(YES) forKey:@"premium"]; [data putString:@"123456" forKey:@"id"]; [BatchUser trackEvent:@"read_article" withLabel:nil associatedData:data];
let data = BatchEventData() data.add(tag: "sports") data.add(tag: "squash") data.add(tag: "daily_digest") data.put(true, forKey: "premium") data.put("123456", forKey: "id") BatchUser.trackEvent("read_article", withLabel: nil, data: data)
Event data tracked using the legacy API will be converted to the new format, after logging a warning.
There are a couple of limitations:
BatchEventDatawill be ignored.
Tags are not migrated from arrays found in the legacy data format.
In order to use the new API, you will have to rewrite the code putting data in what used to be a NSDictionary to use BatchEventData.
See the class' documentation for the list of the available
Consider using tags rather than tracking multiple events sharing the same name, but with different labels.
Objective-C users will also to switch from
[BatchUser trackEvent:withLabel:data:] to
Swift users can continue using
BatchUser.trackEvent(, withLabel:, data:), as Swift will recognize