/
Flutter Get Started

Flutter Get Started

Prerequisites

  • Flutter 3.3.0 or higher

  • Android

    • Use Android Studio 3.2 or higher.

    • Make sure that your app’s build file uses the following values:

      • A minSdkVersion of 21 or higher.

      • A compileSdkVersion of 33 or higher.

  • iOS

    • Use XCode 15.2 or higher.

    • A minimumDeploymentTarget is 12 or higher.

Step summary

  1. Add “Refinery89 Monetize App“ dependency.

  2. Android configurations.

  3. iOS configurations.

  4. Continue with the implementation type.

1. Add “Refinery89 Monetize App“ dependency

Add the latest version of Refinery89 Monetize App for Flutter plugin to your pubspec.yaml file.

dependencies: refinery89_monetize_app:

Install the package by running

flutter packages get

Import “Refinery89 Monetize App“ into your Flutter app.

import 'package:refinery89_monetize_app/r89_sdk.dart';

2. Android configurations

Manifest permissions

Add the following Permissions for SDK on the top of the manifest file:

<?xml version="1.0" encoding="utf-8"?> <manifest> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="com.google.android.gms.permission.AD_ID"/> </manifest>

Manifest Google ID

Add the App ID to your app's AndroidManifest.xml file. To do so, add a <meta-data> tag with android:name="com.google.android.gms.ads.APPLICATION_ID", and for android:value, insert the App ID, surrounded by quotation marks.

Add this code to the manifest inside the <application> tag:

<manifest> <application> <!-- This is the Sample App ID--> <meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="ca-app-pub-3940256099942544~3347511713"/> </application> </manifest>

You will receive your app ID through your Technical Account manager by email, you can also retrieve them from the web interface after login.

Manifest end result

This is a simplified example, you should have many more lines in the manifest, copy the important bits only.

<manifest> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="com.google.android.gms.permission.AD_ID"/> <application> <!-- This is the Sample App ID--> <meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="ca-app-pub-3940256099942544~3347511713"/> </application> </manifest>

 

3. iOS configurations

Add Info.plist Google App Id

Add the GADApplicationIdentifier to your info.plist file.

<key>GADApplicationIdentifier</key> <string>ca-app-pub-3940256099942544~1458002511</string>

The App ID in the Snippet is a Sample can be used for testing but not for prod apps

You will receive your app ID through your Technical Account manager by email, you can also retrieve them from the web interface after login.

Add Info.plist SKAdNetworkItems

Add the SKAdNetworkItems to your Info.plist file with the following values.

<key>SKAdNetworkItems</key> <array> <dict> <key>SKAdNetworkIdentifier</key> <string>4fzdc2evr5.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>4pfyvq9l8r.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>ydx93a7ass.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>tmhh9296z4.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>488r3q3dtq.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>nzq8sh4pbs.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>v72qych5uu.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>6xzpu9s2p8.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>ludvb6z3bs.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>mlmmfzh3r3.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>lr83yxwka7.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>cp8zw746q7.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>c6k4g5qg8m.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>wg4vff78zm.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>3sh42y64q3.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>f38h382jlk.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>hs6bdukanm.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>9rd848q2bz.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>prcb7njmu6.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>52fl2v3hgk.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>m8dbw4sv7c.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>m5mvw97r93.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>v9wttpbfk9.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>n38lu8286q.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>fz2k2k5tej.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>g2y4y55b64.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>cstr6suwn9.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>w9q455wk68.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>wzmmz9fp6w.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>su67r6k2v3.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>yclnxrl5pm.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>4468km3ulz.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>v79kvwwj4g.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>t38b2kh725.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>7ug5zh24hu.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>5lm9lj6jb7.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>zmvfpc5aq8.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>kbd757ywx3.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>ns5j362hk7.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>275upjj5gd.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>9t245vhmpl.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>cad8qz2s3j.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>a2p9lx4jpn.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>238da6jt44.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>22mmun2rn5.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>44jx6755aq.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>tl55sbb4fm.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>24zw6aqk47.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>2u9pt9hc89.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>8s468mfl3y.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>glqzh8vgby.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>av6w8kgt66.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>klf5c3l5u5.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>ppxm28t8ap.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>424m5254lk.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>44n7hlldy6.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>ecpz2srf59.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>pwa73g5rt2.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>4dzt52r2t5.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>bvpn9ufa9b.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>gta9lk7p23.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>3rd42ekr43.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>2fnua5tdw4.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>p78axxw29g.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>s39g8k73mm.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>3qy4746246.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>v4nxqhlyqp.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>vutu7akeur.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>y5ghdn5j9k.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>47vhws6wlr.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>uw77j35x4d.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>578prtvx9j.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>e5fvkxwrpn.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>8c4e2ghe7u.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>3qcr597p9d.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>vhf287vqwu.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>24t9a8vw3c.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>294l99pt4k.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>32z4fx6l9h.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>3l6bd9hu43.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>523jb4fst2.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>54nzkqm89y.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>5a6flpkh64.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>5l3tpt7t6e.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>5tjdwbrq8w.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>6964rsfnh4.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>6g9af3uyq4.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>6v7lgmsu45.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>737z793b9f.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>74b6s63p6l.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>7953jerfzd.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>79pbpufp6p.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>7rz58n8ntl.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>84993kbrcf.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>89z7zv988g.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>8m87ys6875.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>97r2b46745.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>9b89h5y424.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>9nlqeag3gk.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>9yg77x724h.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>a7xqa6mtl2.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>b9bk5wbcq9.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>bxvub5ada5.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>c3frkrj4fj.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>cg4yq2srnc.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>cj5566h2ga.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>ejvt5qm6ak.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>f73kdq92p3.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>feyaarzu9v.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>g28c52eehv.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>ggvn48r87g.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>gvmwg8q7h5.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>hb56zgv37p.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>hjevpa356n.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>k674qkevps.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>kbmxgpxpgc.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>m297p6643m.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>mls7yz5dvl.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>mp6xlyr22a.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>mtkv5xtk9e.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>n66cz3y3bx.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>n6fk4nfna4.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>n9x2a789qt.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>pu4na253f3.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>pwdxu55a5a.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>qqp299437r.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>qu637u8glc.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>r45fhb6rf7.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>rvh3l7un93.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>rx5hdcabgc.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>u679fj5vs4.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>vcra2ehyfk.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>x44k69ngh6.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>xy9t38ct57.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>yrqqpx2mcb.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>z4gj7hsk7h.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>zq492l623r.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>6p4ks3rnbw.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>7fmhfwg9en.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>9vvzujtq5s.skadnetwork</string> </dict> <dict> <key>SKAdNetworkIdentifier</key> <string>cs644xg564.skadnetwork</string> </dict> </array>

