Edit in GitHubLog an issue

Add the required dependencies to your project by including them in the app's Gradle file.

Copied to your clipboard
implementation(platform("com.adobe.marketing.mobile:sdk-bom:3.+"))
implementation("com.adobe.marketing.mobile:campaign")
implementation("com.adobe.marketing.mobile:core")
implementation("com.adobe.marketing.mobile:identity")
implementation("com.adobe.marketing.mobile:lifecycle")
implementation("com.adobe.marketing.mobile:signal")
implementation("com.adobe.marketing.mobile:userprofile")

Add the required dependencies to your project by including them in the app's Gradle file.

Copied to your clipboard
implementation platform('com.adobe.marketing.mobile:sdk-bom:3.+')
implementation 'com.adobe.marketing.mobile:campaign'
implementation 'com.adobe.marketing.mobile:core'
implementation 'com.adobe.marketing.mobile:identity'
implementation 'com.adobe.marketing.mobile:lifecycle'
implementation 'com.adobe.marketing.mobile:signal'
implementation 'com.adobe.marketing.mobile:userprofile'

Add the required dependencies to your project using CocoaPods. Add following pods in your Podfile:

Copied to your clipboard
use_frameworks!
target 'YourTargetApp' do
pod 'AEPCampaign', '~> 5.0'
pod 'AEPCore', '~> 5.0'
pod 'AEPIdentity', '~> 5.0'
pod 'AEPLifecycle', '~> 5.0'
pod 'AEPSignal', '~> 5.0'
pod 'AEPUserProfile', '~> 5.0'
end

Set up in-app messaging

To learn how to create an in-app message using Adobe Campaign, see the tutorial on preparing and sending an in-app message.

Set up local notifications

To set up local notifications in Android, update the AndroidManifest.xml file:

Copied to your clipboard
<receiver android:name="com.adobe.marketing.mobile.LocalNotificationHandler"/>

To configure the notification icons that the local notification will use, see the configuring notification icons section within the Mobile Core.

No additional setup is needed for iOS in-app messaging and local notifications.

Java

Example

Copied to your clipboard
FirebaseInstanceId.getInstance().getInstanceId()
.addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
@Override
public void onComplete(@NonNull Task<InstanceIdResult> task) {
if (!task.isSuccessful()) {
return;
}
// Get new Instance ID token
String registrationID = task.getResult().getToken();
// Log and toast
System.out.println("Received new registration token: " + registrationID);
// invoke the API to send the push identifier to the Identity Service
MobileCore.setPushIdentifier(registrationID);
}
});

iOS simulators do not support push messaging.

Swift

Example

Copied to your clipboard
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
// Set the deviceToken that the APNS has assigned to the device
MobileCore.setPushIdentifier(deviceToken: deviceToken)
//...
}

Objective-C

Example

Copied to your clipboard
- (void) application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
// Set the deviceToken that the APNS has assigned to the device
[AEPMobileCore setPushIdentifier:deviceToken];
//...
}

Java

Syntax

Copied to your clipboard
public static void collectMessageInfo(final Map<String, Object> messageInfo)
  • messageInfo is a map that contains the delivery ID, message ID, and action type for a local or push notification for which there were interactions. The delivery and message IDs are extracted from the notification payload.

Example

Copied to your clipboard
@Override
protected void onResume() {
super.onResume();
handleTracking();
}
// handle notification open and click tracking
private void handleTracking() {
Intent intent = getIntent();
Bundle data = intent.getExtras();
HashMap<String, Object> userInfo = null;
if (data != null) {
userInfo = (HashMap)data.get("NOTIFICATION_USER_INFO");
} else {
return;
}
// Check if we have notification user info.
// If it is present, this view was opened based on a notification.
if (userInfo != null) {
String deliveryId = (String)userInfo.get("deliveryId");
String broadlogId = (String)userInfo.get("broadlogId");
HashMap<String, Object> contextData = new HashMap<>();
if (deliveryId != null && broadlogId != null) {
contextData.put("deliveryId", deliveryId);
contextData.put("broadlogId", broadlogId);
// Send Click Tracking since the user did click on the notification
contextData.put("action", "2");
MobileCore.collectMessageInfo(contextData);
// Send Open Tracking since the user opened the app
contextData.put("action", "1");
MobileCore.collectMessageInfo(contextData);
}
}
}

Swift

Syntax

Copied to your clipboard
static func collectMessageInfo(_ messageInfo: [String: Any])
  • messageInfo is a dictionary that contains the delivery ID, message ID, and action type for a local or push notification for which there were interactions. The delivery and message IDs are extracted from the notification payload.

Example

