Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions QtAdMob.pri
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ SOURCES += \
$$PWD/QtAdMobInterstitialAndroid.cpp \
$$PWD/QtAdMobInterstitialDummy.cpp \
$$PWD/QtAdmobBanner.cpp \
$$PWD/QtAdMobRewardedVideo.cpp \
$$PWD/QtAdmobInterstitial.cpp

OBJECTIVE_SOURCES += \
Expand All @@ -30,6 +31,7 @@ HEADERS += \
$$PWD/QtAdMobInterstitial.h \
$$PWD/QtAdMobInterstitialIos.h \
$$PWD/QtAdMobInterstitialAndroid.h \
$$PWD/QtAdMobRewardedVideo.h \
$$PWD/QtAdMobInterstitialDummy.h

ios {
Expand Down
182 changes: 182 additions & 0 deletions QtAdMobRewardedVideo.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,182 @@
#include "QtAdMobRewardedVideo.h"

#ifdef __cplusplus
extern "C" {
#endif

#ifdef Q_OS_ANDROID
// Listener when Java calls Rewarded() signal
JNIEXPORT void JNICALL Java_org_dreamdev_QtAdMob_QtAdMobActivity_Rewarded(JNIEnv *env, jobject thiz)
{
Q_UNUSED(env)
Q_UNUSED(thiz)

// Emit to QML app by calling Rewarded signal
emit QmlRewardedVideoAd::Instances()->rewarded();
}
// Listener when Java calls RewardedVideoAdClosed() signal
JNIEXPORT void JNICALL Java_org_dreamdev_QtAdMob_QtAdMobActivity_RewardedVideoAdClosed(JNIEnv *env, jobject thiz)
{
Q_UNUSED(env)
Q_UNUSED(thiz)

// Emit to QML app by calling RewardedVideoAdClosed signal
emit QmlRewardedVideoAd::Instances()->rewardedVideoAdClosed();
}
// Listener when Java calls RewardedVideoAdFailedToLoad() signal
JNIEXPORT void JNICALL Java_org_dreamdev_QtAdMob_QtAdMobActivity_RewardedVideoAdFailedToLoad(JNIEnv *env, jobject thiz, jint errorCode)
{
Q_UNUSED(env)
Q_UNUSED(thiz)

// Emit to QML app by calling RewardedVideoAdFailedToLoad signal
emit QmlRewardedVideoAd::Instances()->rewardedVideoAdFailedToLoad(errorCode);
}
// Listener when Java calls RewardedVideoAdLeftApplication() signal
JNIEXPORT void JNICALL Java_org_dreamdev_QtAdMob_QtAdMobActivity_RewardedVideoAdLeftApplication(JNIEnv *env, jobject thiz)
{
Q_UNUSED(env)
Q_UNUSED(thiz)

// Emit to QML app by calling RewardedVideoAdLeftApplication signal
emit QmlRewardedVideoAd::Instances()->rewardedVideoAdLeftApplication();
}
// Listener when Java calls RewardedVideoAdLoaded() signal
JNIEXPORT void JNICALL Java_org_dreamdev_QtAdMob_QtAdMobActivity_RewardedVideoAdLoaded(JNIEnv *env, jobject thiz)
{
Q_UNUSED(env)
Q_UNUSED(thiz)

// Emit to QML app by calling RewardedVideoAdLoaded signal
emit QmlRewardedVideoAd::Instances()->rewardedVideoAdLoaded();
}
// Listener when Java calls RewardedVideoAdOpened() signal
JNIEXPORT void JNICALL Java_org_dreamdev_QtAdMob_QtAdMobActivity_RewardedVideoAdOpened(JNIEnv *env, jobject thiz)
{
Q_UNUSED(env)
Q_UNUSED(thiz)

// Emit to QML app by calling RewardedVideoAdOpened signal
emit QmlRewardedVideoAd::Instances()->rewardedVideoAdOpened();
}
// Listener when Java calls RewardedVideoCompleted() signal
JNIEXPORT void JNICALL Java_com_gmail_manhcuong5993_QtAdMobActivity_RewardedVideoCompleted(JNIEnv *env, jobject thiz)
{
Q_UNUSED(env)
Q_UNUSED(thiz)

// Emit to QML app by calling RewardedVideoCompleted signal
emit QmlRewardedVideoAd::Instances()->rewardedVideoCompleted();
}
// Listener when Java calls RewardedVideoStarted() signal
JNIEXPORT void JNICALL Java_org_dreamdev_QtAdMob_QtAdMobActivity_RewardedVideoStarted(JNIEnv *env, jobject thiz)
{
Q_UNUSED(env)
Q_UNUSED(thiz)

// Emit to QML app by calling RewardedVideoStarted signal
emit QmlRewardedVideoAd::Instances()->rewardedVideoStarted();
}
#endif

#ifdef __cplusplus
}
#endif

// Global variable to keep instance of class
static QtAdMobRewardedVideoAndroid *mQmlRewardedVideoAd = nullptr;

QtAdMobRewardedVideoAndroid::QtAdMobRewardedVideoAndroid()
{
#ifdef Q_OS_ANDROID
// Update global instance
mQmlRewardedVideoAd = this;

// Create Android Activity on Qt
QPlatformNativeInterface* interface = QGuiApplication::platformNativeInterface();
jobject activity = (jobject)interface->nativeResourceForIntegration("QtActivity");
if (activity)
{
m_Activity = new QAndroidJniObject(activity);
}

// Call InitializeBanner method of Java
m_Activity->callMethod<void>("InitializeRewardedVideoAd");
#endif

#if (TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR)
m_QtAdmobRewardVideo = new QtAdmobRewardVideoDelegateImpl();
m_QtAdmobRewardVideo->setQtAdmobRewardVideoIos(this);
#endif
}

QtAdMobRewardedVideoAndroid *QtAdMobRewardedVideoAndroid::Instances()
{
return mQmlRewardedVideoAd;
}

void QtAdMobRewardedVideoAndroid::setUnitId(const QString &unitId)
{
#ifdef Q_OS_ANDROID
if(m_Activity != nullptr)
{
QAndroidJniObject param1 = QAndroidJniObject::fromString(unitId);
// Call SetBannerUnitId method of Java
m_Activity->callMethod<void>("SetRewardedVideoAdUnitId", "(Ljava/lang/String;)V", param1.object<jstring>());
}
#elif _WIN32
Q_UNUSED(unitId)
#endif

#if (TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR)
m_QtAdmobRewardVideo->setUnitId(unitId);
#endif
}

void QtAdMobRewardedVideoAndroid::setTestDeviceId(const QString &testDeviceId)
{
#ifdef Q_OS_ANDROID
if(m_Activity != nullptr)
{
QAndroidJniObject param1 = QAndroidJniObject::fromString(testDeviceId);
// Call SetBannerUnitId method of Java
m_Activity->callMethod<void>("SetRewardedVideoTestDeviceId", "(Ljava/lang/String;)V", param1.object<jstring>());
}
#elif _WIN32
Q_UNUSED(testDeviceId)
#endif

#if (TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR)
m_QtAdmobRewardVideo->setTestDeviceId(testDeviceId);
#endif
}

void QtAdMobRewardedVideoAndroid::loadRewardedVideoAd()
{
#ifdef Q_OS_ANDROID
if(m_Activity != nullptr)
{
// Call LoadBanner method of Java
m_Activity->callMethod<void>("LoadRewardedVideoAd");
}
#endif

#if (TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR)
m_QtAdmobRewardVideo->loadRewardedVideoAd();
#endif
}

void QtAdMobRewardedVideoAndroid::show()
{
#ifdef Q_OS_ANDROID
if(m_Activity != nullptr)
{
// Call LoadBanner method of Java
m_Activity->callMethod<void>("ShowRewardedVideoAd");
}
#endif

#if (TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR)
m_QtAdmobRewardVideo->show();
#endif
}
53 changes: 53 additions & 0 deletions QtAdMobRewardedVideo.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
#ifndef QMLREWARDEDVIDEOAD_H
#define QMLREWARDEDVIDEOAD_H

#include <QObject>
#include <QGuiApplication>
#ifdef Q_OS_ANDROID
#include <QAndroidJniObject>
#include <QtAndroid>
#include <qpa/qplatformnativeinterface.h>
#endif

#if (TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR)
class QtAdmobRewardVideoDelegateImpl;
#endif

class QtAdMobRewardedVideoAndroid : public QObject
{
Q_OBJECT
Q_PROPERTY(QString unitId WRITE setUnitId)
Q_PROPERTY(QString testDeviceId WRITE setTestDeviceId)
public:
QtAdMobRewardedVideoAndroid();
static QtAdMobRewardedVideoAndroid* Instances();

static void DeclareQML();
void setUnitId(const QString& unitId);
void setTestDeviceId(const QString &testDeviceId);

signals:
void rewarded();
void rewardedVideoAdClosed();
void rewardedVideoAdFailedToLoad(int errorCode);
void rewardedVideoAdLeftApplication();
void rewardedVideoAdLoaded();
void rewardedVideoAdOpened();
void rewardedVideoCompleted();
void rewardedVideoStarted();

public slots:
void loadRewardedVideoAd();
void show();

private:
#ifdef Q_OS_ANDROID
QAndroidJniObject* m_Activity;
#endif

#if (TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR)
QtAdmobRewardVideoDelegateImpl* m_QtAdmobRewardVideo;
#endif
};

#endif // QMLREWARDEDVIDEOAD_H
112 changes: 112 additions & 0 deletions platform/android/src/org/dreamdev/QtAdMob/QtAdMobActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@
import com.google.android.gms.ads.AdView;
import com.google.android.gms.ads.AdListener;
import com.google.android.gms.ads.InterstitialAd;
import com.google.android.gms.ads.reward.RewardedVideoAd;
import com.google.android.gms.ads.reward.RewardedVideoAdListener;
import com.google.android.gms.ads.reward.RewardItem;
import com.google.android.gms.ads.MobileAds;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
Expand All @@ -29,6 +33,10 @@ public class QtAdMobActivity extends QtActivity
private int m_AdBannerHeight = 0;
private int m_StatusBarHeight = 0;
private int m_ReadyToRequest = 0x00;
/// rewarded video Ad
private RewardedVideoAd m_AdRewardedVideo = null;
private String m_RewardedVideoAdUnitId;
private String m_RewardedVideoTestDeviceId;

private int GetStatusBarHeight()
{
Expand Down Expand Up @@ -354,6 +362,64 @@ public void run()
}
});
}

