Skip to content

Commit

Permalink
Merge pull request #120 from cacheung/edgeOverRide
Browse files Browse the repository at this point in the history
Add Datastream override feature to Edge plugin.
  • Loading branch information
cacheung committed May 10, 2024
2 parents dde38f5 + 8220f94 commit 2f99735
Show file tree
Hide file tree
Showing 7 changed files with 423 additions and 43 deletions.
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ This repository is a monorepo. It contains a collection of Adobe Experience Plat
| [UserProfile](plugins/flutter_aepuserprofile/README.md) | [![pub package](https://img.shields.io/pub/v/flutter_aepuserprofile.svg)](https://pub.dartlang.org/packages/flutter_aepuserprofile) |
| [Messaging](plugins/flutter_aepmessaging/README.md) | [![pub package](https://img.shields.io/pub/v/flutter_aepmessaging.svg)](https://pub.dartlang.org/packages/flutter_aepmessaging) |

> [!NOTE]
> The Flutter plugins within this repository are specifically designed to support the Android and iOS platforms only.
## iOS Privacy Manifest

> [!IMPORTANT]
Expand Down
165 changes: 158 additions & 7 deletions example/lib/edge.dart
Original file line number Diff line number Diff line change
Expand Up @@ -51,13 +51,144 @@ class _MyAppState extends State<EdgePage> {
});
}

Future<void> sendEvent([datasetId]) async {
//Using Dictionaries method
Future<void> sendEventWithDictionaryDatasetId([datasetId]) async {
late List<EventHandle> result;
Map<String, dynamic> xdmData = {"eventType": "SampleEventType"};
Map<String, dynamic> data = {"free": "form", "data": "example"};

final ExperienceEvent experienceEvent = ExperienceEvent(
{"xdmData": xdmData, "data": data, "datasetIdentifier": datasetId});
{"xdmData": xdmData, "data": data, "datasetIdentifier": datasetId, "datastreamIdOverride": "sampleDatastreamId"});

result = await Edge.sendEvent(experienceEvent);

if (!mounted) {
log('Failed to setState, widget is not mounted');
return;
}

setState(() {
_edgeEventHandleResponse = result;
print("result info " + result.toString());
});
}

Future<void> sendEventWithDictionaryDatastreamIdOverride() async {
late List<EventHandle> result;
Map<String, dynamic> xdmData = {"eventType": "SampleEventType"};
Map<String, dynamic> data = {"free": "form", "data": "example"};

final ExperienceEvent experienceEvent = ExperienceEvent(
{
"xdmData": xdmData,
"data": data,
"datastreamIdOverride": "sampleDatastreamId",
});

result = await Edge.sendEvent(experienceEvent);

if (!mounted) {
log('Failed to setState, widget is not mounted');
return;
}

setState(() {
_edgeEventHandleResponse = result;
print("result info " + result.toString());
});
}

Future<void> sendEventWithDictionaryDatastreamConfigOverride() async {
late List<EventHandle> result;
Map<String, dynamic> xdmData = {"eventType": "SampleEventType"};
Map<String, dynamic> data = {"free": "form", "data": "example"};
Map<String, dynamic> configOverrides = {
"com_adobe_experience_platform": {
"datasets": {
"event": {
"datasetId": "sampleDatasetId"
}
}
}
};

final ExperienceEvent experienceEvent = ExperienceEvent(
{
"xdmData": xdmData,
"data": data,
"datastreamConfigOverride": configOverrides,
});

result = await Edge.sendEvent(experienceEvent);

if (!mounted) {
log('Failed to setState, widget is not mounted');
return;
}

setState(() {
_edgeEventHandleResponse = result;
print("result info " + result.toString());
});
}

//Using Constructors
Future<void> sendEventWithConstructorDatasetId([datasetId]) async {
late List<EventHandle> result;
Map<String, dynamic> xdmData = {"eventType": "SampleEventType"};
Map<String, dynamic> data = {"free": "form", "data": "example"};

final ExperienceEvent experienceEvent = ExperienceEvent.createEvent(xdmData, data, datasetId);

result = await Edge.sendEvent(experienceEvent);

if (!mounted) {
log('Failed to setState, widget is not mounted');
return;
}

setState(() {
_edgeEventHandleResponse = result;
print("result info " + result.toString());
});
}

Future<void> sendEventWithConstructorDatastreamIdOverride() async {
late List<EventHandle> result;
Map<String, dynamic> xdmData = {"eventType": "SampleEventType"};
Map<String, dynamic> data = {"free": "form", "data": "example"};

final ExperienceEvent experienceEvent = ExperienceEvent.createEventWithOverrides(xdmData, data, "sampleDatastreamId");

result = await Edge.sendEvent(experienceEvent);

if (!mounted) {
log('Failed to setState, widget is not mounted');
return;
}

setState(() {
_edgeEventHandleResponse = result;
print("result info " + result.toString());
});
}

Future<void> sendEventWithConstructorDatastreamConfigOverride() async {
late List<EventHandle> result;
Map<String, dynamic> xdmData = {"eventType": "SampleEventType"};
Map<String, dynamic> data = {"free": "form", "data": "example"};
//To override eventDataset using datastream config overrides
Map<String, dynamic> configOverrides = {
"com_adobe_experience_platform": {
"datasets": {
"event": {
"datasetId": "sampleDatasetId"
}
}
}
};

final ExperienceEvent experienceEvent = ExperienceEvent.createEventWithOverrides(xdmData, data, null, configOverrides);

result = await Edge.sendEvent(experienceEvent);

Expand Down Expand Up @@ -96,14 +227,34 @@ class _MyAppState extends State<EdgePage> {
appBar: AppBar(title: Text("Edge Screen")),
body: Center(
child: ListView(shrinkWrap: true, children: <Widget>[
getRichText('AEPEdge extension version: ', '$_edgeVersion\n'),
getRichText('AEPEdge extension version: ', '$_edgeVersion\n'),
ElevatedButton(
child: Text("sendEventWithDictionary"),
onPressed: () => sendEventWithDictionaryDatasetId(),
),
ElevatedButton(
child: Text("sendEventWithDictionary to Dataset"),
onPressed: () => sendEventWithDictionaryDatasetId('datasetId_example'),
),
ElevatedButton(
child: Text("sendEventWithDictionary datastreamIdOverride"),
onPressed: () => sendEventWithDictionaryDatastreamIdOverride(),
),
ElevatedButton(
child: Text("sendEventWithDictionary datastreamConfigOverride"),
onPressed: () => sendEventWithDictionaryDatastreamConfigOverride(),
),
ElevatedButton(
child: Text("sendEventWithConstructor to Dataset"),
onPressed: () => sendEventWithConstructorDatasetId('datasetId_example'),
),
ElevatedButton(
child: Text("sentEvent(...)"),
onPressed: () => sendEvent(),
child: Text("sendEventWithConstructor datastreamIdOverride"),
onPressed: () => sendEventWithConstructorDatastreamIdOverride(),
),
ElevatedButton(
child: Text("sentEvent to Dataset"),
onPressed: () => sendEvent('datasetIdExample'),
child: Text("sendEventWithConstructor datastreamConfigOverride"),
onPressed: () => sendEventWithConstructorDatastreamConfigOverride(),
),
getRichText(
'Response event handles: = ', '$_edgeEventHandleResponse\n'),
Expand Down
118 changes: 103 additions & 15 deletions plugins/flutter_aepedge/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -174,23 +174,101 @@ final ExperienceEvent experienceEvent = ExperienceEvent({
});
List<EventHandle> result = await Edge.sendEvent(experienceEvent);
```

**Example with Datastream ID override**
```dart
Map<String, dynamic> xdmData = {"eventType": "SampleEventType"};
final ExperienceEvent experienceEvent = ExperienceEvent({
"xdmData": xdmData,
"datastreamIdOverride": "SampleDatastreamId"
});
List<EventHandle> result = await Edge.sendEvent(experienceEvent);
```

**Example with Datastream config override**
```dart
Map<String, dynamic> xdmData = {"eventType": "SampleEventType"};
Map<String, dynamic> configOverrides = {
"com_adobe_experience_platform": {
"datasets": {
"event": {
"datasetId": "sampleDatasetID"
}
}
}
};
final ExperienceEvent experienceEvent = ExperienceEvent({
"xdmData": xdmData,
"datastreamConfigOverride": configOverrides
});
List<EventHandle> result = await Edge.sendEvent(experienceEvent);
```
------
### Public classes
#### ExperienceEvent
Experience Event is the event to be sent to Adobe Experience Platform Edge Network. The XDM data is required for any Experience Event being sent using the Edge extension.
Experience event is the event to be sent to Adobe Experience Platform Edge Network. The XDM data is required for any Experience event being sent using the Edge extension.

##### Create Experience Event from Dictionary:
You can create Experience event either by using dictionaries or by utilizing convenience constructors.

**Syntax**
```dart
Map<String, dynamic> xdmData = {"eventType": "SampleEventType"};
//Create Experience event from Dictionary
ExperienceEvent(this.eventData)
//Create Experience event using convenience constructor
ExperienceEvent.createEventWithOverrides(final Map<String, dynamic> xdmData,
[final Map<String, dynamic>? data, final String? datastreamIdOverride, final Map<String, dynamic>? datastreamConfigOverride])
```

**Usage**
##### Create Experience event from Dictionaries:
```dart
// Create Experience event with free form data:
final ExperienceEvent experienceEvent = ExperienceEvent({
"xdmData": xdmData
"xdmData": xdmData,
"data": data
});
// Create Experience event with free form data and datastream ID override:
final ExperienceEvent experienceEvent = ExperienceEvent({
"xdmData": xdmData,
"data": data,
"datastreamIdOverride": "sampleDatastreamId"
});
// Create Experience event with free form data and datastream config override:
final ExperienceEvent experienceEvent = ExperienceEvent({
"xdmData": xdmData,
"data": data,
"datastreamConfigOverride": configOverrides
});
```

##### Add free form data to the Experience event:
##### Create Experience event using convenience constructors:
```dart
// Create Experience event with free form data::
final ExperienceEvent experienceEvent =
ExperienceEvent.createEventWithOverrides(xdmData, data);
// Create Experience event with free form data and datastream ID override:
final ExperienceEvent experienceEvent =
ExperienceEvent.createEventWithOverrides(xdmData, data, "sampleDatastreamId");
// Create Experience event with free form data and datastream config override:
final ExperienceEvent experienceEvent =
ExperienceEvent.createEventWithOverrides(xdmData, data, null, configOverrides);
```

**Example**

Create Experience event using dictionaries

```dart
// example 1
// Create Experience Event with freeform data:
Map<String, dynamic> xdmData = {"eventType": "SampleEventType"};
Map<String, dynamic> data = {"free": "form", "data": "example"};
final ExperienceEvent experienceEvent = ExperienceEvent({
Expand All @@ -199,27 +277,35 @@ final ExperienceEvent experienceEvent = ExperienceEvent({
});
```

##### Set the destination Dataset identifier to the current Experience event:

```dart
// example 2
// Create Experience event with free form data and datastream ID override:
Map<String, dynamic> xdmData = {"eventType": "SampleEventType"};
final ExperienceEvent experienceevent = ExperienceEvent({
Map<String, dynamic> data = {"free": "form", "data": "example"};
final ExperienceEvent experienceEvent = ExperienceEvent({
"xdmData": xdmData,
"data": null,
"datasetIdentifier": "datasetIdExample"
"data": data,
"datastreamIdOverride": "sampleDatastreamId"
});
```

##### Create Experience Event with xdmdata, free form data and the destination Dataset identifier:

```dart
// example 3
// Create Experience event with free form data and datastream config override:
Map<String, dynamic> xdmData = {"eventType": "SampleEventType"};
Map<String, dynamic> data = {"free": "form", "data": "example"};
Map<String, dynamic> configOverrides = {
"com_adobe_experience_platform": {
"datasets": {
"event": {
"datasetId": "sampleDatasetID"
}
}
}
}
final ExperienceEvent experienceEvent = ExperienceEvent({
"xdmData": xdmData,
"data": data,
"datasetIdentifier": "datasetIdExample"
"datastreamConfigOverride": configOverrides
});
```
#### EventHandle
Expand All @@ -229,6 +315,8 @@ The EventHandle is a response fragment from Adobe Experience Platform Edge Netwo
static const String _type = 'type';
static const String _payload = 'payload';
```
## Next steps - Schemas setup and validation with Assurance
For examples on XDM schemas and datasets setup and tips on validating with Assurance, refer to the [Edge Network tutorial](https://github.com/adobe/aepsdk-edge-ios/blob/main/Documentation/Tutorials).

## Contributing
See [CONTRIBUTING](https://github.com/adobe/aepsdk_flutter/blob/main/CONTRIBUTING.md)
Expand Down
Loading

0 comments on commit 2f99735

Please sign in to comment.