A mobile advertising SDK that combines header bidding capabilities from Prebid Mobile with Google's advertising ecosystem through a unified interface.
The implementation includes lazy loading functionality to optimize application performance by deferring ad initialization until needed.
Prebid Mobile is an open-source framework that enables header bidding within mobile applications.
It conducts real-time auctions where multiple demand sources compete for ad inventory placement.
Functionality:
- Real-time auction management between demand partners
- Communication with Prebid Server for bid processing
- Support for banner, native, and video ad formats
- Ad rendering from winning auction results
The Google Mobile Ads SDK provides access to Google's advertising networks including AdMob and Google
Ad Manager. It handles ad serving and mediation across multiple ad networks.
Functionality:
- Banner, interstitial, native, and rewarded video ad formats
- Network mediation through Google's platform
- Performance analytics and reporting
- Privacy compliance features
The Audienzz Flutter SDK requires a minimum iOS version of 13.0 or higher and a minimum android version of API 24 (Android 7.0, Nougat) or higher.
In your terminal run command:
flutter pub add audienzz_sdk_flutter
OR add directly to pubspec.yaml
audienzz_sdk_flutter: latest
and run command:
flutter pub get
Setup Android #
Add your AdMob app ID, to your app's AndroidManifest.xml file.
To do so, add a
<manifest>
<application>
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy"/>
</application>
</manifest>
Update your app's Info.plist file with your AdMob app ID:
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy</string>
First of all, SDK needs to be initialized. It's done asynchronously, so after callback
is triggered with InitializationStatus.success, SDK is ready to be used.
final status = await AudienzzSdkFlutter.instance.initialize(companyId: 'CompanyID', isAutomaticPpidEnabled: false);
if (status == InitializationStatus.success) {
// SDK is ready to be used
}
CompanyId is provided by Audienzz, usually - it is id of the company in ad console.
Automatic PPID (Publisher Provided Identifier for Google Ad Manager) usage could be specified at initialization or though PpidManager class.
The Audienzz SDK Flutter allows you to display three types Ads - BannerAd, InterstitialAd and RewardedAd.
You can find examples of practical implementation here:
Examples
Minimal initialization and first ad load.
import 'package:audienzz_sdk_flutter/audienzz_sdk_flutter.dart';
import 'package:flutter/material.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final status = await AudienzzSdkFlutter.instance
.initialize(companyId: 'YOUR_COMPANY_ID');
runApp(MyApp(initialized: status == InitializationStatus.success));
}
class MyApp extends StatefulWidget {
const MyApp({super.key, required this.initialized});
final bool initialized;
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
BannerAd? _banner;
@override
void initState() {
super.initState();
_banner = BannerAd(
adUnitId: 'YOUR_AD_UNIT_ID',
auConfigId: 'YOUR_AU_CONFIG_ID',
sizes: {const AdSize(width: 320, height: 50)},
onAdLoaded: (_) => debugPrint('Banner loaded'),
onAdFailedToLoad: (_, error) => debugPrint('Banner load failed: ${error?.message}'),
)..load();
}
@override
void dispose() {
_banner?.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: const Text('Audienzz Quick Start')),
body: widget.initialized && _banner != null
? Center(child: AdWidget(ad: _banner!))
: const Center(child: Text('SDK not initialized')),
),
);
}
}
final interstitial = InterstitialAd(
adUnitId: 'YOUR_AD_UNIT_ID',
auConfigId: 'YOUR_AU_CONFIG_ID',
adFormat: AdFormat.bannerAndVideo,
onAdLoaded: (_) => debugPrint('Interstitial loaded'),
onAdFailedToLoad: (_, error) => debugPrint('Interstitial fail: ${error?.message}'),
onAdClosed: (ad) async {
await ad.dispose();
},
);
await interstitial.load();
await interstitial.show();
final rewarded = RewardedAd(
adUnitId: 'YOUR_AD_UNIT_ID',
auConfigId: 'YOUR_AU_CONFIG_ID',
onAdLoaded: (_) => debugPrint('Rewarded loaded'),
onAdFailedToLoad: (_, error) => debugPrint('Rewarded fail: ${error?.message}'),
onUserEarnedRewardCallback: (_, reward) {
debugPrint('User rewarded: ${reward.amount} ${reward.type}');
},
onAdClosed: (ad) async {
await ad.dispose();
},
);
await rewarded.load();
await rewarded.show();
Set per-user data (keywords, location, privacy) and global targeting.
await AudienzzTargeting.addUserKeywords(['sports', 'travel']);
await AudienzzTargeting.addUserKeyword('gaming');
final all = await AudienzzTargeting.getKeywordSet();
await AudienzzTargeting.removeUserKeyword('travel');
await AudienzzTargeting.clearUserKeywords();
await AudienzzTargeting.setUserLatLng(47.3769, 8.5417); // Zurich
final loc = await AudienzzTargeting.getUserLatLng();
await AudienzzTargeting.setSubjectToGDPR(isSubject: true);
await AudienzzTargeting.setGdprConsentString('COabcd...');
await AudienzzTargeting.setPurposeConsents('111000');
await AudienzzTargeting.setSubjectToCOPPA(isSubject: false);
await AudienzzTargeting.setExternalUserIds([
ExternalUserId(
source: 'adserver.org',
uniqueIds: [UniqueId(id: 'user-123', atype: 1)],
),
]);
final eids = await AudienzzTargeting.getExternalUserIds();
Global targeting and ext data #
// Global key -> single value
await AudienzzTargeting.addSingleGlobalTargeting('section', 'home');
// Global key -> multiple values
await AudienzzTargeting.addGlobalTargeting('interests', {'tech', 'finance'});
// Remove / Clear
await AudienzzTargeting.removeGlobalTargeting('section');
await AudienzzTargeting.clearGlobalTargeting();
// Ext data
await AudienzzTargeting.addExtData('category', 'news');
await AudienzzTargeting.updateExtData('tags', ['flutter', 'ads']);
await AudienzzTargeting.removeExtData('category');
await AudienzzTargeting.clearExtData();
await AudienzzTargeting.setGlobalOrtbConfig({
'regs': {
'coppa': 0,
},
'user': {
'yob': 1990,
},
});
final ortb = await AudienzzTargeting.getGlobalOrtbConfig();
final banner = BannerAd(
adUnitId: 'YOUR_AD_UNIT_ID',
auConfigId: 'YOUR_AU_CONFIG_ID',
sizes: {const AdSize(width: 320, height: 50)},
pbAdSlot: '/1234/home/top_banner',
gpId: 'gpid-abc-123',
impOrtbConfig: '{"ext":{"example":"value"}}', // custom ORTB at imp-level
onAdLoaded: (_) {},
onAdFailedToLoad: (_, __) {},
)..load();
| Method |
Parameters |
Description |
isAutomaticPpidEnabled |
|
Used to get current status of automatic PPID usage (if true - PPID is generated and used with all requests, if false - PPID is not used) |
setAutomaticPpidEnabled |
isAutomaticPpidEnabled: Boolean |
Used to enable or disable automatic PPID usage |
getPpid |
|
Used to obtain current PPID if automaticPpid is enabled |
| Method |
Parameters |
Description |
AudienzzSdkFlutter.instance.initialize |
{required String companyId, bool isAutomaticPpidEnabled = false} |
Initializes the SDK. Automatic Ppid could be enabled or disabled. Returns InitializationStatus. Must be called before using any ad features. |
| Property/Method |
Type |
Description |
adUnitId |
String |
Unique identifier for your ad placement. |
auConfigId |
String |
ID of the stored impression on the server. |
dispose() |
Future<void> |
Frees resources used for the ad. |
| Property/Method |
Type |
Description |
load() |
Future<void> |
Loads the ad. Used for ads that are shown as widgets. |
| Property/Method |
Type |
Description |
| (inherits all from Ad) |
|
Used for ads that do not require a widget view. |
| Property/Method |
Type |
Description |
sizes |
Set<AdSize> |
Required. Ad sizes for the bid request. At least one required. |
isAdaptiveSize |
bool |
If true, ad size is adaptive. Default: false. |
refreshTimeInterval |
int? |
Refresh time in milliseconds. Optional. |
adFormat |
AdFormat |
Desired ad format (banner, video, or both). Default: AdFormat.banner. |
apiParameters |
Set<ApiParameter> |
API frameworks for bid response. Default: {mraid3, omid1}. |
protocols |
Set<Protocol> |
Supported video protocols. Optional. |
placement |
Placement |
Placement type. Default: Placement.inBanner. |
playbackMethods |
Set<PlaybackMethod> |
Video playback methods. Default: {autoPlaySoundOn}. |
videoBitrate |
VideoBitrate |
Video bitrate range. Default: min: 300, max: 1500. |
videoDuration |
VideoDuration |
Video duration range. Default: min: 1, max: 30. |
pbAdSlot |
String? |
PB Ad Slot identifier. Optional. |
gpId |
String? |
Global Placement ID. Optional. |
impOrtbConfig |
String? |
Custom ORTB object for impression. Optional. |
onAdLoaded |
void Function(BannerAd ad) |
Callback when ad is loaded. |
onAdFailedToLoad |
void Function(BannerAd ad, AdError? error) |
Callback when ad fails to load. |
onAdOpened |
void Function(BannerAd ad)? |
Callback when ad overlay opens. |
onAdClosed |
void Function(BannerAd ad)? |
Callback when user returns to app. |
onAdClicked |
void Function(BannerAd ad)? |
Callback when ad is clicked. |
onAdImpression |
void Function(BannerAd ad)? |
Callback when ad is visible for 1s. |
getPlatformAdSize() |
Future<AdSize?> |
Gets the ad size assigned on the platform. |
load() |
Future<void> |
Loads the ad. |
| Property/Method |
Type |
Description |
adFormat |
AdFormat |
Required. Desired ad format. |
minSizePercentage |
MinSizePercentage |
Minimum ad size in percent. Default: width: 80, height: 60. |
sizes |
Set<AdSize> |
Ad sizes for the bid request. Optional. |
apiParameters |
Set<ApiParameter> |
API frameworks for bid response. Default: {mraid3, omid1}. |
protocols |
Set<Protocol> |
Supported video protocols. Optional. |
placement |
Placement |
Placement type. Default: Placement.inBanner. |
playbackMethods |
Set<PlaybackMethod> |
Video playback methods. Default: {enterSoundOff}. |
videoBitrate |
VideoBitrate |
Video bitrate range. Default: min: 300, max: 1500. |
videoDuration |
VideoDuration |
Video duration range. Default: min: 1, max: 30. |
pbAdSlot |
String? |
PB Ad Slot identifier. Optional. |
gpId |
String? |
Global Placement ID. Optional. |
impOrtbConfig |
String? |
Custom ORTB object for impression. Optional. |
onAdLoaded |
void Function(InterstitialAd ad) |
Callback when ad is loaded. |
onAdFailedToLoad |
void Function(InterstitialAd ad, AdError? error) |
Callback when ad fails to load. |
onAdOpened |
void Function(InterstitialAd ad)? |
Callback when ad overlay opens. |
onAdClosed |
void Function(InterstitialAd ad)? |
Callback when user returns to app. |
onAdClicked |
void Function(InterstitialAd ad)? |
Callback when ad is clicked. |
onAdImpression |
void Function(InterstitialAd ad)? |
Callback when ad is visible for 1s. |
load() |
Future<void> |
Loads the ad. |
show() |
Future<void> |
Shows the ad (must be loaded first). |
| Property/Method |
Type |
Description |
apiParameters |
Set<ApiParameter> |
API frameworks for bid response. Default: {mraid3, omid1}. |
protocols |
Set<Protocol> |
Supported video protocols. Optional. |
placement |
Placement |
Placement type. Default: Placement.inBanner. |
playbackMethods |
Set<PlaybackMethod> |
Video playback methods. Default: {enterSoundOff}. |
videoBitrate |
VideoBitrate |
Video bitrate range. Default: min: 300, max: 1500. |
videoDuration |
VideoDuration |
Video duration range. Default: min: 1, max: 30. |
pbAdSlot |
String? |
PB Ad Slot identifier. Optional. |
gpId |
String? |
Global Placement ID. Optional. |
impOrtbConfig |
String? |
Custom ORTB object for impression. Optional. |
onAdLoaded |
void Function(RewardedAd ad) |
Callback when ad is loaded. |
onAdFailedToLoad |
void Function(RewardedAd ad, AdError? error) |
Callback when ad fails to load. |
onAdOpened |
void Function(RewardedAd ad)? |
Callback when ad overlay opens. |
onAdClosed |
void Function(RewardedAd ad)? |
Callback when user returns to app. |
onAdClicked |
void Function(RewardedAd ad)? |
Callback when ad is clicked. |
onAdImpression |
void Function(RewardedAd ad)? |
Callback when ad is visible for 1s. |
onUserEarnedRewardCallback |
void Function(RewardedAd ad, RewardItem reward) |
Callback when user earns a reward. |
load() |
Future<void> |
Loads the ad. |
show() |
Future<void> |
Shows the ad (must be loaded first). |
| Property/Method |
Type |
Description |
ad |
AdWithView |
The ad instance to display. Must be loaded before use. |
| Value |
Description |
banner |
Banner ad format. |
video |
Video ad format. |
bannerAndVideo |
Multi-format (banner and video). |
| Property |
Type |
Description |
height |
int |
Desired ad height. |
width |
int |
Desired ad width. |
| Value |
Description |
vpaid1 |
VPAID 1.0 API framework. |
vpaid2 |
VPAID 2.0 API framework. |
mraid1 |
MRAID 1.0 API framework. |
ormma |
ORMMA API framework. |
mraid2 |
MRAID 2.0 API framework. |
mraid3 |
MRAID 3.0 API framework. |
omid1 |
OMID 1.0 API framework. |
| Value |
Description |
inStream |
In-stream video placement. |
inBanner |
In-banner video placement. |
inArticle |
In-article video placement. |
inFeed |
In-feed video placement. |
interstitial |
Interstitial placement. |
slider |
Slider placement. |
floating |
Floating placement. |
| Value |
Description |
autoPlaySoundOn |
Auto-play with sound on. |
autoPlaySoundOff |
Auto-play with sound off. |
clickToPlay |
Click to play. |
mouseOver |
Play on mouse over. |
enterSoundOn |
Enter with sound on. |
enterSoundOff |
Enter with sound off. |
| Value |
Description |
vast1_0 |
VAST 1.0 protocol. |
vast2_0 |
VAST 2.0 protocol. |
vast3_0 |
VAST 3.0 protocol. |
vast1_0wrapper |
VAST 1.0 wrapper protocol. |
vast2_0wrapper |
VAST 2.0 wrapper protocol. |
vast3_0wrapper |
VAST 3.0 wrapper protocol. |
vast4_0 |
VAST 4.0 protocol. |
vast4_0wrapper |
VAST 4.0 wrapper protocol. |
daast1_0 |
DAAST 1.0 protocol. |
daast1_0wrapper |
DAAST 1.0 wrapper protocol. |
| Property |
Type |
Description |
min |
int |
Minimum video bitrate in kbps. |
max |
int |
Maximum video bitrate in kbps. |
| Property |
Type |
Description |
min |
int |
Minimum video duration in seconds. |
max |
int |
Maximum video duration in seconds. |
| Property |
Type |
Description |
width |
int |
Minimum width in percent. |
height |
int |
Minimum height in percent. |
| Property |
Type |
Description |
code |
int |
Error code. |
message |
String |
Descriptive error message. |
| Property |
Type |
Description |
amount |
num |
Amount of the reward. |
type |
String |
Type of the reward. |
| Value |
Description |
success |
SDK initialized successfully. |
fail |
SDK initialization failed. |
| Exception |
Description |
SdkInitializationFailedException |
Thrown if SDK initialization fails. |
AdMessageCodecReadingException |
Thrown if there is an error reading ad message codec. |
AdSizeRequiredException |
Thrown if ad size is required but missing. |
RewardItemMissingException |
Thrown if a reward item is missing in a rewarded ad. |
FailedToGetAutomaticPpidException |
Thrown if automatic PPID status could not be obtained. |
Copyright 2025 Audienzz AG.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.