public void InitializeRewardedVideoAd()
{
final QtAdMobActivity self = this;
runOnUiThread(new Runnable()
{
public void run()
{
m_AdRewardedVideo = MobileAds.getRewardedVideoAdInstance(self);
m_AdRewardedVideo.setRewardedVideoAdListener(self);
}
});
}

public void SetRewardedVideoAdUnitId(final String adId)
{
runOnUiThread(new Runnable()
{
public void run()
{
m_RewardedVideoAdUnitId = adId;
}
});
}

public void SetRewardedVideoTestDeviceId(final String testDeviceId){
runOnUiThread(new Runnable()
{
public void run()
{
m_RewardedVideoTestDeviceId = testDeviceId;
}
});
}

public void LoadRewardedVideoAd()
{
runOnUiThread(new Runnable()
{
public void run()
{
AdRequest.Builder adRequest = new AdRequest.Builder();
adRequest.addTestDevice(m_RewardedVideoTestDeviceId);
m_AdRewardedVideo.loadAd(m_RewardedVideoAdUnitId, adRequest.build());
}
});
}

public void ShowRewardedVideoAd()
{
runOnUiThread(new Runnable()
{
public void run()
{
m_AdRewardedVideo.show();
}
});
}

@Override
public void onCreate(Bundle savedInstanceState)
Expand Down Expand Up @@ -388,6 +454,43 @@ public void onDestroy()
m_AdBannerView.destroy();
}
}