Add Info.plist ATT Configuration

Since iOS 14 Apple introduced the Apple Tracking Transparency framework, which requires that every app needs to disclose what tracking data they collect.

For the R89SDK, after showing the Consent Management Platform (CMP) we will automatically display the ATT permission dialog.

To configure the ATT request dialog in your app add the NSUserTrackingUsageDescription to the app’s Info.plist.

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> ... <key>NSUserTrackingUsageDescription</key> <string>This app uses your data to provide personalized ads and improve user experience.</string> ... </dict> </plist>

Use the same description text or one that better fits your app's purpose.

iOS will crash application on attempting to display the ATT popup if the NSUserTrackingUsageDescription is missing in the Info.plist.

Background Task Configuration

With the purpose of providing better analytics the R89SDK needs to track the advertisement session while the application is in the background. It internally uses the BgTaskScheduler and BGAppRefreshTask from the iOS framework. Before enabling the background modes add the “Background Modes“ capability to your project.

Screenshot 2025-01-30 at 13.15.48-20250130-091604.png

After adding the “Background Modes“ capability enable both “Background fetch“ and “Background processing“ modes.

Screenshot 2025-01-30 at 13.22.38-20250130-092247.png

Next, in your Info.plist, add the task identifier com.refinery89.background under the BGTaskSchedulerPermittedIdentifiers key. Here's how it should look:

<dict> ... <key>BGTaskSchedulerPermittedIdentifiers</key> <array> <string>com.refinery89.background</string> </array> ... </dict>

 


Only read the following step if your technical account manager didn’t already provide an Implementation type to follow, otherwise continue there.

4. Choose an implementation type

Single tag implementation

This is what you are looking for? continue here → Flutter Single Tag Implementation

 

This Implementation provides a way that with minimal code you can remotely control where and how to show the ad inventory.
You will have full remote control over Ad Inventory configurations and with the addition of tags to your wrapper, you will have where you show the inventory.

 

This is the easiest monetization setup because all configurations for the Units are done in the Remote Server, you just need to add the tags on the “white spaces of your app” where you might or might not place ads, so no need to manually request the ads in those places.

 

This option is recommended under the following circumstances:

  • Your app is native and you can add tags to your views

  • Wants to Disable and enable Inventory slots without updating the application.

  • Wants to Edit the ad units remotely over the web without updating the application.

  • Wants to Change Formats, slot place, sizes, etc.

Manual implementation

This is what you are looking for? continue here → Flutter Manual Implementation

This implementation is designed for situations where the Single tag might not align with your requirements, but you can still leverage the benefits of remote inventory configuration.

You can see an example in Flutter Demo Applications

Manual configuration means that you have remote control of General Ad Settings over the web or our tech support, but you need to add the ads manually, so instead of just placing the tags you need to create a wrapper and use it to do a request for the format that you want.

 

This option is recommended under the following circumstances:

  • Wants control over the logic of showing the Inventory.

  • You are using a framework that we don’t support but you can use native android code.

  • You have a web application but you are not using our monetization in your web and want to place ads natively.

Comparison table

Feature

Manual

Single Tag

Feature

Manual

Single Tag

Integrated CMP.

Custom auctions in R89 Servers.

All Formats supported.

Remote Unit Configs.

Remote Ad Places.

Local Testing without R89 DB or Servers.

Related content