Hello,
I am currently exploring the migration from Adobe Analytics to Adobe Experience Platform Customer Journey Analytics (AEP CJA) for our mobile application. Our app is built using Xamarin Native (MonoAndroid), and we have integrated Adobe Analytics using the existing mobile SDK.
As part of our migration planning, I have a few questions:
Any guidance, documentation, or references to migration best practices would be greatly appreciated.
Thank you!
Topics help categorize Community content and increase your ability to discover relevant content.
Views
Replies
Total Likes
Adobe does not currently provide a dedicated Xamarin Native (MonoAndroid) SDK for AEP or CJA. The supported mobile SDKs are for iOS, Android, React Native, and Flutter. In Xamarin environments, most teams either wrap the native Android/iOS AEP SDKs or use a custom binding library to bridge them into Xamarin.
You won’t be able to reuse the legacy Adobe Analytics SDK directly, since CJA relies on data being sent into AEP via the Edge Network. That typically requires moving to the AEP Mobile SDKs and updating your tracking implementation accordingly.
There aren’t official .NET/Xamarin samples, so you’ll likely need some custom integration work. The main considerations are:
Routing all data through AEP Edge instead of the Analytics endpoint
Re-mapping events/parameters into XDM schemas for CJA
Testing identity handling and consent flows carefully across platforms
For migration best practices, Adobe recommends starting with your current analytics design, mapping it to XDM, and implementing incrementally. The Experience League docs for AEP Mobile SDK and Edge Network setup are the best reference points.
Hi @Vinay_Chauhan ,
Thanks for your response,
Right now, I'm working with a Flutter app that's in the process of migrating to Adobe Experience Platform Customer Journey Analytics (AEP CJA).
Goal: Successfully send XDM events (for CJA) to Adobe Edge Network from Flutter
Issue:
sample
try
{
final experienceData = {
“test”: {
"webPageDetails": {
"screen": "homepage",
},
"userDetails": {
"userID": userID,
"ecid": "1234",
},
"applicationDetails": {
"applicationName": appName,
"appVersion": appVersion,
"domain": domain,
"platform": platform,
"apmID": "apm_78910",
}
}
};
Map<String, dynamic> xdmData = {"eventType": "view"};
final ExperienceEvent experienceEvent1 = ExperienceEvent({
"xdmData": xdmData,
"data": experienceData
});
List<EventHandle> result = await Edge.sendEvent(experienceEvent1);
}
catch(e)
{
print(e.toString());
}
Is my XDM event structure correct for posting events with the Edge Mobile SDK (via Flutter)?
Is there any official or community-supported example of Dart/Flutter integration with AEP Edge events that I can reference?
If the event fields (or some nested fields) aren’t mapped or expected in the AEP schema—will that prevent the request from being sent and visible in Charles, or will the SDK still POST the raw event?
Thank you!
Views
Replies
Total Likes
Hi @vamshiKr1
Here are my comments against your each question -
Is my XDM event structure correct for posting events with the Edge Mobile SDK (via Flutter)?
Your XDM event structure looks mostly fine, but there are a couple of points to check:
Make sure the top-level key is "xdm"
instead of "xdmData"
. The SDK expects the event to contain an xdm
object that matches the schema defined in your datastream.
You don’t need to include fields like eventID
or timestamp
; the SDK automatically adds those.
The nested experienceData
object is fine if your schema supports those fields, but any unmapped key won’t be stored in AEP.
Most importantly, confirm that your app has initialized the Edge, Identity, and Core extensions before sending events. Missing initialization is a common reason events don’t appear in Charles.
Is there any official or community-supported example of Dart/Flutter integration with AEP Edge events that I can reference?
Yes — Adobe’s official Flutter SDK repository is available here:
https://github.com/adobe/aepsdk_flutter
It includes example usage for Edge.sendEvent
, as well as packages like:
flutter_aepedge
(for sending XDM events)
flutter_aepedgebridge
(for bridging older trackAction
or trackState
calls during migration)
You can also check the package documentation on Pub.dev:
https://pub.dev/packages/flutter_aepedge
If the event fields (or some nested fields) aren’t mapped or expected in the AEP schema—will that prevent the request from being sent and visible in Charles, or will the SDK still POST the raw event?
The SDK will still attempt to send the event even if some fields don’t map. However -
If required schema fields are missing or invalid, the event might be rejected by the Edge Network (and won’t show in Charles or AEP).
If fields are simply unmapped (i.e., optional or custom), the SDK still posts the event; those fields will just be ignored upstream.
Make sure the mobile datastream is configured for AEP or Analytics, and that your device trusts the Charles certificate, otherwise, HTTPS interception may hide the calls.
Thank you for your detailed feedback and guidance!
Following your suggestions, I’ve restructured my XDM payload:
Your insights on event mapping and unmapped fields have been very helpful.
However, when I use "xdm" as the key (in place of "xdmData"), I’m encountering the following exception:
The following PlatformException was thrown:
PlatformException(0, Unexpected error, null, null)
When the exception was thrown, this was the stack:
#0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:652:7)
#1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:370:18)
<asynchronous suspension>
#2 MethodChannel.invokeListMethod (package:flutter/src/services/platform_channel.dart:556:35)
<asynchronous suspension>
#3 Edge.sendEvent.<anonymous closure> (package:flutter_aepedge/flutter_aepedge.dart:35:17)
<asynchronous suspension>
#4 ActivityTrackerHelper.trackAction (package:sunrise/core/activity_tracker/activity_tracker_helper.dart:71:5)
<asynchronous suspension>
If I use "xdmData" instead, I do not see this error.
Could you clarify whether "xdm" should be used as the top-level key with the Edge Mobile SDK for Flutter? Is there any additional configuration or payload structure needed when using "xdm"?
Also, for completeness, here’s my extension initialization process in AppDelegate.
Could you please reviewing if this part looks correct for sending Edge events and having them appear in Charles/AEP?
MobileCore.setLogLevel(.trace)
MobileCore.setPrivacyStatus(.optedIn)
MobileCore.setWrapperType(.flutter)
let appState = application.applicationState
let extensions = [
Consent.self,
Assurance.self,
AEPEdgeIdentity.Identity.self,
AEPIdentity.Identity.self,
Edge.self,
UserProfile.self,
Lifecycle.self,
Signal.self,
Analytics.self
]
MobileCore.registerExtensions(extensions, {
MobileCore.configureWith(appId: "867a1b8828a8/db***d/launch-99d7a1a16c4b-development")
if appState != .background {
MobileCore.lifecycleStart(additionalContextData: ["contextDataKey": "contextDataVal"])
}
}
)
Thank you again for your assistance!
Views
Replies
Total Likes
Views
Likes
Replies