master
kt 84 lines 2.86 KB
Raw
1 package com.plugin.admob.ads
2
3 import com.plugin.admob.ExecuteContext
4 import com.plugin.admob.Generated
5 import com.plugin.admob.core.Context
6 import com.plugin.admob.core.GenericAd
7 import com.google.android.gms.ads.AdError
8 import com.google.android.gms.ads.FullScreenContentCallback
9 import com.google.android.gms.ads.LoadAdError
10 import com.google.android.gms.ads.rewarded.RewardItem
11 import com.google.android.gms.ads.rewarded.RewardedAd
12 import com.google.android.gms.ads.rewarded.RewardedAdLoadCallback
13
14 class Rewarded(ctx: ExecuteContext?) : AdBase(ctx), GenericAd {
15 private var mAd: RewardedAd? = null
16 override fun destroy() {
17 clear()
18 super.destroy()
19 }
20
21 override fun load(ctx: Context?) {
22 clear()
23 RewardedAd.load(
24 activity,
25 adUnitId,
26 ctx!!.optAdRequest(),
27 object : RewardedAdLoadCallback() {
28 override fun onAdFailedToLoad(loadAdError: LoadAdError) {
29 clear()
30 emit(Generated.Events.REWARDED_LOAD_FAIL, loadAdError)
31 ctx.reject(loadAdError)
32 }
33
34 override fun onAdLoaded(rewardedAd: RewardedAd) {
35 mAd = rewardedAd
36 val ssv = ctx.optServerSideVerificationOptions()
37 println("Loaded rewarded ad, ssv userId: ${ssv?.userId}")
38 if (ssv != null) {
39 mAd!!.setServerSideVerificationOptions(ssv)
40 }
41 mAd!!.fullScreenContentCallback = object : FullScreenContentCallback() {
42 override fun onAdDismissedFullScreenContent() {
43 clear()
44 emit(Generated.Events.REWARDED_DISMISS)
45 }
46
47 override fun onAdFailedToShowFullScreenContent(adError: AdError) {
48 emit(Generated.Events.REWARDED_SHOW_FAIL, adError)
49 }
50
51 override fun onAdShowedFullScreenContent() {
52 emit(Generated.Events.REWARDED_SHOW)
53 }
54
55 override fun onAdImpression() {
56 emit(Generated.Events.REWARDED_IMPRESSION)
57 }
58 }
59 emit(Generated.Events.REWARDED_LOAD)
60 ctx.resolve()
61 }
62 })
63 }
64
65 override val isLoaded: Boolean
66 get() = mAd != null
67
68 override fun show(ctx: Context?) {
69 mAd!!.show(activity) { rewardItem: RewardItem? ->
70 emit(
71 Generated.Events.REWARDED_REWARD,
72 rewardItem!!
73 )
74 }
75 ctx!!.resolve()
76 }
77
78 private fun clear() {
79 if (mAd != null) {
80 mAd!!.fullScreenContentCallback = null
81 mAd = null
82 }
83 }
84 }