Copied to your clipboard
// Handle notification interaction from background or closed
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
DispatchQueue.main.async(execute: {
let userInfo = response.notification.request.content.userInfo
var broadlogId:String = (userInfo["_mId"] ?? userInfo["broadlogId"]) as! String
var deliveryId:String = (userInfo["_dId"] ?? userInfo["deliveryId"]) as! String
if (broadlogId.count == 0 || deliveryId.count == 0) {
return
}
// Send Click Tracking since the user did click on the notification
MobileCore.collectMessageInfo([
"broadlogId": broadlogId,
"deliveryId": deliveryId,
"action": "2"
])
// Send Open Tracking since the user opened the app
MobileCore.collectMessageInfo([
"broadlogId": broadlogId,
"deliveryId": deliveryId,
"action": "1"
])
})
}

Objective-C

Syntax

Copied to your clipboard
+ (void) collectMessageInfo:(NSDictionary<NSString *,id> * _Nonnull)
  • messageInfo is a dictionary that contains the delivery ID, message ID, and action type for a local or push notification for which there were interactions. The delivery and message IDs are extracted from the notification payload.

Example

Copied to your clipboard
// Handle notification interaction from background or closed
-(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)(void))completionHandler{
dispatch_async(dispatch_get_main_queue(), ^{
NSDictionary *userInfo = response.notification.request.content.userInfo;
NSString *broadlogId = userInfo[@"_mId"] ?: userInfo[@"broadlogId"];
NSString *deliveryId = userInfo[@"_dId"] ?: userInfo[@"deliveryId"];
if(!broadlogId.length || !deliveryId.length){
return;
}
// Send Click Tracking since the user did click on the notification
[AEPMobileCore collectMessageInfo:@{
@"broadlogId" : broadlogId,
@"deliveryId": deliveryId,
@"action": @"2"
}];
// Send Open Tracking since the user opened the app
[AEPMobileCore collectMessageInfo:@{
@"broadlogId" : broadlogId,
@"deliveryId": deliveryId,
@"action": @"1"
}];
});
}

Handling in-app message website URLs on Android

Website URL's are handled without any additional action by the app developer. If an in-app message is clicked through and contains a valid URL, the device's default web browser will redirect to the URL contained in the in-app notification payload. The location of the URL differs for each notification type:

  • The url key is present in the alert message payload
  • The url is present in the query parameters of a fullscreen message button (data-destination-url)
  • The adb_deeplink key is present in the local notification payload
  • The uri key is present in the push notification payload

To handle deep links in the notification payload, you need to set up URL schemes in the app. For more information about setting URL schemes for Android, please read the tutorial on creating deep links to app content. Once the desired activity is started by the newly added intent filter, the data present in the deep link can be retrieved. After that point, any further actions based on the data present in the deep link can be made.

Java

Copied to your clipboard
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent intent = getIntent();
String action = intent.getAction();
Uri data = intent.getData();
Map<String, Intent> urlToIntentMap = new HashMap<>();
// add url string to Intent object mappings
// e.g. urlToIntentMap.put("https://validUrl.com", new Intent());
if (data != null) {
ServiceProvider.getInstance().getUriService().setUriHandler(new URIHandler() {
@Override
public Intent getURIDestination(String uri) {
return urlToIntentMap.get(uri);
}
});
}
}

Android app links were introduced with Android OS 6.0. They are similar to deep links in functionality, although they have the appearance of a standard website URL. The intent filter previously set up for deep links is modified to handle http schemes and verification of the app link needs to be set up on Google Search Console.

For more information on the additional verification setup needed, please read the tutorial on verifying Android app links. The resulting app link can be used to redirect to specific areas of your app if the app is installed or redirect to your app's website if the app isn't installed. For more information on Android app links, please read the guide on handling Android app links.

Handling alert or fullscreen notification website URLs on iOS

Website URL's included in alert or fullscreen messages are handled without any additional action by the app developer. If an alert of fullscreen message is clicked through and contains a valid URL, the Safari browser will be used to load the URL contained in the notification payload. The location of the URL differs for each notification type:

  • The url key is present in the alert message payload
  • The url is present in the query parameters of a fullscreen message button (data-destination-url)
  • The adb_deeplink key is present in the local notification payload
  • The uri key is present in the push notification payload

Handling local notification website URLs on iOS

Swift

The website URL in the local notification response can be loaded using the UrlService's openUrl method.

Copied to your clipboard
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
DispatchQueue.main.async(execute: {
let userInfo = response.notification.request.content.userInfo
let urlString = userInfo["adb_deeplink"] as? String
if (urlString?.count ?? 0) != 0 {
if let url = URL(string: urlString ?? "") {
ServiceProvider.shared.urlService.openUrl(url)
}
}
completionHandler()
})
}

Objective-C

The website URL in the local notification response can be loaded using the openURL:options:completionHandler: instance method.

Copied to your clipboard
-(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)(void))completionHandler{
dispatch_async(dispatch_get_main_queue(), ^{
NSDictionary *userInfo = response.notification.request.content.userInfo;
NSString *urlString = userInfo[@"adb_deeplink"];
if(urlString.length){
[[UIApplication sharedApplication] openURL:[NSURL URLWithString: urlString] options:@{} completionHandler:^(BOOL success) {
NSLog(@"Open %@: %d",urlString,success);
}];
}
completionHandler();
});
}

