Add property for set non personalized ads for AdMob

This commit is contained in:
FalsinSoft 2020-08-23 18:15:02 +02:00
parent 1e67ad06b2
commit 87bea4892e
12 changed files with 149 additions and 10 deletions

View File

@ -269,8 +269,9 @@ QtAndroidAdMobBanner {
unitId: "admob-banner-unit-id"
type: QtAndroidAdMobBanner.TYPE_BANNER
keywords: ["keyword_1", "keyword_2", "keyword_3"]
nonPersonalizedAds: false
}</pre>
<p>The <i>unitId</i> is the string generated when you create a new ad unit inside the AdMob site. It's used to identify the ad connected to your app. Using this id you can know how much you earn from this ad unit. The <i>keywords</i> property is an optional list of keywords needed for better targeting the banner ad. The property <i>type</i> is the banner type you want to show. Possible values are:</p>
<p>The <i>unitId</i> is the string generated when you create a new ad unit inside the AdMob site. It's used to identify the ad connected to your app. Using this id you can know how much you earn from this ad unit. The <i>keywords</i> property is an optional list of keywords needed for better targeting the banner ad. The <i>nonPersonalizedAds</i> property is optional (default is false). Set this property to true impose to AdMob to don't use collected user personal data for ads targeting. The property <i>type</i> is the banner type you want to show. Possible values are:</p>
<pre class="prettyprint">TYPE_BANNER
TYPE_FULL_BANNER
TYPE_LARGE_BANNER
@ -317,8 +318,9 @@ android.permission.WRITE_EXTERNAL_STORAGE</pre>
<pre class="prettyprint">QtAndroidAdMobInterstitial {
id: interstitial
unitId: "admob-interstitial-unit-id"
nonPersonalizedAds: false
}</pre>
<p>The <i>unitId</i> is the string generated when you create a new ad unit inside the AdMob site. It's used to identify the ad connected to your app. Using this id you can know how much you earn from this ad unit.</p>
<p>The <i>unitId</i> is the string generated when you create a new ad unit inside the AdMob site. It's used to identify the ad connected to your app. Using this id you can know how much you earn from this ad unit. The <i>nonPersonalizedAds</i> property is optional (default is false). Set this property to true impose to AdMob to don't use collected user personal data for ads targeting.</p>
<p>This item generate the following signals informing regarding the ad status:</p>
<pre class="prettyprint">onLoadError
onLoading
@ -361,8 +363,9 @@ android.permission.WRITE_EXTERNAL_STORAGE</pre>
<pre class="prettyprint">QtAndroidAdMobRewardedVideo {
id: rewardedVideo
unitId: "admob-rewarded-video-unit-id"
nonPersonalizedAds: false
}</pre>
<p>The <i>unitId</i> is the string generated when you create a new ad unit inside the AdMob site. It's used to identify the ad connected to your app. Using this id you can know how much you earn from this ad unit.</p>
<p>The <i>unitId</i> is the string generated when you create a new ad unit inside the AdMob site. It's used to identify the ad connected to your app. Using this id you can know how much you earn from this ad unit. The <i>nonPersonalizedAds</i> property is optional (default is false). Set this property to true impose to AdMob to don't use collected user personal data for ads targeting.</p>
<p>This item generate the following signals informing regarding the ad status:</p>
<pre class="prettyprint">onRewarded
onLoadError

View File

