Optimus Flutter Plugin

Flutter plugin for Optimus Platform

Features

  • Event Tracking
  • Analytics
  • FCM Token Utilities

SDK Initialization

Import the package and initialize Optimus:

import 'package:optimus_flutter/optimus_flutter.dart';

final Optimus optimus = Optimus(
  appId: 'OPTIMUS_APP_ID',
  appSecret: 'OPTIMUS_APP_SECRET',
  apiEndpoint: 'OPTIMUS_API_ENDPOINT',
);

Usage

Initialize Optimus

import 'package:optimus_flutter/optimus_flutter.dart';

const Optimus optimus =Optimus(
  appId: 'OPTIMUS_APP_ID',
  appSecret: 'OPTIMUS_APP_SECRET',
  apiEndpoint: 'OPTIMUS_API_ENDPOINT',
);

void initOptimus() async {
  await optimus.ensureInitialized(
    trackAppStatus: true, // for enable tracking app status like install, update, and open app automatically
  );
}

Android ID Tracking Configuration

By default, the SDK uses the Firebase Installation ID (FID) as the device identifier.

If you want the SDK to use the Android ID (ANDROID_ID), you can enable it explicitly:

optimus.enableAndroidIdTracking();

Important Notes

Make sure your app privacy policy and Google Play Data Safety disclosures reflect your use of device identifiers accurately.

Persistent identifiers, including Android ID

Use for non-advertising purposes
You can use persistent identifiers as long as you have a privacy policy and handle the data in accordance with the Developer Distribution Agreement and all applicable privacy laws in the areas where you make your app available.

Set User Attributes

void setUserAttributes(){
  optimus.setClientId("userId");
  optimus.setAccount("username");
  optimus.setFirstName("First Name");
  optimus.setLastName("Last Name");
  optimus.setEmail("email@address.id");
  optimus.setMobile("08xxxxxxx");
  optimus.setGender(OptimusGender.other | OptimusGender.male | OptimusGender.female);
  optimus.setBirthday("01-01-2000");
}

Set user status

  // login
  optimus.login("userId");

  // logout
  optimus.logout();

Event Tracking

void trackOptimusEvent() {
  final OptimusProperties optProperties = OptimusProperties()
    ..addAttribute('attrString', 'String')
    ..addAttribute('attrInt', 123)
    ..addAttribute('attrDouble', 1.23)
    ..addAttribute('attrBool', true)
    ..addAttribute('attrLocation', OptimusGeoLocation(-6.175392, 106.827153))
    ..addAttribute('attrList', ['LIST_1', 'LIST_2'])
    ..addISODateTime("attrDateTime", DateTime.now());

    optimus.trackEvent("event_name", properties);
}

Push Notification Handling

// Track Push opt-in
optimus.setPushOptIn(optIn: true | false);

// register FCM token
optimus.handleFCMToken(token: "fcm_token");

// track push notification receive event
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
  optimus.trackReceivePush(message.data);  
});

@pragma('vm:entry-point')
Future<void> firebaseMessagingBackgroundHandler(RemoteMessage message) async {
  if (Firebase.apps.isEmpty) 
    await Firebase.initializeApp();
  if (message.data.isNotEmpty) 
    optimus.trackReceivePush(message.data);  
}

// track Push notification click event
FirebaseMessaging.instance.getInitialMessage().then((initialMessage) {
  if (initialMessage != null && isInitialMessageValid) {    
    optimus.trackClickedPush(initialMessage);
  }
});

FirebaseMessaging.onMessageOpenedApp.listen((message) {
  optimus.trackClickedPush(message);
});

SDK Logging & Debugging

// enable network log
optimus.enableSDKLogs();

// open Optimus network logging page
optimus.openOptimusLog(context);