SDK Integration

Onboarding Checklist: Android

Please find the Onboarding Checklist for iOS and Android below. Follow the titles in the checklist to ensure you have completed each essential step in your onboarding process with Netmera.

Step 1: Select a Platform

  1. Navigate to Developers > Netmera Onboarding.

  2. Select Android and click Start to proceed.

Step 2: Create a Firebase Configuration

Netmera uses Firebase Cloud Messaging (FCM) for delivering push notifications.

  1. Go to the Firebase Developers Console and create a new project.

  2. Generate a new Private Key (JSON file) for your project.

  1. Upload the JSON file you downloaded from Firebase Cloud Messaging to the Project > app-level root directory.

  1. Choose one of the four options: Node.js, Java, Python, and Go. The choice of option does not require any action. Simply click the 'Generate New Private Key' button to download the file. No further selections are needed.

  1. Upload this file in Netmera Panel > Developers > Netmera Onboarding > Android > Step 2: Create A Firebase Configuration > FCM Service Account Key.

Step 3: Select a Target SDK

Select the SDK for your application development framework as Native Android.

Step 4: Integrate Netmera SDK

Standard Gradle

If your project is using Standard Gradle:

  • Add the following snippets to integrate the Netmera SDK into your project.

In this step, only copy the url specified below and add it to maven.

buildscript {
    repositories {
         google()
         maven {url 'https://developer.huawei.com/repo/'} // only include for HMS copy the url and add it to maven
    }
    dependencies {

    classpath 'com.android.tools.build:gradle:{your_project_android_tools_version}'
    classpath 'com.google.gms:google-services:{your_google_services_version}'
    classpath 'com.huawei.agconnect:agcp:{your_agcp_version}' // only include for HMS 
    }
}

allprojects {
    repositories {
        google()
        maven {url 'https://developer.huawei.com/repo/'} // only include for HMS  copy the url and add it to maven
        maven { url "https://release.netmera.com/release/android" } 
    }
}

Gradle Version Catalogs

If your project is using Gradle Version Catalogs:

  • Add the following snippets to integrate the Netmera SDK into your project.

Kotlin

plugins {
    alias(libs.plugins.androidApplication) apply false
    alias(libs.plugins.jetbrainsKotlinAndroid) apply false
    alias(libs.plugins.google.services) apply false
    alias(libs.plugins.androidLibrary) apply false
}

If you want to integrate Huawei Mobile Services (HMS), add the following configuration to your build.gradle file before plugins. Following part is only for Huawei integration.

// This part is only for Huawei integration
buildscript {
    val agpVersion = "YOUR_PROJECT_AGP_VERSION"
    repositories {
        maven {
            url = uri("https://developer.huawei.com/repo/")
        }
    }
    dependencies {
        classpath("com.huawei.agconnect:agcp:your_agcp_version")
    }
}

plugins {
    ...
}

For more information, visit the following link: Huawei AppGallery Connect Guide.

Note: Check your libs.versions.toml file:

  • This file is usually located within the gradle folder in the root directory of your project.

  • Review how the relevant plugin is defined.

Groovy

plugins {
    alias(libs.plugins.androidApplication) apply false
    alias(libs.plugins.jetbrainsKotlinAndroid) apply false
    alias(libs.plugins.google.services) apply false
    alias(libs.plugins.androidLibrary) apply false
}

If you want to integrate Huawei Mobile Services (HMS), add the following configuration to your build.gradle file before plugins. Following part is only for Huawei integration.

// This part is only for Huawei integration
buildscript {
    val agpVersion = "YOUR_PROJECT_AGP_VERSION" //
    repositories {
        maven { url 'https://developer.huawei.com/repo/' }
    }
    dependencies {
        classpath "com.huawei.agconnect:agcp:your_agcp_version"
    }
}

plugins {
    ...
}

For more information, visit the following link: Huawei AppGallery Connect Guide.

Note: Check your libs.versions.toml file:

  • This file is usually located within the gradle folder in the root directory of your project.

  • Review how the relevant plugin is defined.

Step 5: Initialize Netmera SDK

Initializing Netmera SDK Android v4.0.0+

  1. Add the following initialization code inside the onCreate() method of your Application class.

If Application Class is Not Already Present:

  1. Create an Application Class If your project doesn't yet have an Application class, create one and include the initialization code as shown below.

  2. Update AndroidManifest.xml In the AndroidManifest.xml, add your Application class by specifying android:name in the <application> tag.

  3. To exclude Netmera Android SDK files from auto-backup if your app supports backup, please see the relevant title Q10: Excluding Netmera Android SDK files from auto-backup if your app supports backup.

