💸 Unofficial AdMob ads support for Haxe/OpenFL Android and iOS targets.
Objective-C Objective-C++ Haxe C++ Other
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.


Haxe AdMob

Travis Build Status License

Unofficial AdMob banner and interstitial ad support for iOS and Android Haxe OpenFL targets. See the demo app here.



  • Caching, showing and dismissing interstitial ads.
  • Showing, hiding and refreshing banner ads.
  • Customizable listener for reacting to SDK events.
  • Customizable banner positioning.
  • Multiple ad units.

Doesn't support:

  • Displaying more than one banner ad at a time.
  • IAP functionality.
  • Rewarded videos.
  • DoubleClick ads or mediation.

If there is something you would like adding let me know. Pull requests welcomed too!


haxelib install samcodes-admob


See the demo app for a working example using a custom listener:

Screenshot of demo app

Screenshot of demo app


Include the haxelib through Project.xml:

<haxelib name="samcodes-admob" />

For Android enter a device id if you want to use test ads on one:

<!-- Set this if you want to use test ads on a particular device. -->
<setenv name="AdmobTestDeviceId" value="YOUR_HASHED_TEST_DEVICE_ID" />

For iOS you can specify a test device id in the AdMob.initAdMob() call in Haxe code:

import extension.admob.AdMob;
import extension.admob.AdMobListener;
import extension.admob.AdMobGravity;

#if ios
AdMob.initAdMob("YOUR_HASHED_TEST_DEVICE_ID"); // Specify a test device id for iOS here.

// Optionally subclass AdMobListener and set it here to handle SDK events.
// Extending and customizing this is useful for actions like pausing the game when showing interstitials, showing banners as soon as they cache etc.
AdMob.setListener(new AdMobListener());

var interstitialId:String = "my_interstitial_id";

AdMob.cacheInterstitial(interstitialId); // Cache interstitial with the id from your AdMob dashboard.

// Later...
if(AdMob.hasInterstitial(interstitialId) {
	// Shows an interstitial with the given id.
	// If this is called and the interstitial isn't cached, then it won't display at all - that's just how the AdMob SDK works.
	// You should cache interstitial ads well in advance of showing them.

AdMob.setBannerPosition(AdMobHorizontalGravity.CENTER, AdMobVerticalGravity.BOTTOM); // All banners will appear bottom center of the screen

var bannerId:String = "my_banner_id";


// Later...
AdMob.showBanner(bannerId); // Shows the banner (it will only show if the SDK has finished caching a banner after calling refreshBanner)
AdMob.hideBanner(bannerId); // Hides the banner


Use #if (android || ios) conditionals around your imports and calls to this library for cross platform projects, as there is no stub/fallback implementation included in the haxelib.

If you need to rebuild the iOS or simulator ndlls navigate to /project and run rebuild_ndlls.sh.