Handling push notification website URLs on iOS

Swift

The website URL in the push notification response can be loaded using the UrlService's openUrl method.

Copied to your clipboard
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
DispatchQueue.main.async(execute: {
let urlString = userInfo["uri"] as? String
if (urlString?.count ?? 0) != 0 {
if let url = URL(string: urlString ?? "") {
ServiceProvider.shared.urlService.openUrl(url)
}
}
completionHandler(UIBackgroundFetchResultNoData)
})
}

Objective-C

The website URL in the push notification can be loaded using the openURL:options:completionHandler: instance method.

Copied to your clipboard
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler {
dispatch_async(dispatch_get_main_queue(), ^{
NSString *urlString = userInfo[@"uri"];
if(urlString.length){
[[UIApplication sharedApplication] openURL:[NSURL URLWithString: urlString] options:@{} completionHandler:^(BOOL success) {
NSLog(@"Open %@: %d",urlString,success);
}];
}
completionHandler(UIBackgroundFetchResultNoData);
});
}

When a local or push notification is clicked through, the didReceiveNotificationResponse instance method is called with the notification response being passed in as a parameter. For more information, see the Apple developer docs at userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:.

The deep link URL can be retrieved from the response object passed into the handler method. An example for retrieving the deep link URL and loading web links is provided below. The retrieved URL can then be parsed to aid with app navigation decision making. For more information about handling deep links and setting URL schemes for iOS, see the tutorial on defining a custom URL scheme for your app.

Swift

Copied to your clipboard
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
DispatchQueue.main.async(execute: {
let userInfo = response.notification.request.content.userInfo
let urlString = userInfo["adb_deeplink"] as? String
let urlString2 = userInfo["uri"] as? String
if (urlString?.count ?? 0) != 0 {
// handle the local notification deep link (parse any data present in the deep link and/or redirect to a desired area within the app)
} else if (urlString2?.count ?? 0) != 0 {
// handle the push notification deep link (parse any data present in the deep link and/or redirect to a desired area within the app)
}
completionHandler()
})
}

Objective-C

Copied to your clipboard
-(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)(void))completionHandler{
dispatch_async(dispatch_get_main_queue(), ^{
NSDictionary *userInfo = response.notification.request.content.userInfo;
NSString *urlString = userInfo[@"adb_deeplink"];
NSString *urlString2 = userInfo[@"uri"];
if(urlString.length){
// handle the local notification deep link (parse any data present in the deep link and/or redirect to a desired area within the app)
}else if(urlString2.length){
// handle the push notification deep link (parse any data present in the deep link and/or redirect to a desired area within the app)
}
completionHandler();
});
}

Universal links are available for devices on iOS 9.0 or later. They can be used to redirect to specific areas of your app if the app is installed or redirect to your app's website if the app isn't installed. For more information, see the guide on allowing apps and websites to link to your content.

Universal links are typically used from outside your installed app. For example, a universal link would be used from a link present on a website or a link included in an email message. iOS will not open a universal link if it determines that the link is being opened from within the app it links to. For more information on this limitation, see the "Preparing Your App to Handle Universal Links" section within the documentation on supporting universal links. If a universal link is included as a Campaign clickthrough destination, the link must be handled by the app developer in a similar fashion as a deep link. More information can be seen in the handling alert or fullscreen notification deep links on iOS and handling local or push notification deep links on iOS sections.

Java

Example

Copied to your clipboard
MobileCore.updateConfiguration(new HashMap<String, Object>() {
{
put("campaign.registrationDelay", 30); // number of days to delay sending a registration request.
put("campaign.registrationPaused", false); // boolean signaling if registration requests should be paused
}
});

Swift

Example

Copied to your clipboard
var config = [AnyHashable: Any]()
config["campaign.registrationDelay"] = 30 // number of days to delay sending a registration request.
config["campaign.registrationPaused"] = false // boolean signaling if registration requests should be paused
MobileCore.updateConfiguration(config)

Objective-C

Example

Copied to your clipboard
NSMutableDictionary *config = [@{} mutableCopy];
config[@"campaign.registrationDelay"] = @30; // number of days to delay sending a registration request.
config[@"campaign.registrationPaused"] = [NSNumber numberWithBool:NO]; // boolean signaling if registration requests should be paused
[AEPMobileCore updateConfiguration:config];

The image must be placed in your app's assets directory. This directory is found in the src/main/ directory of the app. If the directory is not present, it can be created following a src/main/assets directory structure.

Add the image file to your project by going to Xcode's File > Add Files to "Your App Name"... menu and locating the image file that will be bundled with the app. Ensure that the targets that will be using the image file are checked in the Add to targets selection menu.

  • Privacy
  • Terms of Use
  • Do not sell or share my personal information
  • AdChoices
Copyright © 2025 Adobe. All rights reserved.