override fun onCreate() {
    super.onCreate()
    // Must be called on the Main Thread
    registerActivityLifecycleCallbacks(NMActivityLifecycleCallbacks(this))

    val configBuilder = NetmeraConfiguration.Builder()
        .apiKey(apiKey)
        .firebaseSenderId(PropertiesUtil.gcmSenderId)
        .huaweiSenderId(PropertiesUtil.hmsSenderId)  // only include for HMS
        .logging(true)  // enables logging in logcat
        .addProvider(NMFCMProvider())
        .addProvider(NMHMSProvider()) // only include for HMS
    Netmera.init(configBuilder.build(this))
}

Removed Components in Android SDK v4.0.0+

If you are using Netmera Android SDK version 4.0.0 or later, or performing an SDK update,

  • Do not include the following lines of code from previous SDK versions when initializing Netmera SDK.

  • If these lines are already present in your code, please remove them:

// Removed components in SDK 4.0.0
NMInitializer.initializeComponents(this)
AppInitializer.getInstance(this).initializeComponent(NMFCMProviderInitializer::class.java)
AppInitializer.getInstance(this).initializeComponent(NMHMSProviderInitializer::class.java)
Initializing Netmera SDK Before Android SDK Version 4.0.0

Add initialization code in onCreate() method:

  1. Add the code below within the onCreate() method of your class that extends android.app.Application.

  2. If your project does not currently have a class that extends Application, create one.

  3. Add the newly created or existing Application class to your AndroidManifest.xml file using the android:name attribute within the <application> tag.

  4. Add initialization code below.

Kotlin

override fun onCreate() {
    super.onCreate()

    val configBuilder = NetmeraConfiguration.Builder()
        .apiKey(apiKey)
        .firebaseSenderId(PropertiesUtil.gcmSenderId)
        .huaweiSenderId(PropertiesUtil.hmsSenderId)  // only include for HMS
        .logging(true)  // Allows Netmera logs to appear in logcat
    Netmera.init(configBuilder.build(this))
}

Java

@Override
public void onCreate() {
    super.onCreate();

    NetmeraConfiguration.Builder configBuilder = new NetmeraConfiguration.Builder();
    configBuilder.apiKey(apiKey)
                 .firebaseSenderId(PropertiesUtil.gcmSenderId)
                 .huaweiSenderId(PropertiesUtil.hmsSenderId) // only include for HMS
                 .logging(true);  // Allows Netmera logs to appear in logcat

    Netmera.init(configBuilder.build(this));
}

Warning: Init Method Must Be Added in the Main Thread

Ensure that init methods are added in the main thread. Adding them in the background may lead to unexpected behavior and potential issues.

Autostart Troubleshooting:

After implementing the necessary enhancements above:

  1. Call the Initialization Method Use the provided initialization method to set up Netmera in your application.

  2. Create NetmeraConfiguration Configure the SDK by creating and passing the required NetmeraConfiguration object.

Once these steps are completed, the Netmera SDK will automatically handle the rest. This automation is possible because Netmera leverages Android's AutoStartup framework. This framework ensures that certain processes are executed before the initialization method is invoked, streamlining the SDK's setup and operation.

If the AutoStartup Feature is Disabled in Your Application:

You can continue using the Netmera SDK by calling the following code block above the init method:

Kotlin

fun onCreate() {
    super.onCreate()
    NMInitializer.initializeComponents(this)
    AppInitializer.getInstance(this).initializeComponent(NMFCMProviderInitializer::class.java)
    AppInitializer.getInstance(this).initializeComponent(NMHMSProviderInitializer::class.java) // only include for HMS       
    ...
    Netmera.init(configBuilder.build(this))
}

Java

@Override public void onCreate() {
    super.onCreate();
    NMInitializer.initializeComponents(this);
    AppInitializer.getInstance(this).initializeComponent(NMFCMProviderInitializer.class);
    AppInitializer.getInstance(this).initializeComponent(NMHMSProviderInitializer.class); // only include for HMS   
    ...
    Netmera.init(configBuilder.build(this));
}

Configuring baseUrl for On-Premise Applications

  • For On-Premise Applications: Include the following code to configure the base URL and API key:

    configBuilder.baseUrl(baseUrl).apiKey(apiKey);
  • For Non-On-Premise Applications: Only the API key needs to be configured:

    configBuilder.apiKey(apiKey);

Optional: Initialization Callback

To implement the initialization callback:

  1. Add the following code to handle success and failure:

For detailed information, you can visit >Push Callbacks.

Netmera.init(
    configBuilder.build(this), 
    object : NMInitSessionListener {
        override fun onSuccess() {
            Log.i("NetmeraApp", "Session init completed")
        }

        override fun onFailure(error: String?) {
            Log.e(
                "NetmeraApp",
                "Error occurred when trying to init session with Netmera. Error::$error"
            )
        }
    }
)

