Skip to content

Commit 05ec9a1

Browse files
authored
Merge pull request #61 from pozirk/master
Some updates
2 parents 1f86898 + 0c89fc7 commit 05ec9a1

File tree

23 files changed

+840
-973
lines changed

23 files changed

+840
-973
lines changed

.github/workflows/main.yml

+2-3
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ jobs:
1515
strategy:
1616
fail-fast: false
1717
matrix:
18-
example: [appopen, banner, interstitial, rewarded]
18+
example: [admobtest]
1919
steps:
2020
- name: Checkout
2121
uses: actions/checkout@main
@@ -28,7 +28,6 @@ jobs:
2828
- name: Install Haxe Libraries
2929
run: |
3030
haxelib install lime --quiet --never --skip-dependencies
31-
haxelib install extension-androidtools --quiet --never --skip-dependencies
3231
haxelib dev extension-admob .
3332
3433
- name: Setup hxcpp Library
@@ -58,7 +57,7 @@ jobs:
5857
strategy:
5958
fail-fast: false
6059
matrix:
61-
example: [appopen, banner, interstitial, rewarded]
60+
example: [admobtest]
6261
steps:
6362
- name: Checkout
6463
uses: actions/checkout@main

LICENSE.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ License
33

44
The MIT License (MIT)
55

