AppboyKit (also known as the Objective-C SDK) is no longer supported and has been replaced by the Swift SDK. It will no longer receive new features, bug fixes, security updates, or technical support—however, messaging and analytics will continue to function as normal. To learn more, see Introducing the New Braze Swift SDK.
Push primer integration
Push primer campaigns encourage your users to enable push on their device for your app. Getting permission from users to send messages directly to their devices can be complex, but our guides can help! This guide shows the steps developers must make to integrate push priming.
Step 1: Add snippet in AppDelegate.m file
Add the following line of code to your AppDelegate.m
file in place of the standard integration:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
...
if (@available(iOS 10.0, *)) {
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
[center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
if (settings.authorizationStatus != UNAuthorizationStatusNotDetermined) {
// authorization has already been requested, need to follow usual steps
[center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert | UNAuthorizationOptionSound | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error) {
[[Appboy sharedInstance] pushAuthorizationFromUserNotificationCenter:granted];
}];
center.delegate = self;
[center setNotificationCategories:[ABKPushUtils getAppboyUNNotificationCategorySet]];
[[UIApplication sharedApplication] registerForRemoteNotifications];
}
}];
} else {
UIApplication *sharedApplication = [UIApplication sharedApplication];
UIUserNotificationSettings *notificationSettings = [sharedApplication currentUserNotificationSettings];
if (notificationSettings.types) {
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound) categories:[ABKPushUtils getAppboyUIUserNotificationCategorySet]];
[sharedApplication registerUserNotificationSettings:settings];
[sharedApplication registerForRemoteNotifications];
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
if #available(iOS 10, *) {
let center = UNUserNotificationCenter.current()
center.getNotificationSettings(completionHandler: { (settings) in
if settings.authorizationStatus != .notDetermined {
// authorization has already been requested, need to follow usual steps
center.requestAuthorization(options: [.alert, .sound, .badge]) { (granted, error) in
Appboy.sharedInstance()?.pushAuthorization(fromUserNotificationCenter: granted)
}
center.delegate = self as? UNUserNotificationCenterDelegate
center.setNotificationCategories(ABKPushUtils.getAppboyUNNotificationCategorySet())
UIApplication.shared.registerForRemoteNotifications()
}
})
} else {
let notificationSettiings = UIApplication.shared.currentUserNotificationSettings
if notificationSettiings?.types != nil {
let setting = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories:nil)
UIApplication.shared.registerUserNotificationSettings(setting)
UIApplication.shared.registerForRemoteNotifications()
}
}
Step 2: Append custom event checker to AppDelegate.m file
The following code snippet checks if a custom event needs to be fired. Add the following line of code to your AppDelegate.m
.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if (@available(iOS 10.0, *)) {
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
[center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
if (settings.authorizationStatus == UNAuthorizationStatusNotDetermined) {
// ...
// fire custom event
// ...
}
}];
} else {
UIUserNotificationSettings *notificationSettings = [[UIApplication sharedApplication] currentUserNotificationSettings];
if (!notificationSettings.types) {
// …
// fire custom event
// ...
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if #available(iOS 10, *) {
let center = UNUserNotificationCenter.current()
center.getNotificationSettings(completionHandler: { (settings) in
if settings.authorizationStatus == .notDetermined {
// ...
// fire custom event
// ...
}
})
} else {
let notificationSettiings = UIApplication.shared.currentUserNotificationSettings
if notificationSettiings?.types != nil {
// ...
// fire custom event
// ...
}
}
Step 3: Set up a deep link handler
Place this following code snippet inside your deep link handling code. You should only execute this deep linking code for your push primer in-app message.
Refer to link handling customization for more information on deep linking.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// ...
// check that this deep link relates to the push prompt
// ...
if (@available(iOS 10.0, *)) {
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
[center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert | UNAuthorizationOptionSound | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error) {
[[Appboy sharedInstance] pushAuthorizationFromUserNotificationCenter:granted];
}];
center.delegate = self;
[center setNotificationCategories:[ABKPushUtils getAppboyUNNotificationCategorySet]];
[[UIApplication sharedApplication] registerForRemoteNotifications];
} else {
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound) categories:[ABKPushUtils getAppboyUIUserNotificationCategorySet]];
UIApplication *sharedApplication = [UIApplication sharedApplication];
[sharedApplication registerUserNotificationSettings:settings];
[sharedApplication registerForRemoteNotifications];
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// ...
// check that this deep link relates to the push prompt
// ...
if #available(iOS 10, *) {
let center = UNUserNotificationCenter.current()
center.delegate = self as? UNUserNotificationCenterDelegate
center.requestAuthorization(options: [.alert, .sound, .badge]) { (granted, error) in
Appboy.sharedInstance()?.pushAuthorization(fromUserNotificationCenter: granted)
}
UIApplication.shared.registerForRemoteNotifications()
} else {
let setting = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories:nil)
UIApplication.shared.registerUserNotificationSettings(setting)
UIApplication.shared.registerForRemoteNotifications()
}