Optional: Enable Logging

To enable logging for debugging, add the following code in the onCreate() method of your Application class:

  1. Enable logging:

.logging(true)
  1. Disable logging for production:

When preparing your app for release, set .logging(false)

.logging(false)

Step 6: Android 13 Push Notification Permissions

Android 13 introduced significant changes to how push notification permissions are handled.

  • Increased User Control: Apps targeting API Level 33 and above now have more control over when and how they request push notification permissions. This allows for a more user-friendly and context-aware permission request experience.

  • Automatic Permission Requests for Older Apps: For apps targeting API Level 32 and below running on Android 13, the system automatically prompts the user for push notification permission when the app creates its first notification channel.

Impact on Netmera SDK Users:

The Netmera SDK initializes and creates notification channels during the app's startup. Consequently:

  • On Android 13: For apps targeting API Level 32 and below, this initialization process will trigger the automatic system prompt for push notification permission.

  • On Android 12 and below: The system generally assumes push notification permission has already been granted.

Push Permission Methods in Netmera SDK

For applications targeting API 33, Netmera SDK offers two key methods for requesting push permission:

  1. Requesting Push Permission

  • Method: Netmera.requestNotificationPermissions(this)

  • Add this method in the onCreate() method of your MainActivity, below super.onCreate(savedInstanceState) to request push notification permissions from the user.

Netmera.requestNotificationPermissions(this)

Push Enable/Disable User Flow

  1. Granting Permission:

    • The user triggers requestNotificationPermissions(), and if they grant permission, a push enable request is sent.

  2. Handling Denial:

    • If the user denies permission, avoid resending the request immediately (as recommended by Google). Instead, the SDK opens the app's notification settings. The user can grant permission from the settings and return to the app, where a push enable request is sent.

  3. Denying Permission:

    • If the user triggers requestNotificationPermissions() and denies permission, a push disable request is sent.

  4. Reattempt After Denial:

    • If denied, avoid immediate re-request. The SDK will open the app's notification settings. If the user cancels (presses the back button), a push disable request is sent.

  1. Checking Notification Status

  • Method: checkNotificationPermission()

  • This method allows checking whether the necessary permissions for the application have been obtained.

checkNotificationPermission()

Responses

When this method is called, it would return one of the following responses:

  1. NOTDETERMINED The user has opened the app but hasn't made a decision about notification permissions yet.

  2. GRANTED The user has granted notification permission, and the app can send notifications.

  3. DENIED The user has denied permission or has blocked notifications through system settings.

Optional: Email Permission Preferences

In version 3.9.18, the Email Preferences feature allows you to request email permission from users. Use the following method to manage email permission:

fun setEmailPermission(isAllowed: Boolean) 

Revoking Email Permission:

  • To revoke email permission, execute the following code:

Netmera.setEmailPermission(false)

Granting Email Permission:

  • To grant email permission, execute:

Netmera.setEmailPermission(true)

Optional: Firebase Messaging Service Class

To integrate Netmera’s push notifications alongside Firebase Cloud Messaging (FCM), follow these steps:

  1. Override onMessageReceived

In your Firebase Messaging Service class, call Netmera's onNetmeraPushMessageReceived method inside your own onMessageReceived method.

  1. Handle FCM Token Renewal

When the FCM token is renewed, call the Netmera.onNetmeraNewToken(token) method below to forward the new token to Netmera. Use the following code to do so:

class PushMessaging : FirebaseMessagingService() {
    override fun onMessageReceived(remoteMessage: RemoteMessage) {
        super.onMessageReceived(remoteMessage)

        if (Netmera.isNetmeraRemoteMessage(remoteMessage)) {
            Netmera.onNetmeraPushMessageReceived(remoteMessage)
        } else {
            // Other operations
        }
    }

    override fun onNewToken(token: String) {
        super.onNewToken(token)
        Netmera.onNetmeraNewToken(token)
    }
}

Important Note for Obfuscation:

No special obfuscation rules are needed for Netmera. Its functionality remains unaffected, even with code obfuscation enabled.

Push Callbacks

Netmera provides the following push callbacks for better push notification management:

  • Push Register, Push Receive, Push Open, Push Dismiss, Push Button Click.

For detailed implementation, please refer to the full documentation > Push Callbacks

Android SDK Integration Complete

The Android SDK integration has been successfully completed, and your devices are now set to receive the following types of push notifications via the Netmera Dashboard:

  • Standard Push Notifications

  • Interactive Push Notifications

  • Widgets

  • Push Notifications with Deeplinks

Warning During App Store Submission:

Last updated

Was this helpful?