6-
Copyright (c) 2023 Pozirk Games (https://www.pozirk.com/)
6+
Copyright (c) 2025 Haxe/Lime/NME/OpenFL contributors
77

88
Permission is hereby granted, free of charge, to any person obtaining a copy
99
of this software and associated documentation files (the "Software"), to deal

README.md

+44-29
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ To install **extension-admob**, follow these steps:
2121
3. **Project Configuration** (Add the following code to your **project.xml** file)
2222
```xml
2323
<section if="cpp">
24-
<haxelib name="extension-admob" if="mobile" />
24+
<haxelib name="extension-admob" if="mobile" />
2525
</section>
2626
```
2727

@@ -44,74 +44,89 @@ To configure **extension-admob** for your project, follow these steps:
4444

4545
3. **GDPR Consent Management**
4646
Beginning January 16, 2024, Google requires publishers serving ads in the EEA and UK to use a certified consent management platform (CMP). This extension integrates Google's UMP SDK to display a consent dialog during the first app launch. Ads may not function if the user does not provide consent.
47+
48+
3. **Initializing Admob extension**
49+
If GDPR consent dialog and/or iOS 14+ tracking authorization dialog are required, they are should automatically upon Admob initialization.
50+
```haxe
51+
import extension.admob.*;
52+
...
53+
Admob.setCallback(function(event:String, message:String):Void
54+
{
55+
if (event == AdmobEvent.INIT_OK)
56+
//you can load your ads here
57+
});
58+
Admob.init();
59+
```
4760

4861
4. **Checking GDPR Consent Requirements**
49-
You can determine if the GDPR consent dialog is required based on the user's location:
62+
After consenting (or not) to show ads, user must have an option to change his choice.
63+
To give this choice an access to GDPR consent dialog should be provided somewhere in the app.
64+
You can determine if the GDPR consent dialog is required (ie user is from EEA or UK):
5065
```haxe
51-
if (extension.admob.Admob.isPrivacyOptionsRequired())
66+
if (Admob.isPrivacyOptionsRequired())
5267
trace("GDPR consent dialog is required.");
5368
```
69+
70+
5. **Reopen Privacy Options Dialog**
71+
If needed, allow users to manage their GDPR consent options again.
72+
```haxe
73+
Admob.showPrivacyOptionsForm();
74+
```
5475

55-
5. **Verify User Consent**
76+
6. **Verify User Consent**
5677
Check if the user has consented to personalized ads:
5778
```haxe
58-
if (extension.admob.Admob.getConsent() == extension.admob.AdmobConsent.FULL)
79+
if (Admob.getConsent() == AdmobConsent.FULL)
5980
trace("User consented to personalized ads.");
6081
else
61-
trace("User did not consent to personalized ads. Ads may not work.");
82+
trace("User did not consent to personalized ads.");
6283
```
6384

64-
6. **Check Consent for Specific Purposes**
85+
7. **Check Consent for Specific Purposes**
6586
Verify if the user has consented to individual purposes, such as purpose 0:
6687
```haxe
67-
if (extension.admob.Admob.hasConsentForPurpose(0) == 1)
88+
if (Admob.hasConsentForPurpose(0) == 1)
6889
trace("User has consented to purpose 0.");
6990
else
7091
trace("User has not consented to purpose 0.");
7192
```
7293

73-
7. Reopen Privacy Options Dialog
74-
If needed, allow users to manage their consent options again.
75-
```haxe
76-
extension.admob.Admob.showPrivacyOptionsForm();
77-
```
78-
79-
8. Load and Show Ads
94+
8. **Load and Show Ads**
8095
Add the following snippets to display ads in your app:
8196

8297
- **Banner Ad**
8398
```haxe
84-
extension.admob.Admob.showBanner("ca-app-pub-XXXX/XXXXXXXXXX");
99+
Admob.showBanner("ca-app-pub-XXXX/XXXXXXXXXX");
85100
```
86101
87102
- **Interstitial Ad**
88103
```haxe
89-
extension.admob.Admob.onStatus.add(function(event:String, message:String):Void
104+
Admob.setCallback(function(event:String, message:String):Void
90105
{
91-
if (event == extension.admob.AdmobEvent.INTERSTITIAL_LOADED)
92-
extension.admob.Admob.showInterstitial();
106+
if (event == AdmobEvent.INTERSTITIAL_LOADED)
107+
Admob.showInterstitial();
93108
});
94-
extension.admob.Admob.loadInterstitial("ca-app-pub-XXXX/XXXXXXXXXX");
109+
Admob.loadInterstitial("ca-app-pub-XXXX/XXXXXXXXXX");
95110
```
96111
97112
- **Rewarded Ad**
98113
```haxe
99-
extension.admob.Admob.onStatus.add(function(event:String, message:String):Void
114+
Admob.setCallback(function(event:String, message:String):Void
100115
{
101-
if (event == extension.admob.AdmobEvent.REWARDED_LOADED)
102-
extension.admob.Admob.showRewarded();
116+
if (event == AdmobEvent.REWARDED_LOADED)
117+
Admob.showRewarded();
103118
});
104-
extension.admob.Admob.loadRewarded("ca-app-pub-XXXX/XXXXXXXXXX");
119+
Admob.loadRewarded("ca-app-pub-XXXX/XXXXXXXXXX");
105120
```
106121
107122
- **App Open Ad**
108123
```haxe
109-
extension.admob.Admob.onStatus.add(function(event:String, message:String):Void
124+
Admob.setCallback(function(event:String, message:String):Void
110125
{
111-
if (event == extension.admob.AdmobEvent.APP_OPEN_LOADED)
112-
extension.admob.Admob.showAppOpen();
126+
if (event == AdmobEvent.APP_OPEN_LOADED)
127+
Admob.showAppOpen();
113128
});
114-
extension.admob.Admob.loadAppOpen("ca-app-pub-XXXX/XXXXXXXXXX");
129+
Admob.loadAppOpen("ca-app-pub-XXXX/XXXXXXXXXX");
115130
```
116131
117132
### Disclaimer
@@ -124,4 +139,4 @@ To configure **extension-admob** for your project, follow these steps:
124139
125140
The MIT License (MIT) - [LICENSE.md](LICENSE.md)
126141
127-
Copyright (c) 2023 Pozirk Games contributors
142+
Copyright (c) 2025 Haxe/Lime/NME/OpenFL contributors

examples/appopen/project.xml examples/admobtest/project.xml

+1-2
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,13 @@
66
<!-- https://developers.google.com/admob/ios/quick-start -->
77
<setenv name="ADMOB_APPID" value="ca-app-pub-3940256099942544~1458002511" if="ios" />
88

9-
<meta title="Extension-Admob Test" package="org.openfl.lime.samples.helloworld" version="1.0.0" company="OpenFL" />
9+
<meta title="Extension-Admob Test" package="org.haxe.extensions.admob" version="1.0.0" company="Home-made Extensions Inc." />
1010

1111
<app main="Main" path="export" file="EATest" />
1212

1313
<source path="source" />
1414

1515
<haxelib name="lime" />
16-
<haxelib name="extension-androidtools" if="android" />
1716
<haxelib name="extension-admob" />
1817

1918
<haxeflag name="-dce" value="full" />

examples/admobtest/source/Main.hx

+90
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package;
2+
3+
import extension.admob.*;
4+
5+
class Main extends lime.app.Application
6+
{
7+
#if android
8+
//these are test ids from here: https://developers.google.com/admob/android/test-ads
9+
private static final APP_OPEN_ID:String = "ca-app-pub-3940256099942544/9257395921";
10+
private static final REWARDED_ID:String = "ca-app-pub-3940256099942544/5224354917";
11+
private static final INTERSTITIAL_ID:String = "ca-app-pub-3940256099942544/1033173712";
12+
private static final ADAPTIVE_BANNER_ID:String = "ca-app-pub-3940256099942544/9214589741";
13+
private static final BANNER_ID:String = "ca-app-pub-3940256099942544/6300978111";
14+
#elseif ios
15+
//https://developers.google.com/ad-manager/mobile-ads-sdk/ios/test-ads
16+
private static final APP_OPEN_ID:String = "/21775744923/example/app-open";
17+
private static final REWARDED_ID:String = "/21775744923/example/rewarded";
18+
private static final INTERSTITIAL_ID:String = "/21775744923/example/interstitial";
19+
private static final ADAPTIVE_BANNER_ID:String = "/21775744923/example/adaptive-banner";
20+
private static final BANNER_ID:String = "/21775744923/example/fixed-size-banner";
21+
#end
22+
23+
public function onCallback(event:String, message:String)
24+
{
25+
switch(event)
26+
{
27+
case AdmobEvent.INIT_OK:
28+
Admob.setVolume(0.5);
29+
trace("isPrivacyOptionsRequired", Admob.isPrivacyOptionsRequired());
30+
trace("getConsent", Admob.getConsent());
31+
trace("hasConsentForPurpose", Admob.hasConsentForPurpose(0));
32+
Admob.loadAppOpen(APP_OPEN_ID);
33+
34+
case AdmobEvent.APP_OPEN_LOADED:
35+
Admob.showAppOpen();
36+
37+
case AdmobEvent.APP_OPEN_DISMISSED, AdmobEvent.APP_OPEN_FAILED_TO_LOAD, AdmobEvent.APP_OPEN_FAILED_TO_SHOW:
38+
Admob.loadRewarded(REWARDED_ID);
39+
40+
case AdmobEvent.REWARDED_LOADED:
41+
Admob.showRewarded();
42+
43+
case AdmobEvent.REWARDED_DISMISSED, AdmobEvent.REWARDED_FAILED_TO_LOAD, AdmobEvent.REWARDED_FAILED_TO_SHOW:
44+
Admob.loadInterstitial(INTERSTITIAL_ID);
45+
46+
case AdmobEvent.INTERSTITIAL_LOADED:
47+
Admob.showInterstitial();
48+
49+
case AdmobEvent.INTERSTITIAL_DISMISSED, AdmobEvent.INTERSTITIAL_FAILED_TO_LOAD, AdmobEvent.INTERSTITIAL_FAILED_TO_SHOW:
50+
Admob.showBanner(ADAPTIVE_BANNER_ID);
51+
//Admob.showBanner(BANNER_ID, AdmobBannerSize.BANNER, AdmobBannerAlign.TOP);
52+
53+
case AdmobEvent.APP_OPEN_CLICKED, AdmobEvent.INTERSTITIAL_CLICKED, AdmobEvent.REWARDED_CLICKED, AdmobEvent.BANNER_CLICKED:
54+
trace("DINHEIRO!");
55+
56+
case AdmobEvent.REWARDED_EARNED:
57+
trace("REWARD EARNED");
58+
}
59+
60+
trace(event, message);
61+
}
62+
63+
public override function onWindowCreate():Void
64+
{
65+
Admob.setCallback(onCallback);
66+
Admob.init(true); //It feels like in iOS, you still need to set test mode even with test ids for all the ads variants to work
67+
}
68+
69+
public override function render(context:lime.graphics.RenderContext):Void
70+
{
71+
switch (context.type)
72+
{
73+
case CAIRO:
74+
context.cairo.setSourceRGB(0.75, 1, 0);
75+
context.cairo.paint();
76+
case CANVAS:
77+
context.canvas2D.fillStyle = '#BFFF00';
78+
context.canvas2D.fillRect(0, 0, window.width, window.height);
79+
case DOM:
80+
context.dom.style.backgroundColor = '#BFFF00';
81+
case FLASH:
82+
context.flash.graphics.beginFill(0xBFFF00);
83+
context.flash.graphics.drawRect(0, 0, window.width, window.height);
84+
case OPENGL | OPENGLES | WEBGL:
85+
context.webgl.clearColor(0.75, 1, 0, 1);
86+
context.webgl.clear(context.webgl.COLOR_BUFFER_BIT);
87+
default:
88+
}
89+
}
90+
}

examples/appopen/source/Main.hx

-52
This file was deleted.

examples/banner/project.xml

-22
This file was deleted.

0 commit comments

Comments
 (0)