Skip to main content

Overview

Starting with v10.3.0, the Flutter SDK supports file-based initialization.
To streamline the integration process and minimize initialization errors, MoEngage supports Script-Based Initialization. This approach allows you to manage App IDs and configuration settings directly within native configuration files, keeping them separate from your application logic. This article outlines how you can use the form-based interface to generate a validated code snippet for initialization and access module-specific configurations.
Alternatively, the SDK can be initialized manually. If you require this approach, please refer to the guide on Framework Initialization.
Follow these steps to generate your initialization script:
  1. Navigate to the Initialization Website.
  2. Configure the values based on your application requirements. Refer to the Configuration Parameters tables below:
  3. Click Generate Code at the bottom of the form.

Step 1: Android Configuration (XML)

For Android, initialization is handled by placing an XML configuration file in the application’s resource directory.

Android Configuration Reference

Below is the comprehensive list of keys available for moengage.xml.
CategoryXML Key NameTypeDescription
Corecom_moengage_core_workspace_idStringSpecifies your App ID. This field is mandatory.
com_moengage_core_file_based_initialisation_enabledBooleanSet to true to enable this feature.
com_moengage_core_data_centerIntegerDefault: 1. For more info, refer Data Center values.
com_moengage_core_environmentStringSupported values are: default, live, or test.
com_moengage_core_custom_base_domainStringSpecifies the base custom proxy domain to route SDK network traffic through your own subdomain.
com_moengage_core_integration_partnerStringSpecifies the core integration partner. For example, segment or mparticle.
Pushcom_moengage_push_notification_small_iconDrawableResource ID for small icon.
com_moengage_push_notification_large_iconDrawableResource ID for large icon.
com_moengage_push_notification_colorColorNotification accent color.
com_moengage_push_notification_token_retry_intervalIntegerRetry interval (in seconds) for token registration.
com_moengage_push_kit_registration_enabledBooleanIf true, SDK registers for push token.
Logscom_moengage_core_log_levelInteger0 (No Log) to 5 (Verbose). Default: 3.
com_moengage_core_log_enabled_for_release_buildBooleanIf true, prints logs in release builds.
Securitycom_moengage_core_storage_encryption_enabledBooleanEnables local storage encryption.
com_moengage_core_network_encryption_enabledBooleanEnables payload encryption over the network.
Synccom_moengage_core_periodic_data_sync_enabledBooleanEnables periodic data sync in the foreground.
com_moengage_core_background_data_sync_enabledBooleanEnables periodic data sync in the background.
In-Appcom_moengage_inapp_show_in_new_activity_enabledBooleanRequired for specific TV/Android setups.
TroubleshootingIf the XML file is missing or the com_moengage_core_workspace_id is empty, the SDK will throw a ConfigurationMismatchError.

Add Configuration File

Place the generated file in android/app/src/main/res/values/.

Step 2: iOS Configuration (Info.plist)

For iOS, initialization is handled by adding a configuration dictionary to your Info.plist.

iOS Configuration Reference

Below is the comprehensive list of keys available for the MoEngage dictionary.
CategoryPlist KeyTypeDescription
CoreWorkspaceIdStringSpecifies your App ID. It is a Mandatory field.
IsSdkAutoInitialisationEnabledBooleanSet to true to enable SDK auto initialisation.
DataCenterIntegerSpecifies the Data Center value. This is a Mandatory field. The default value is 1. For more info, refer to Data Center values.
IsTestEnvironmentString / BooleanCustomer selected option (true/false). Default value is:  $(SWIFT_ACTIVE_COMPILATION_CONDITIONS).
CustomBaseDomainStringSpecifies the base custom proxy domain to route SDK network traffic through your own subdomain.
IntegrationPartnerStringSpecifies your integration partner. For example, segment or mparticle.Default value: none.
AppGroupNameStringSpecifies the App Group name used for sharing SDK data. Default value: "".
LogsIsLoggingEnabledBooleanSet to true to enable SDK logs.
LoglevelInteger0 to 5. Default: 2.
SecurityIsStorageEncryptionEnabledBooleanEnables local storage encryption. Default value: false.
KeychainGroupNameStringSpecifies the keychain group name used for storing encryption keys. This is a mandatory field if IsStorageEncryptionEnabled is true. Default value: "".
IsNetworkEncryptionEnabledBooleanEnables payload encryption. Default: false.
EncryptionEncodedTestKeyStringDashboard auto-populated string. Used if IsNetworkEncryptionEnabled is true.
EncryptionEncodedLiveKeyStringDashboard auto-populated string. Used if IsNetworkEncryptionEnabled is true.
SyncAnalyticsEnablePeriodicFlushBooleanEnables periodic data flush. Default: true.
AnalyticsPeriodicFlushDurationIntegerFlush interval in seconds. Default: 60.
In-AppInAppDisplaySafeAreaInsetRealDecimal value representing safe area padding. Default: 0.
InAppShouldProvideDeeplinkCallbackBooleanIf true, provides callback on deeplink. Default: false.

Data Center Values

Configure the integer corresponding to your region. Incorrect values will result in data loss.

Update Info.plist

  1. Open your project’s Info.plist ( found in ios/Runner/ ).
  2. Create a new Top-Level Key named MoEngage of type Dictionary.
  3. Add the configuration file content generated in the Initialization Website.
The key IsSdkAutoInitialisationEnabled uses the British spelling (‘s’). Ensure you use the exact key name shown below, or initialization will fail.
XML Snippet Representation:
<key>MoEngage</key>
<dict>
    <key>WorkspaceId</key>
    <string>YOUR_WORKSPACE_ID</string>
    <key>IsTestEnvironment</key>
    <string>$(SWIFT_ACTIVE_COMPILATION_CONDITIONS)|$(GCC_PREPROCESSOR_DEFINITIONS)</string>
    <key>DataCenter</key>
    <integer>1</integer>
    <key>CustomBaseDomain</key>
    <string>data.example.com</string>
    <key>IsLoggingEnabled</key>
    <true/>
</dict>

Step 3: Framework Level Initialization

After you configure the native files, the initialization code in your hybrid framework is simplified. Create MoEngageFlutter(YOUR_Workspace_ID) object and in the project’s App Widget call initialise() of MoEngageFlutter plugin in the initState() the method as shown below:
import 'package:moengage_flutter/moengage_flutter.dart';
final MoEngageFlutter _moengagePlugin = MoEngageFlutter(YOUR_Workspace_ID);
@override
void initState() {
  super.initState();
  initPlatformState();
  _moengagePlugin.initialise();
}

Step 4: Migration and Precedence

To migrate from manual code-based initialization to file-based approach, refer here.

Step 5: Environments (Test vs. Live)

You can configure Test/Live environments within these files.
  • Android: Use the key <string name="com_moengage_core_environment">test</string>.
  • iOS: Use <key>IsTestEnvironment</key> <true/>