@ -34,6 +34,7 @@ QAndroidAdMobBanner::QAndroidAdMobBanner(QQuickItem *parent) : QQuickItem(parent
QtAndroid::androidActivity().object<jobject>()),
m_instanceIndex(m_instancesCounter++),
m_bannerType(TYPE_NO_BANNER),
m_nonPersonalizedAds(false),
m_bannerShowed(false)
{
m_pInstancesMap[m_instanceIndex] = this;
@ -182,6 +183,23 @@ void QAndroidAdMobBanner::setType(BANNER_TYPE type)
}
}
bool QAndroidAdMobBanner::getNonPersonalizedAds() const
{
return m_nonPersonalizedAds;
}
void QAndroidAdMobBanner::setNonPersonalizedAds(bool npa)
{
if(m_javaAdMobBanner.isValid())
{
m_javaAdMobBanner.callMethod<void>("setNonPersonalizedAds",
"(Z)V",
npa
);
m_nonPersonalizedAds = npa;
}
}
void QAndroidAdMobBanner::screenGeometryChanged(const QRect &geometry)
{
Q_UNUSED(geometry)

View File

@ -32,6 +32,7 @@ class QAndroidAdMobBanner : public QQuickItem
Q_PROPERTY(QString unitId READ getUnitId WRITE setUnitId)
Q_PROPERTY(BANNER_TYPE type READ getType WRITE setType)
Q_PROPERTY(QStringList keywords READ getKeywords WRITE setKeywords)
Q_PROPERTY(bool nonPersonalizedAds READ getNonPersonalizedAds WRITE setNonPersonalizedAds)
Q_ENUMS(BANNER_TYPE)
Q_ENUMS(ERROR_TYPE)
Q_OBJECT
@ -68,6 +69,8 @@ public:
void setType(BANNER_TYPE type);
const QStringList& getKeywords() const;
void setKeywords(const QStringList &keywordsList);
bool getNonPersonalizedAds() const;
void setNonPersonalizedAds(bool npa);
static const QMap<int, QAndroidAdMobBanner*>& instances();
@ -88,6 +91,7 @@ private:
static int m_instancesCounter;
const int m_instanceIndex;
BANNER_TYPE m_bannerType;
bool m_nonPersonalizedAds;
bool m_bannerShowed;
QString m_unitId;
QStringList m_keywordsList;

View File

@ -31,7 +31,8 @@ QAndroidAdMobInterstitial::QAndroidAdMobInterstitial(QQuickItem *parent) : QQuic
m_javaAdMobInterstitial("com/falsinsoft/qtandroidtools/AndroidAdMobInterstitial",
"(Landroid/app/Activity;)V",
QtAndroid::androidActivity().object<jobject>()),
m_instanceIndex(m_instancesCounter++)
m_instanceIndex(m_instancesCounter++),
m_nonPersonalizedAds(false)
{
m_pInstancesMap[m_instanceIndex] = this;
@ -101,6 +102,23 @@ void QAndroidAdMobInterstitial::setUnitId(const QString &unitId)
}
}
bool QAndroidAdMobInterstitial::getNonPersonalizedAds() const
{
return m_nonPersonalizedAds;
}
void QAndroidAdMobInterstitial::setNonPersonalizedAds(bool npa)
{
if(m_javaAdMobInterstitial.isValid())
{
m_javaAdMobInterstitial.callMethod<void>("setNonPersonalizedAds",
"(Z)V",
npa
);
m_nonPersonalizedAds = npa;
}
}
void QAndroidAdMobInterstitial::interstitialEvent(JNIEnv *env, jobject thiz, jint eventId)
{
QMapIterator<int, QAndroidAdMobInterstitial*> instance(m_pInstancesMap);

View File

@ -30,6 +30,7 @@
class QAndroidAdMobInterstitial : public QQuickItem
{
Q_PROPERTY(QString unitId READ getUnitId WRITE setUnitId)
Q_PROPERTY(bool nonPersonalizedAds READ getNonPersonalizedAds WRITE setNonPersonalizedAds)
Q_ENUMS(ERROR_TYPE)
Q_OBJECT
@ -50,6 +51,8 @@ public:
const QString& getUnitId() const;
void setUnitId(const QString &unitId);
bool getNonPersonalizedAds() const;
void setNonPersonalizedAds(bool npa);
static const QMap<int, QAndroidAdMobInterstitial*>& instances();
@ -65,6 +68,7 @@ private:
static QMap<int, QAndroidAdMobInterstitial*> m_pInstancesMap;
static int m_instancesCounter;
const int m_instanceIndex;
bool m_nonPersonalizedAds;
QString m_unitId;
enum EVENT_TYPE

View File

@ -31,7 +31,8 @@ QAndroidAdMobRewardedVideo::QAndroidAdMobRewardedVideo(QQuickItem *parent) : QQu
m_javaAdMobRewardedVideo("com/falsinsoft/qtandroidtools/AndroidAdMobRewardedVideo",
"(Landroid/app/Activity;)V",
QtAndroid::androidActivity().object<jobject>()),
m_instanceIndex(m_instancesCounter++)
m_instanceIndex(m_instancesCounter++),
m_nonPersonalizedAds(false)
{
m_pInstancesMap[m_instanceIndex] = this;
@ -98,6 +99,23 @@ void QAndroidAdMobRewardedVideo::setUnitId(const QString &unitId)
m_unitId = unitId;
}
bool QAndroidAdMobRewardedVideo::getNonPersonalizedAds() const
{
return m_nonPersonalizedAds;
}
void QAndroidAdMobRewardedVideo::setNonPersonalizedAds(bool npa)
{
if(m_javaAdMobRewardedVideo.isValid())
{
m_javaAdMobRewardedVideo.callMethod<void>("setNonPersonalizedAds",
"(Z)V",
npa
);
m_nonPersonalizedAds = npa;
}
}
void QAndroidAdMobRewardedVideo::rewardedVideoReward(JNIEnv *env, jobject thiz, jstring type, jint amount)
{
QMapIterator<int, QAndroidAdMobRewardedVideo*> instance(m_pInstancesMap);

View File

@ -30,6 +30,7 @@
class QAndroidAdMobRewardedVideo : public QQuickItem
{
Q_PROPERTY(QString unitId READ getUnitId WRITE setUnitId)
Q_PROPERTY(bool nonPersonalizedAds READ getNonPersonalizedAds WRITE setNonPersonalizedAds)
Q_ENUMS(ERROR_TYPE)
Q_OBJECT
@ -50,6 +51,8 @@ public:
const QString& getUnitId() const;
void setUnitId(const QString &unitId);
bool getNonPersonalizedAds() const;
void setNonPersonalizedAds(bool npa);
static const QMap<int, QAndroidAdMobRewardedVideo*>& instances();
@ -69,6 +72,7 @@ private:
static QMap<int, QAndroidAdMobRewardedVideo*> m_pInstancesMap;
static int m_instancesCounter;
const int m_instanceIndex;
bool m_nonPersonalizedAds;
QString m_unitId;
enum EVENT_TYPE

View File

@ -93,6 +93,12 @@ contains(DEFINES, QTAT_ADMOB_BANNER) {
copy_admob_banner.commands = $(COPY_FILE) $$shell_path($$PWD/src/com/falsinsoft/qtandroidtools/AndroidAdMobBanner.java) $$shell_path($$ANDROID_PACKAGE_SOURCE_DIR/src/com/falsinsoft/qtandroidtools/)
PRE_TARGETDEPS += copy_admob_banner
QMAKE_EXTRA_TARGETS += copy_admob_banner
!contains(QMAKE_EXTRA_TARGETS, copy_admob) {
copy_admob.commands = $(COPY_FILE) $$shell_path($$PWD/src/com/falsinsoft/qtandroidtools/AndroidAdMob.java) $$shell_path($$ANDROID_PACKAGE_SOURCE_DIR/src/com/falsinsoft/qtandroidtools/)
PRE_TARGETDEPS += copy_admob
QMAKE_EXTRA_TARGETS += copy_admob
OTHER_FILES += $$PWD/src/com/falsinsoft/qtandroidtools/AndroidAdMob.java
}
!contains(QMAKE_EXTRA_TARGETS, copy_sync_run_on_ui_thread) {
copy_sync_run_on_ui_thread.commands = $(COPY_FILE) $$shell_path($$PWD/src/com/falsinsoft/qtandroidtools/SyncRunOnUiThread.java) $$shell_path($$ANDROID_PACKAGE_SOURCE_DIR/src/com/falsinsoft/qtandroidtools/)
PRE_TARGETDEPS += copy_sync_run_on_ui_thread
@ -108,6 +114,12 @@ contains(DEFINES, QTAT_ADMOB_INTERSTITIAL) {
copy_admob_interstitial.commands = $(COPY_FILE) $$shell_path($$PWD/src/com/falsinsoft/qtandroidtools/AndroidAdMobInterstitial.java) $$shell_path($$ANDROID_PACKAGE_SOURCE_DIR/src/com/falsinsoft/qtandroidtools/)
PRE_TARGETDEPS += copy_admob_interstitial
QMAKE_EXTRA_TARGETS += copy_admob_interstitial
!contains(QMAKE_EXTRA_TARGETS, copy_admob) {
copy_admob.commands = $(COPY_FILE) $$shell_path($$PWD/src/com/falsinsoft/qtandroidtools/AndroidAdMob.java) $$shell_path($$ANDROID_PACKAGE_SOURCE_DIR/src/com/falsinsoft/qtandroidtools/)
PRE_TARGETDEPS += copy_admob
QMAKE_EXTRA_TARGETS += copy_admob
OTHER_FILES += $$PWD/src/com/falsinsoft/qtandroidtools/AndroidAdMob.java
}
!contains(QMAKE_EXTRA_TARGETS, copy_sync_run_on_ui_thread) {
copy_sync_run_on_ui_thread.commands = $(COPY_FILE) $$shell_path($$PWD/src/com/falsinsoft/qtandroidtools/SyncRunOnUiThread.java) $$shell_path($$ANDROID_PACKAGE_SOURCE_DIR/src/com/falsinsoft/qtandroidtools/)
PRE_TARGETDEPS += copy_sync_run_on_ui_thread
@ -123,6 +135,12 @@ contains(DEFINES, QTAT_ADMOB_REWARDED_VIDEO) {
copy_admob_rewarded_video.commands = $(COPY_FILE) $$shell_path($$PWD/src/com/falsinsoft/qtandroidtools/AndroidAdMobRewardedVideo.java) $$shell_path($$ANDROID_PACKAGE_SOURCE_DIR/src/com/falsinsoft/qtandroidtools/)
PRE_TARGETDEPS += copy_admob_rewarded_video
QMAKE_EXTRA_TARGETS += copy_admob_rewarded_video
!contains(QMAKE_EXTRA_TARGETS, copy_admob) {
copy_admob.commands = $(COPY_FILE) $$shell_path($$PWD/src/com/falsinsoft/qtandroidtools/AndroidAdMob.java) $$shell_path($$ANDROID_PACKAGE_SOURCE_DIR/src/com/falsinsoft/qtandroidtools/)
PRE_TARGETDEPS += copy_admob
QMAKE_EXTRA_TARGETS += copy_admob
OTHER_FILES += $$PWD/src/com/falsinsoft/qtandroidtools/AndroidAdMob.java
}
!contains(QMAKE_EXTRA_TARGETS, copy_sync_run_on_ui_thread) {
copy_sync_run_on_ui_thread.commands = $(COPY_FILE) $$shell_path($$PWD/src/com/falsinsoft/qtandroidtools/SyncRunOnUiThread.java) $$shell_path($$ANDROID_PACKAGE_SOURCE_DIR/src/com/falsinsoft/qtandroidtools/)
PRE_TARGETDEPS += copy_sync_run_on_ui_thread

View File

@ -0,0 +1,49 @@
/*
* MIT License
*
* Copyright (c) 2018 Fabio Falsini <falsinsoft@gmail.com>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package com.falsinsoft.qtandroidtools;
import com.google.ads.mediation.admob.AdMobAdapter;
import com.google.android.gms.ads.AdRequest;
import android.os.Bundle;
public class AndroidAdMob
{
private boolean mNonPersonalizedAds = false;
public void setNonPersonalizedAds(boolean npa)
{
mNonPersonalizedAds = npa;
}
protected void setExtraOptions(AdRequest.Builder builder)
{
if(mNonPersonalizedAds)
{
final Bundle extras = new Bundle();
extras.putString("npa", "1");
builder.addNetworkExtrasBundle(AdMobAdapter.class, extras);
}
}
}

View File

@ -39,7 +39,7 @@ import android.graphics.Rect;
import android.widget.FrameLayout;
import android.graphics.Color;
public class AndroidAdMobBanner
public class AndroidAdMobBanner extends AndroidAdMob
{
private final Activity mActivityInstance;
private final ViewGroup mViewGroup;
@ -168,6 +168,7 @@ public class AndroidAdMobBanner
bannerRequest.addKeyword(keyword);
}
}
setExtraOptions(bannerRequest);
mBannerView.loadAd(bannerRequest.build());
bannerEvent(EVENT_LOADING);

View File

@ -38,7 +38,7 @@ import android.graphics.Rect;
import android.widget.FrameLayout;
import android.graphics.Color;
public class AndroidAdMobInterstitial
public class AndroidAdMobInterstitial extends AndroidAdMob
{
private final Activity mActivityInstance;
private final InterstitialListener mInterstitialListener;
@ -82,6 +82,7 @@ public class AndroidAdMobInterstitial
public void run()
{
AdRequest.Builder interstitialRequest = new AdRequest.Builder();
setExtraOptions(interstitialRequest);
mInterstitialAd.loadAd(interstitialRequest.build());
interstitialEvent(EVENT_LOADING);
mInterstitialAdLoaded = false;

View File

@ -34,7 +34,7 @@ import android.content.Context;
import android.os.Bundle;
import android.util.Log;
public class AndroidAdMobRewardedVideo
public class AndroidAdMobRewardedVideo extends AndroidAdMob
{
private final Activity mActivityInstance;
private final RewardedVideoListener mRewardedVideoListener;
@ -44,7 +44,6 @@ public class AndroidAdMobRewardedVideo
public AndroidAdMobRewardedVideo(Activity activityInstance)
{
mRewardedVideoListener = new RewardedVideoListener();
MobileAds.initialize(activityInstance);
mActivityInstance = activityInstance;
}
@ -62,7 +61,9 @@ public class AndroidAdMobRewardedVideo
@Override
public void run()
{
mRewardedVideoAd.loadAd(finalUnitId, new AdRequest.Builder().build());
AdRequest.Builder rewardedVideoRequest = new AdRequest.Builder();
setExtraOptions(rewardedVideoRequest);
mRewardedVideoAd.loadAd(finalUnitId, rewardedVideoRequest.build());
rewardedVideoEvent(EVENT_LOADING);
}
});