Identity
This document lists information about the previous versions of the Adobe Experience Platform Mobile SDKs. Check out this page for latest versions and solution support of the Mobile SDKs.
The Identity extension is bundled with Mobile Core and enables your app with the Experience Cloud ID (ECID). This service helps with the synchronization of Adobe and other customer identifiers.
On web or other platforms, there might situations where this extension might not be required, and the implementation of this SDK extension on mobile apps is required.
To get started with Identity, complete the following steps:
- Add the Identity extension to your app.
- Implement the SDK APIs to complete the following tasks:
- Update customer IDs.
- Append Adobe visitor data to a URL string.
- Return customer IDs.
- Retrieve Experience Cloud IDs.
- Set advertising IDs.
- Set the device notification for push notifications.
Add the Identity extension to your app
C#
After importing the ACPCore.unitypackage, the Identity extension for Unity can be added with following code in the MainScript
Copied to your clipboardusing com.adobe.marketing.mobile;
Swift
In Swift, the ACPCore library includes ACPIdentity:
Copied to your clipboardimport ACPCore
Objective-C
Copied to your clipboard#import "ACPIdentity.h"
Cordova
After creating your Cordova app and adding the Android and iOS platforms, the Identity extension for Cordova can be added with this command:
Copied to your clipboardcordova plugin add https://github.com/adobe/cordova-acpcore.git
C#
After importing the ACPCore.unitypackage, the Identity extension for Unity can be added with following code in the MainScript
Copied to your clipboardusing com.adobe.marketing.mobile;
Register the Identity extension
The registerExtension()
API registers the Identity extension with the Mobile Core extension. This API allows the extension to send and receive events to and from the Mobile SDK.
To register the Identity extension, use the following code sample:
After calling the setApplication()
method in the onCreate()
method, register the extension. If the registration was not successful, an InvalidInitException
is thrown.
Java
Copied to your clipboardpublic class MobiletApp extends Application {@Overridepublic void onCreate() {super.onCreate();MobileCore.setApplication(this);try {Identity.registerExtension();} catch (Exception e) {//Log the exception}}}
Register the Identity extension in your app's didFinishLaunchingWithOptions
function:
Swift
Copied to your clipboardfunc application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {ACPIdentity.registerExtension();// Override point for customization after application launch.return true;}
Objective-C
Copied to your clipboard- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {[ACPIdentity registerExtension];// Override point for customization after application launch.return YES;}
When using React Native, registering Identity with Mobile Core should be done in native code, which is shown under the Android and iOS tabs.
When using Flutter, registering Identity with Mobile Core should be done in native code, which is shown under the Android and iOS tabs.
When using React Native, registering Identity with Mobile Core should be done in native code, which is shown under the Android and iOS tabs.
C#
iOS
Register the Identity extension in your app's FinishedLaunching()
function:
Copied to your clipboardpublic override bool FinishedLaunching(UIApplication app, NSDictionary options){global::Xamarin.Forms.Forms.Init();LoadApplication(new App());ACPIdentity.RegisterExtension();// start coreACPCore.Start(startCallback);return base.FinishedLaunching(app, options);}private void startCallback(){// set launch configACPCore.ConfigureWithAppID("yourAppId");}
Android
Register the Identity extension in your app's OnCreate()
function:
Copied to your clipboardprotected override void OnCreate(Bundle savedInstanceState){base.OnCreate(savedInstanceState);global::Xamarin.Forms.Forms.Init(this, savedInstanceState);LoadApplication(new App());ACPIdentity.RegisterExtension();// start coreACPCore.Start(new CoreStartCompletionCallback());}class CoreStartCompletionCallback : Java.Lang.Object, IAdobeCallback{public void Call(Java.Lang.Object callback){// set launch configACPCore.ConfigureWithAppID("yourAppId");}}
After calling the setApplication()
method in the onCreate()
method, register the extension. If the registration was not successful, an InvalidInitException
is thrown.
Java
Copied to your clipboardpublic class MobiletApp extends Application {@Overridepublic void onCreate() {super.onCreate();MobileCore.setApplication(this);try {Identity.registerExtension();} catch (Exception e) {//Log the exception}}}
Register the Identity extension in your app's didFinishLaunchingWithOptions
function:
Swift
Copied to your clipboardfunc application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {ACPIdentity.registerExtension();// Override point for customization after application launch.return true;}
Objective-C
Copied to your clipboard- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {[ACPIdentity registerExtension];// Override point for customization after application launch.return YES;}
When using React Native, registering Identity with Mobile Core should be done in native code, which is shown under the Android and iOS tabs.
When using Flutter, registering Identity with Mobile Core should be done in native code, which is shown under the Android and iOS tabs.
When using React Native, registering Identity with Mobile Core should be done in native code, which is shown under the Android and iOS tabs.
Register the Identity extension in your app's Start()
function:
C#
Copied to your clipboardvoid Start() {ACPIdentity.RegisterExtension();}
C#
iOS
Register the Identity extension in your app's FinishedLaunching()
function:
Copied to your clipboardpublic override bool FinishedLaunching(UIApplication app, NSDictionary options){global::Xamarin.Forms.Forms.Init();LoadApplication(new App());ACPIdentity.RegisterExtension();// start coreACPCore.Start(startCallback);return base.FinishedLaunching(app, options);}private void startCallback(){// set launch configACPCore.ConfigureWithAppID("yourAppId");}
Android
Register the Identity extension in your app's OnCreate()
function:
Copied to your clipboardprotected override void OnCreate(Bundle savedInstanceState){base.OnCreate(savedInstanceState);global::Xamarin.Forms.Forms.Init(this, savedInstanceState);LoadApplication(new App());ACPIdentity.RegisterExtension();// start coreACPCore.Start(new CoreStartCompletionCallback());}class CoreStartCompletionCallback : Java.Lang.Object, IAdobeCallback{public void Call(Java.Lang.Object callback){// set launch configACPCore.ConfigureWithAppID("yourAppId");}}
Previously known as MCID, the Experience Cloud ID (ECID) is a 38 character ID that uniquely identifies each visitor in the Adobe Experience Platform.
After the configuration is complete, an ECID is generated and, where applicable, is included on all Analytics and Audience Manager hits. Other IDs, such as custom and automatically-generated IDs, continue to be sent with each hit.
Visitor tracking between an app and the mobile web
If your app opens mobile web content, you need to ensure that visitors are not identified separately as they move between the native and mobile web.
Visitor IDs in apps
The Mobile SDK generates a unique visitor ID when the app is installed. This ECID is stored in persistent memory on the mobile device and is sent with every hit. The ECID is removed when the user uninstalls the app or when the user sets the Mobile SDK global privacy status to optedout
.
When the Mobile SDK privacy status is set to optedout
, and the ECID is removed, a new unique visitor ID (ECID) is generated when the user sets the global privacy status to optedin
.
App visitor IDs persist through upgrades.
Visitor IDs in the mobile web
Typical mobile web implementations use the same standard analytics s_code.js
or AppMeasurement.js
that is used in desktop sites. The JavaScript libraries have their own methods of generating unique visitor IDs, which causes a different visitor ID to be generated when you open mobile web content from your app.
To use the same visitor ID in the app and mobile web and pass the visitor ID to the mobile web in the URL, complete the following steps:
Implementing visitor tracking between an app and the mobile web
Java
To append visitor information to the URL that is being used to open the web view, call appendVisitorInfoForUrl:
Copied to your clipboardIdentity.appendVisitorInfoForURL("https://example.com", new AdobeCallback<String>() {@Overridepublic void call(String urlWithAdobeVisitorInfo) {//handle the new URL here//For example, open the URL on the device browser//Intent i = new Intent(Intent.ACTION_VIEW);i.setData(Uri.parse(urlWithAdobeVisitorInfo));startActivity(i);}});
Alternately, starting in SDK version 1.4.0 (Identity version 1.1.0), you can call getUrlVariables and build your own URL:
Copied to your clipboardIdentity.getUrlVariables(new AdobeCallback<String>() {@Overridepublic void call(String stringWithAdobeVisitorInfo) {//handle the URL query parameter string here//For example, open the URL on the device browser//Intent i = new Intent(Intent.ACTION_VIEW);i.setData(Uri.parse("https://example.com?" + urlWithAdobeVisitorInfo));startActivity(i);}});
Objective-C
To append visitor information to the URL that is being used to open the web view, call appendToUrl:
Copied to your clipboardNSURL* url = [[NSURL alloc] initWithString:@"www.example.com"];[ACPIdentity appendToUrl:url withCallback:^(NSURL * _Nullable urlWithVisitorData) {// handle the appended url here}];
Alternately, starting with SDK version 2.3.0 (ACPIdentity version 2.1.0), you can call getUrlVariables and build your own URL:
Copied to your clipboard[ACPIdentity getUrlVariables:^(NSString * _Nullable urlVariables) {// handle the URL query parameter string hereNSString* urlString = @"https://example.com";NSString* urlStringWithVisitorData = [NSString stringWithFormat:@"%@?%@", urlString, urlVariables];NSURL* urlWithVisitorData = [NSURL URLWithString:urlStringWithVisitorData];[[UIApplication sharedApplication] openURL:urlWithVisitorData options:@{} completionHandler:^(BOOL success) {// handle openURL success}];}];
JavaScript
To append visitor information to the URL that is being used to open the web view, call appendVisitorInfoForUrl:
Copied to your clipboardACPIdentity.appendVisitorInfoForURL("www.example.com").then(urlWithVistorData => console.log("Url with Visitor Data = " + urlWithVisitorData));
Alternately, starting with SDK version 1.0.5, you can call getUrlVariables and build your own URL:
Copied to your clipboardACPIdentity.getUrlVariables().then(urlVariables => console.log("query params = " + urlVariables));
Dart
To append visitor information to the URL that is being used to open the web view, call appendVisitorInfoForUrl:
Copied to your clipboardString result = "";try {result = await FlutterACPIdentity.appendToUrl("www.example.com");} on PlatformException {log("Failed to append URL");}
Alternately, starting with SDK version 1.0.0-beta.1, you can call getUrlVariables and build your own URL:
Copied to your clipboardString result = "";try {result = await FlutterACPIdentity.urlVariables;} on PlatformException {log("Failed to get url variables");}
Cordova
To append visitor information to the URL that is being used to open the web view, call appendVisitorInfoForUrl:
Copied to your clipboardACPIdentity.appendVisitorInfoForUrl("https://example.com", function(handleCallback) {console.log("AdobeExperenceSDK: Url with Visitor Data = " + handleCallback);}, function(handleError) {console.log("AdobeExperenceSDK: Failed to append URL : " + handleError);});
Alternately, you can call getUrlVariables and build your own URL:
Copied to your clipboardACPIdentity.getUrlVariables(function (handleCallback) {console.log("AdobeExperienceSDK: Url variables: " + handleCallback);}, function (handleError) {console.log("AdobeExperenceSDK: Failed to retrieve url variables : " + handleError);});
C#
To append visitor information to the URL that is being used to open the web view, call AppendToUrl:
Copied to your clipboard[MonoPInvokeCallback(typeof(AdobeIdentityAppendToUrlCallback))]public static void HandleAdobeIdentityAppendToUrlCallback(string url){print("Url is : " + url);}ACPIdentity.AppendToUrl("https://www.adobe.com", HandleAdobeIdentityAppendToUrlCallback);
Alternately, you can call GetUrlVariables and build your own URL:
Copied to your clipboard[MonoPInvokeCallback(typeof(AdobeGetUrlVariables))]public static void HandleAdobeGetUrlVariables(string urlVariables){print("Url variables are : " + urlVariables);}ACPIdentity.GetUrlVariables(HandleAdobeGetUrlVariables);
C#
To append visitor information to the URL that is being used to open the web view, call AppendToUrl:
iOS
Copied to your clipboardACPIdentity.AppendToUrl(url, callback => {Console.WriteLine("Appended url: " + callback);});
To append visitor information to the URL that is being used to open the web view, call AppendVisitorInfoForUrl:
Android
Copied to your clipboardACPIdentity.AppendVisitorInfoForURL("https://example.com", new StringCallback());class StringCallback : Java.Lang.Object, IAdobeCallback{public void Call(Java.Lang.Object stringContent){if (stringContent != null){Console.WriteLine("Appended url: " + stringContent);}else{Console.WriteLine("null content in string callback");}}}
Alternately, you can call GetUrlVariables and build your own URL:
iOS
Copied to your clipboardACPIdentity.GetUrlVariables(callback => {Console.WriteLine("Url variables: " + callback);});
Android
Copied to your clipboardACPIdentity.GetUrlVariables(new StringCallback());class StringCallback : Java.Lang.Object, IAdobeCallback{public void Call(Java.Lang.Object stringContent){if (stringContent != null){Console.WriteLine("Url variables: " + stringContent);}else{Console.WriteLine("null content in string callback");}}}
Java
To append visitor information to the URL that is being used to open the web view, call appendVisitorInfoForUrl:
Copied to your clipboardIdentity.appendVisitorInfoForURL("https://example.com", new AdobeCallback<String>() {@Overridepublic void call(String urlWithAdobeVisitorInfo) {//handle the new URL here//For example, open the URL on the device browser//Intent i = new Intent(Intent.ACTION_VIEW);i.setData(Uri.parse(urlWithAdobeVisitorInfo));startActivity(i);}});
Alternately, starting in SDK version 1.4.0 (Identity version 1.1.0), you can call getUrlVariables and build your own URL:
Copied to your clipboardIdentity.getUrlVariables(new AdobeCallback<String>() {@Overridepublic void call(String stringWithAdobeVisitorInfo) {//handle the URL query parameter string here//For example, open the URL on the device browser//Intent i = new Intent(Intent.ACTION_VIEW);i.setData(Uri.parse("https://example.com?" + urlWithAdobeVisitorInfo));startActivity(i);}});
Objective-C
To append visitor information to the URL that is being used to open the web view, call appendToUrl:
Copied to your clipboardNSURL* url = [[NSURL alloc] initWithString:@"www.example.com"];[ACPIdentity appendToUrl:url withCallback:^(NSURL * _Nullable urlWithVisitorData) {// handle the appended url here}];
Alternately, starting with SDK version 2.3.0 (ACPIdentity version 2.1.0), you can call getUrlVariables and build your own URL:
Copied to your clipboard[ACPIdentity getUrlVariables:^(NSString * _Nullable urlVariables) {// handle the URL query parameter string hereNSString* urlString = @"https://example.com";NSString* urlStringWithVisitorData = [NSString stringWithFormat:@"%@?%@", urlString, urlVariables];NSURL* urlWithVisitorData = [NSURL URLWithString:urlStringWithVisitorData];[[UIApplication sharedApplication] openURL:urlWithVisitorData options:@{} completionHandler:^(BOOL success) {// handle openURL success}];}];
JavaScript
To append visitor information to the URL that is being used to open the web view, call appendVisitorInfoForUrl:
Copied to your clipboardACPIdentity.appendVisitorInfoForURL("www.example.com").then(urlWithVistorData => console.log("Url with Visitor Data = " + urlWithVisitorData));
Alternately, starting with SDK version 1.0.5, you can call getUrlVariables and build your own URL:
Copied to your clipboardACPIdentity.getUrlVariables().then(urlVariables => console.log("query params = " + urlVariables));
Dart
To append visitor information to the URL that is being used to open the web view, call appendVisitorInfoForUrl:
Copied to your clipboardString result = "";try {result = await FlutterACPIdentity.appendToUrl("www.example.com");} on PlatformException {log("Failed to append URL");}
Alternately, starting with SDK version 1.0.0-beta.1, you can call getUrlVariables and build your own URL:
Copied to your clipboardString result = "";try {result = await FlutterACPIdentity.urlVariables;} on PlatformException {log("Failed to get url variables");}
Cordova
To append visitor information to the URL that is being used to open the web view, call appendVisitorInfoForUrl:
Copied to your clipboardACPIdentity.appendVisitorInfoForUrl("https://example.com", function(handleCallback) {console.log("AdobeExperenceSDK: Url with Visitor Data = " + handleCallback);}, function(handleError) {console.log("AdobeExperenceSDK: Failed to append URL : " + handleError);});
Alternately, you can call getUrlVariables and build your own URL:
Copied to your clipboardACPIdentity.getUrlVariables(function (handleCallback) {console.log("AdobeExperienceSDK: Url variables: " + handleCallback);}, function (handleError) {console.log("AdobeExperenceSDK: Failed to retrieve url variables : " + handleError);});
C#
To append visitor information to the URL that is being used to open the web view, call AppendToUrl:
Copied to your clipboard[MonoPInvokeCallback(typeof(AdobeIdentityAppendToUrlCallback))]public static void HandleAdobeIdentityAppendToUrlCallback(string url){print("Url is : " + url);}ACPIdentity.AppendToUrl("https://www.adobe.com", HandleAdobeIdentityAppendToUrlCallback);
Alternately, you can call GetUrlVariables and build your own URL:
Copied to your clipboard[MonoPInvokeCallback(typeof(AdobeGetUrlVariables))]public static void HandleAdobeGetUrlVariables(string urlVariables){print("Url variables are : " + urlVariables);}ACPIdentity.GetUrlVariables(HandleAdobeGetUrlVariables);
C#
To append visitor information to the URL that is being used to open the web view, call AppendToUrl:
iOS
Copied to your clipboardACPIdentity.AppendToUrl(url, callback => {Console.WriteLine("Appended url: " + callback);});
To append visitor information to the URL that is being used to open the web view, call AppendVisitorInfoForUrl:
Android
Copied to your clipboardACPIdentity.AppendVisitorInfoForURL("https://example.com", new StringCallback());class StringCallback : Java.Lang.Object, IAdobeCallback{public void Call(Java.Lang.Object stringContent){if (stringContent != null){Console.WriteLine("Appended url: " + stringContent);}else{Console.WriteLine("null content in string callback");}}}
Alternately, you can call GetUrlVariables and build your own URL:
iOS
Copied to your clipboardACPIdentity.GetUrlVariables(callback => {Console.WriteLine("Url variables: " + callback);});
Android
Copied to your clipboardACPIdentity.GetUrlVariables(new StringCallback());class StringCallback : Java.Lang.Object, IAdobeCallback{public void Call(Java.Lang.Object stringContent){if (stringContent != null){Console.WriteLine("Url variables: " + stringContent);}else{Console.WriteLine("null content in string callback");}}}
The ID service code on the destination domain extracts the ECID from the URL instead of sending a request to Adobe for a new ID. The ID service code on the destination page uses this ECID to track the visitor. On hits from the mobile web content, verify that the mid
parameter exists on each hit, and that this value matches the mid
value that is being sent by the app code.