@Override
public void onRewarded(RewardItem reward)
{
Rewarded();
}
@Override
public void onRewardedVideoAdClosed()
{
RewardedVideoAdClosed();
}
@Override
public void onRewardedVideoAdFailedToLoad(int errorCode)
{
RewardedVideoAdFailedToLoad(errorCode);
}
@Override
public void onRewardedVideoAdLeftApplication()
{
}
@Override
public void onRewardedVideoAdLoaded()
{
RewardedVideoAdLoaded();
}
@Override
public void onRewardedVideoAdOpened()
{
}
@Override
public void onRewardedVideoCompleted()
{
}
@Override
public void onRewardedVideoStarted()
{
}

private static native void onBannerLoaded();
private static native void onBannerLoading();
Expand All @@ -399,4 +502,13 @@ public void onDestroy()
private static native void onInterstitialWillPresent();
private static native void onInterstitialClosed();
private static native void onInterstitialClicked();

private static native void Rewarded();
private static native void RewardedVideoAdClosed();
private static native void RewardedVideoAdFailedToLoad(int errorCode);
private static native void RewardedVideoAdLeftApplication();
private static native void RewardedVideoAdLoaded();
private static native void RewardedVideoAdOpened();
private static native void RewardedVideoCompleted();
private static native void RewardedVideoStarted();
}