Setup SDK

Flutter_Android PcketSDK Integration Guide

Overview

This guide is intended for application developers who want to monetize their Android apps using the Packet SDK. Packet SDK supports Android native apps written in Java and Kotlin.

Integrating the Packet SDK into your app is the first step to earning revenue. Once integrated, you'll start seeing revenue in the Packet SDK dashboard within 24 hours.

This document will walk you through the steps required for proper integration. Most apps can be integrated with the Packet SDK in about 15 to 20 minutes.

Compatibility Information

Category
Compatibility

System

Supports ARMv7 and ARMv8 architectures; compatible with Android 5.0 and above

Development Environment

Recommended to use Android Studio for development

Preparation

Apply for appkey

Register and log in to the PacketSDK ,go to Dashboard>APP to add your app and get your appkey

SDK Integration Package Directory Structure

After completing the previous step, download the Android SDK package flutter_android_sdk.zip.

Unzip the SDK package to find the following files:

├── Flutter_SDK_Demo.zip A demo app with the SDK already integrated. You can use this demo to understand how to integrate the SDK. Make sure to test the demo first to understand how the SDK works.

├── libs

│ └── packet_sdk_flutter_v*.aar** The obfuscated AAR file.

Installation

  1. Copy packet_sdk_flutter_v*.aar** to the libs directory of your android project.

└── packet_sdk_flutter_v***.aar
  1. Add dependencies for the required plugins in the pubspec.yaml file of the project.

dependencies:
    packet_android_sdk: ^version_number
    // "version_number" Replace with the actual version number of the plugin.
  1. Run the "flutter pub get" command to ensure that the plugin is downloaded and installed correctly into the project.

Example files structure:

flutter-application
├── android
│   ├──app
│   │  ├──libs
│   │  │  ├── packet_sdk_flutter_v***.aar

SDK setup

SDK requires internet connectivity to work. To allow your app to use internet connection add following permission to AndroidManifest.xml file.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <uses-permission android:name="android.permission.INTERNET" />

    <application ...
    </application>
</manifest>

Configure SDK settings right after initializing the SDK, but before calling the PacketSdk.start() function.

import 'package:flutter/material.dart';
import 'package:packet_android_sdk/packet_sdk.dart';

void main() {
  runApp(const MyApp());
}

// ...
class _StopwatchPageState extends State<StopwatchPage> {
  final packetSdkPlugin = PacketSdk();

  @override
  void initState() {
    super.initState();
    packetSdkPlugin.initialize("app_key");
    requestConsentOrStart();
  }

  Future<void> requestConsentOrStart() async {
    bool optedIn = await packetSdkPlugin.isOptedIn();
    if (optedIn) {
      packetSdkPlugin.start();
    } else {
      packetSdkPlugin.requestConsent();
    }
  }

  //...
}

Stop SDK

Call PacketSdk.stop() in order to stop SDK.

User should be able to opt out from using SDK at any time. When user does so within your app, you should call PacketSdk.optOut() function, which will immediately stop SDK and will no longer start it unless user grants consent again.

Running in background

If you want to keep SDK running in background when app is closed, you need to take some additional steps. A few additional FOREGROUND_SERVICE permission are required. Add them to your AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <uses-permission android:name="android.permission.INTERNET" />

    <!-- Permissions for background functionality -->
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />

    <application ...
    </application>
</manifest>

Then let SDK know that you want to allow it to run in the background.

// ...
class _StopwatchPageState extends State<StopwatchPage> {
  final packetSdkPlugin = PacketSdk();

  @override
  void initState() {
    super.initState();
    packetSdkPlugin.initialize("app_key");
    packetSdkPlugin.setBackground(true);
    //...
  }
  //...
}

If default SDK consent window doesn't suit your needs, you can create a custom consent window. Make sure to call PacketSdk.optIn() whenever user gives a consent and PacketSdk.optOut() whenever user declines it.

Logging

Call PacketSdk.setEnableLogging(true) in order to enable logging to logcat.

Status monitor

Allows to set listener to monitor sdk status.

// ...
class _StopwatchPageState extends State<StopwatchPage> {
  final packetSdkPlugin = PacketSdk();

  // ...

  String _content = "";
  Future<void> requestConsentOrStart() async {
     packetSdkPlugin.setStatusListener((code, msg) {
      setState(() {
        _content = "code: $code, msg: $msg";
      });
    });

    // ...
  }

  //...
}

SDK API

class PacketSdk {
    /**
     * First function to call for SDK. Prepares SDK for configuration and use.
     * appKey.
     */
    Future<void> initialize(String appKey)

    /**
     * Sets whether to enable logcat logging
     * Tag is PacketSdk
     */
    Future<void> setEnableLogging(bool enableLogging)

    /**
     * Sets whether to allow SDK to run in background when app is no longer in focus.
     */
    Future<void> setBackground(bool isBackground)

    /**
     * Sets Android notification to be used when SDK is allowed to run in background.
     * title: notification title
     * body: notification body text
     * icon: name of drawable icon for notification
     */
    Future<void> setNotification(String title, String body, String icon)

    /**
     * Sets Android notification id to be used when SDK is allowed to run in background.
     */
    Future<void> setNotificationId(int id)

    /**
     * Checks whether SDK has been started.
     */
    Future<bool> isRunning()

    /**
     * Starts SDK if user has given the consent, otherwise does nothing.
     */
    Future<void> start()

    /**
     * Stops SDK if it's running.
     */
    Future<void> stop()

    /**
     * Checks whether user has given the consent to start SDK.
     */
    Future<bool> isOptedIn()

    /**
     * Withdraws user's consent and stops SDK if it was running.
     */
    Future<void> optOut()

    /**
     * Informs SDK that user gave consent. Used with custom consent requests when
     * provided consent UI is insufficient.
     * This does not start SDK, [PacketSdk.start()] still needs to be called.
     */
    Future<void> optIn()

    /**
     * Starts displaying consent request with default settings.
     */
    Future<void> requestConsent()

    /**
     * Starts displaying consent request from user with configurable settings.
     *
     * [textColor] integer representing text color displayed on consent window (argb: 0xFF000000).
     * [linksColor] integer representing clickable text color displayed on background (argb: 0xFF000000).
     * [primaryColor] integer representing primary color of button (argb: 0xFF000000).
     * [secondColor] integer representing second color of button (argb: 0xFF000000).
     */
    Future<void> requestConsentWithStyle({
      required int textColor,
      required int linksColor,
      required int primaryColor,
      required int secondColor,
    })

    /**
     * Allows to set listener to monitor sdk status.
     */
    Future<void> setStatusListener(Function(int code, String msg) statusListener)
}

Status Value Description

code
msg

100

Starting...

101

Get server fail.

102

Connect fail.

200

Connect success.

Last updated