rdc_flutter_sdk 0.0.23 rdc_flutter_sdk: ^0.0.23 copied to clipboard
Flutter plugin for sending user event data to Rabbit Data Collection platform
RDC Flutter SDK #
Overview #
Development Kits (SDKs) for mobile devices named Rabbit Mobile SDK. The Rabbit Mobile SDK will be used for tagging and collecting online data from the mobile application of the Rabbit’s each business unit.
The SDK will be used to collect the online behavior transaction of all Rabbit customers across all its business units and developed into the data analysis and data science model and eventually will be used for data monetization.
Flow Chart #
Features #
Rabbit Data Online Collection SDK for Flutter provides the following features.
In-line Configuration We will implement the overridable configuration by an in-line code configuration on the application bootstrap startup.
Caching The SDK will use cache manager as its in-memory cache to store a device’s static data and MongoDB Realm to keep the tracking data for later use.
Trigger to send data to the API backend Conditions before being sent to the API backend are checked for CPU, Memory, and Battery. All conditions to pass and SDK send data to the API backend.
Flow Chart #
Using the SDK #
Prerequisites #
- iOS 12.0 or later.
- Android 7.0 or later.
- Flutter 2 or later.
Platform Support #
Android | iOS |
---|---|
✔️ | ✔️ |
Install plugin #
rdc_flutter_sdk: ^0.0.23-dev-4
realm: ^3.2.0
Setup #
Dart Setup #
required use Plugin https://pub.dev/packages/permission_handler
await Permission.location.request(); // android, IOS
await Permission.appTrackingTransparency.request(); // IOS only
Android Setup #
add lines below in AndroidManifest.xml file
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/> << add this line >>
build.gradle
allprojects {
repositories {
google()
mavenCentral()
//** add this line
configurations.all {
resolutionStrategy {
force "com.google.android.gms:play-services-location:21.0.1"
}
}
}
}
IOS Setup #
Info.plist
<!-- Permission options for the `location` group -->
<key>NSLocationWhenInUseUsageDescription</key>
<string>Need location when in use</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Always and when in use!</string>
<key>NSLocationUsageDescription</key>
<string>Older devices need location.</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>Can I have location always?</string>
<key>UIBackgroundModes</key>
<string>location</string>
<!-- Permission options for the `appTrackingTransparency` -->
<key>NSUserTrackingUsageDescription</key>
<string>appTrackingTransparency</string>
Podfile
##dart: PermissionGroup.appTrackingTransparency
'PERMISSION_APP_TRACKING_TRANSPARENCY=1',
##dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse]
'PERMISSION_LOCATION=1',
Configuration #
Method | Params | Remark |
---|---|---|
setAPIKey | String key | Authentication key |
setEncryptionKey | String key | Encryption key for encryp data support only hive |
setRotationTime | int min = 1 | Loop time for send data to API |
setDataCollectionType | DataCollectionType type = rotation | Type send data to API immediately or loop |
setRetentionDays | int date = 30 | Clear all data these sent to API |
setDeleteAfterSent | bool value = true | Delete after sent or not. |
setOfflineMode | bool value = false | Send data to API or not. |
setRetryOnFailed | int time = 3 | Retries send data to API. |
setTriggerCondition | int cpu = 0, int memory = 0, int batteryLevel = 0 | Condition for send data to API |
setSessionExpire | int min = 60 | Session expire minute for forgeground |
setSessionAutoExpire | int min = 30 | Session will end after inactive time |
setConsent | bool? value = null | Consent from user |
setPermissionMaid | bool value = false | User allow permission for get Maid only Android |
setStorageCondition | required int min, required int max | Storage < min not save to local database and send API |
Storage between min - max FIFO data in local database |
Event Method #
Method | Params | Remark |
---|---|---|
addEvent | {required String eventName, required String eventValue, Map<dynamic, dynamic>? dataLayer} | Add event log in local database |
getEvents | - | Get list events in local database |
uploadEvent | - | Upload list events send to API |
clearAll | - | Delete all |
clearCache | - | Delete only isSent |
sessionStart | - | Start session in sdk |
sessionEnd | - | End session in sdk |
Custom Data Layer #
The limitation is that it must be flat JSON only and All object have to varchar type
addEvent(dataLayer: {
'custom_field_1': 'custom_field_1',
'custom_field_2': 'custom_field_2',
});
Example #
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Permission.location.request();
await Permission.appTrackingTransparency.request();
var config = RabbitDataConfig(
apiKey: 'aStdsdJsskdjaolsdYUSsdsdSDijsdkjwe', // required
collectionType: DataCollectionType.event, // default
rotationTime: 1, // default
retentionDays: 30, // default
retryTime: 3, // default
deleteAfterSent: true, // default
cpu: 90, // default
memory: 80, // default
betteryLevel: 30, // default
dbType: DBType.hive, // default if you usege flutter version > 3 you can use both of hive and realm database.
consent: null, // default
permissionMaid: false, // default
sessionExpire: con.sessionExpireMin, // default
sessionAutoExpire: con.autoExpireMin, // default
offlineMode: true, // default
storageMin: 1, // default
storageMax: 5 // default
isAutoExpire: true, // default
locationTimeout: 3 // default
);
var rabbitData = await RabbitData.initializeInstance(config);
await rabbitData.addEvent( eventName: 'init_app', eventValue: 'init_app');
runApp(MyApp());
}
Realm Flutter SDK Reference #
if usege flutter < version 2 please config RabbitDataConfig(dbType: DBType.hive) only
if usege flutter > version 3 you can use both RabbitDataConfig(dbType: DBType.hive) or RabbitDataConfig(dbType: DBType.realm)
https://pub.dev/packages/realm
Environment setup for Realm Flutter
Supported platforms are Flutter (iOS, Android, Windows, MacOS) and Dart standalone (Windows, MacOS and Linux)
Flutter ^3.0
For Flutter Desktop environment setup check the guide here
Cocoapods v1.11 or newer
CMake 3.21 or newer
Trying the example app #
-
Clone the repository.
git clone https://bitbucket.org/bssh-rabbit/rdc-flutter-sdk/src/master/example
-
Open the
Folder
file in Vscode or Android Studio. -
Cmd the
flutter run
in terminal.
The example app should launch.