Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Set paid event listeners for preloaded ads. #3624

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
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
Original file line number Diff line number Diff line change
Expand Up @@ -42,159 +42,204 @@ public class Interstitial {
*/
private InterstitialAd interstitialAd;

/**
* The {@code Activity} on which the interstitial will display.
*/
private Activity activity;
/** The {@code Activity} on which the interstitial will display. */
private final Activity activity;

/**
* A listener implemented in Unity via {@code AndroidJavaProxy} to receive ad events.
*/
private UnityInterstitialAdCallback callback;
/** A listener implemented in Unity via {@code AndroidJavaProxy} to receive ad events. */
private final UnityInterstitialAdCallback callback;

public Interstitial(Activity activity, UnityInterstitialAdCallback callback) {
this.activity = activity;
this.callback = callback;
}

/**
* Loads an interstitial ad.
*
* @param adUnitId The ad unit ID.
* @param request The {@link AdRequest} object with targeting parameters.
*/
public void loadAd(final String adUnitId, final AdRequest request) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
InterstitialAd.load(
activity,
adUnitId,
request,
new InterstitialAdLoadCallback() {
@Override
public void onAdLoaded(@NonNull InterstitialAd ad) {
interstitialAd = ad;
private FullScreenContentCallback fullScreenContentCallback =
new FullScreenContentCallback() {
@Override
public void onAdFailedToShowFullScreenContent(final AdError error) {
new Thread(
new Runnable() {
@Override
public void run() {
if (callback != null) {
callback.onAdFailedToShowFullScreenContent(error);
}
}
})
.start();
}

interstitialAd.setOnPaidEventListener(
new OnPaidEventListener() {
@Override
public void onPaidEvent(final AdValue adValue) {
new Thread(
new Runnable() {
@Override
public void run() {
if (callback != null) {
callback.onPaidEvent(
adValue.getPrecisionType(),
adValue.getValueMicros(),
adValue.getCurrencyCode());
}
}
}
).start();
@Override
public void onAdShowedFullScreenContent() {
new Thread(
new Runnable() {
@Override
public void run() {
if (callback != null) {
callback.onAdShowedFullScreenContent();
}
}
);
})
.start();
}

interstitialAd.setFullScreenContentCallback(
new FullScreenContentCallback() {
@Override
public void onAdFailedToShowFullScreenContent(final AdError error) {
new Thread(
new Runnable() {
@Override
public void run() {
if (callback != null) {
callback.onAdFailedToShowFullScreenContent(error);
}
}
}
).start();
@Override
public void onAdDismissedFullScreenContent() {
new Thread(
new Runnable() {
@Override
public void run() {
if (callback != null) {
callback.onAdDismissedFullScreenContent();
}
}
})
.start();
}

@Override
public void onAdShowedFullScreenContent() {
new Thread(
new Runnable() {
@Override
public void run() {
if (callback != null) {
callback.onAdShowedFullScreenContent();
}
}
}).start();
@Override
public void onAdImpression() {
new Thread(
new Runnable() {
@Override
public void run() {
if (callback != null) {
callback.onAdImpression();
}
}
})
.start();
}

@Override
public void onAdDismissedFullScreenContent() {
new Thread(
new Runnable() {
@Override
public void run() {
if (callback != null) {
callback.onAdDismissedFullScreenContent();
}
}
}).start();
@Override
public void onAdClicked() {
new Thread(
new Runnable() {
@Override
public void run() {
if (callback != null) {
callback.onAdClicked();
}
}
})
.start();
}
};

private OnPaidEventListener onPaidEventListener =
new OnPaidEventListener() {
@Override
public void onPaidEvent(final AdValue adValue) {
new Thread(
new Runnable() {
@Override
public void run() {
if (callback != null) {
callback.onPaidEvent(
adValue.getPrecisionType(),
adValue.getValueMicros(),
adValue.getCurrencyCode());
}
}
})
.start();
}
};

/**
* Loads an interstitial ad.
*
* @param adUnitId The ad unit ID.
* @param request The {@link AdRequest} object with targeting parameters.
*/
public void loadAd(final String adUnitId, final AdRequest request) {
activity.runOnUiThread(
new Runnable() {
@Override
public void run() {
InterstitialAd.load(
activity,
adUnitId,
request,
new InterstitialAdLoadCallback() {
@Override
public void onAdLoaded(@NonNull InterstitialAd ad) {
interstitialAd = ad;
interstitialAd.setOnPaidEventListener(onPaidEventListener);
interstitialAd.setFullScreenContentCallback(fullScreenContentCallback);

@Override
public void onAdImpression() {
new Thread(
new Thread(
new Runnable() {
@Override
public void run() {
if (callback != null) {
callback.onAdImpression();
callback.onInterstitialAdLoaded();
}
}
}).start();
}
})
.start();
}

@Override
public void onAdClicked() {
new Thread(
@Override
public void onAdFailedToLoad(final LoadAdError error) {
new Thread(
new Runnable() {
@Override
public void run() {
if (callback != null) {
callback.onAdClicked();
callback.onInterstitialAdFailedToLoad(error);
}
}
}).start();
}
});
})
.start();
}
});
}
});
}

new Thread(
new Runnable() {
@Override
public void run() {
if (callback != null) {
callback.onInterstitialAdLoaded();
}
}
}
).start();
}
/** Returns {@code true} if there is an interstitial ad available in the pre-load queue. */
public boolean isAdAvailable(@NonNull String adUnitId) {
return InterstitialAd.isAdAvailable(activity, adUnitId);
}

@Override
public void onAdFailedToLoad(final LoadAdError error) {
new Thread(
new Runnable() {
@Override
public void run() {
if (callback != null) {
callback.onInterstitialAdFailedToLoad(error);
}
}
}
).start();
}
}
);
}
});
/**
* Retrieves the next interstitial ad available in pre-load queue, or {@code null} if no ad is
* available.
*/
public void pollAd(@NonNull String adUnitId) {
interstitialAd = InterstitialAd.pollAd(activity, adUnitId);
if (interstitialAd == null) {
Log.e(PluginUtils.LOGTAG, "Failed to obtain an Interstitial Ad from the preloader.");
LoadAdError error =
new LoadAdError(
AdRequest.ERROR_CODE_INTERNAL_ERROR,
"Failed to obtain an Interstitial Ad from the preloader.",
AdRequest.ERROR_CODE_INTERNAL_ERROR,
null,
null);
new Thread(
new Runnable() {
@Override
public void run() {
if (callback != null) {
callback.onInterstitialAdFailedToLoad(error);
}
}
})
.start();
}
activity.runOnUiThread(
new Runnable() {
@Override
public void run() {
interstitialAd.setOnPaidEventListener(onPaidEventListener);
}
});
interstitialAd.setFullScreenContentCallback(fullScreenContentCallback);
if (callback != null) {
callback.onInterstitialAdLoaded();
}
}

/** Returns the {@link InterstitialAd} ad unit ID. */
Expand Down
Loading