Skip to content

Commit e276958

Browse files
committed
add .subscribe function to AdManager
1 parent 703616c commit e276958

File tree

10 files changed

+68
-22
lines changed

10 files changed

+68
-22
lines changed

android/src/main/java/com/ammarahmed/rnadmob/nativeads/RNAdMobUnifiedAdQueueWrapper.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public void onAdFailedToLoad(LoadAdError adError) {
7979
error.putInt("code", adError.getCode());
8080
error.putString("domain", adError.getDomain());
8181
event.putMap("error", error);
82-
EventEmitter.sendEvent((ReactContext) mContext, CacheManager.EVENT_AD_PRELOAD_ERROR, event);
82+
EventEmitter.sendEvent((ReactContext) mContext, CacheManager.EVENT_AD_PRELOAD_ERROR + ":" + name, event);
8383
notifyOnAdsLoadFailed(adError);
8484
return;
8585
}
@@ -91,7 +91,7 @@ public void onAdFailedToLoad(LoadAdError adError) {
9191
error.putInt("code", AdRequest.ERROR_CODE_INTERNAL_ERROR);
9292
error.putString("domain", "");
9393
event.putMap("error", error);
94-
EventEmitter.sendEvent((ReactContext) mContext, CacheManager.EVENT_AD_PRELOAD_ERROR, event);
94+
EventEmitter.sendEvent((ReactContext) mContext, CacheManager.EVENT_AD_PRELOAD_ERROR + ":" + name, event);
9595
notifyOnAdsLoadFailed(adError);
9696
return;
9797
}
@@ -108,31 +108,36 @@ public void run() {
108108
@Override
109109
public void onAdImpression() {
110110
super.onAdImpression();
111-
EventEmitter.sendEvent((ReactContext) mContext, CacheManager.EVENT_AD_IMPRESSION, null);
111+
EventEmitter.sendEvent((ReactContext) mContext, CacheManager.EVENT_AD_IMPRESSION + ":" + name, null);
112+
112113
}
113114

114115
@Override
115116
public void onAdClosed() {
116117
super.onAdClosed();
117-
EventEmitter.sendEvent((ReactContext) mContext, CacheManager.EVENT_AD_CLOSED, null);
118+
EventEmitter.sendEvent((ReactContext) mContext, CacheManager.EVENT_AD_CLOSED + ":" + name, null);
119+
118120
}
119121

120122
@Override
121123
public void onAdOpened() {
122124
super.onAdOpened();
123-
EventEmitter.sendEvent((ReactContext) mContext, CacheManager.EVENT_AD_OPEN, null);
125+
EventEmitter.sendEvent((ReactContext) mContext, CacheManager.EVENT_AD_OPEN + ":" + name, null);
126+
124127
}
125128

126129
@Override
127130
public void onAdClicked() {
128131
super.onAdClicked();
129-
EventEmitter.sendEvent((ReactContext) mContext, CacheManager.EVENT_AD_CLICKED, null);
132+
Log.d("RNADMOB", CacheManager.EVENT_AD_CLICKED + ":" + name);
133+
EventEmitter.sendEvent((ReactContext) mContext, CacheManager.EVENT_AD_CLICKED + ":" + name, null);
130134

131135
}
132136

133137
@Override
134138
public void onAdLoaded() {
135139
super.onAdLoaded();
140+
136141
retryCount = 0;
137142
if (mediation) {
138143
loadingAdRequestCount--;

android/src/main/java/com/ammarahmed/rnadmob/nativeads/RNAdmobNativeView.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import android.os.Handler;
55
import android.view.LayoutInflater;
66
import android.view.View;
7+
import android.view.ViewGroup;
78
import android.widget.LinearLayout;
89

910
import androidx.annotation.NonNull;
@@ -304,6 +305,7 @@ private void getAdFromRepository() {
304305
if (adListener != null)
305306
adListener.onAdFailedToLoad(new LoadAdError(3, "The requested repo is not registered", "", null, null));
306307
} else {
308+
CacheManager.instance.attachAdListener(adRepo, adListener);
307309
if (CacheManager.instance.numberOfAds(adRepo) != 0) {
308310
unifiedNativeAdContainer = CacheManager.instance.getNativeAd(adRepo);
309311

@@ -319,10 +321,7 @@ private void getAdFromRepository() {
319321
}
320322
} else {
321323
if (!CacheManager.instance.isLoading(adRepo)) {
322-
CacheManager.instance.attachAdListener(adRepo, adListener);
323324
CacheManager.instance.requestAds(adRepo);
324-
} else {
325-
CacheManager.instance.attachAdListener(adRepo, adListener);
326325
}
327326
}
328327
}

android/src/main/java/com/ammarahmed/rnadmob/nativeads/RNAdmobNativeViewManager.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,9 @@ public void onDropViewInstance(@NonNull RNAdmobNativeView nativeAdWrapper) {
266266
}
267267
}
268268
if (nativeAdWrapper.nativeAdView != null){
269+
nativeAdWrapper.nativeAdView.removeAllViews();
269270
nativeAdWrapper.nativeAdView.destroy();
271+
nativeAdWrapper.removeAllViews();
270272
}
271273
}
272274

android/src/main/java/com/ammarahmed/rnadmob/nativeads/Utils.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,13 @@ public static void setTargetingOptions(ReadableMap options, AdManagerAdRequest.B
2020
if (options == null) return;
2121
if (options.hasKey("targets")) {
2222
ReadableArray targets = options.getArray("targets");
23+
2324
for (int i = 0; i < targets.size(); i++) {
2425
ReadableMap target = targets.getMap(i);
2526
String key = target.getString("key");
2627
if (target.getType("value") == ReadableType.Array) {
2728
List list = Arguments.toList(target.getArray("value"));
29+
2830
adRequest.addCustomTargeting(key, list);
2931
} else {
3032
adRequest.addCustomTargeting(key, target.getString("value"));

ios/RNAdMobManager/CacheManager.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,13 @@
1515
@interface CacheManager:NSObject
1616

1717
+ (CacheManager*)sharedInstance;
18-
+ (NSString*) EVENT_AD_PRELOAD_LOADED;
19-
+ (NSString*) EVENT_AD_PRELOAD_ERROR;
18+
+ (NSString *)EVENT_AD_PRELOAD_LOADED:(NSString *)name;
19+
+ (NSString *)EVENT_AD_PRELOAD_ERROR:(NSString *)name;
20+
+ (NSString *)EVENT_AD_CLOSED:(NSString *)name;
21+
+ (NSString *)EVENT_AD_OPEN:(NSString *)name;
22+
+ (NSString *)EVENT_AD_CLICKED:(NSString *)name;
23+
+ (NSString *)EVENT_AD_IMPRESSION:(NSString *)name;
24+
2025

2126
-(BOOL) isLoading:(NSString*) id;
2227
-(NSInteger) numberOfAds:(NSString*) id;

ios/RNAdMobManager/CacheManager.m

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,12 @@ @implementation CacheManager{
1515
NSMutableDictionary *repositoriesMap;
1616
}
1717

18-
+ (NSString *)EVENT_AD_PRELOAD_LOADED { return @"onAdPreloadLoaded"; }
19-
+ (NSString *)EVENT_AD_PRELOAD_ERROR { return @"onAdPreloadError"; }
18+
+ (NSString *)EVENT_AD_PRELOAD_LOADED:(NSString *)name { return [@"onAdPreloadLoaded" stringByAppendingString:[@":" stringByAppendingString:name]]; }
19+
+ (NSString *)EVENT_AD_PRELOAD_ERROR:(NSString *)name { return [@"onAdPreloadError" stringByAppendingString:[@":" stringByAppendingString:name]]; }
20+
+ (NSString *)EVENT_AD_CLOSED:(NSString *)name { return [@"onAdPreloadClosed" stringByAppendingString:[@":" stringByAppendingString:name]]; }
21+
+ (NSString *)EVENT_AD_OPEN:(NSString *)name { return [@"onAdPreloadOpen" stringByAppendingString:[@":" stringByAppendingString:name]]; }
22+
+ (NSString *)EVENT_AD_CLICKED:(NSString *)name { return [@"onAdPreloadClicked" stringByAppendingString:[@":" stringByAppendingString:name]]; }
23+
+ (NSString *)EVENT_AD_IMPRESSION:(NSString *)name { return [@"onAdPreloadImpression" stringByAppendingString:[@":" stringByAppendingString:name]]; }
2024

2125
static CacheManager *_sharedInstance = nil;
2226

ios/RNAdMobManager/RNAdMobUnifiedAdQueueWrapper.m

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,13 +194,29 @@ - (void)adLoader:(nonnull GADAdLoader *)adLoader didReceiveNativeAd:(nonnull GAD
194194
for (id<AdListener> listener in [attachedAdListeners copy]){
195195
[listener didAdLoaded:nativeAd];
196196
}
197+
[EventEmitter.sharedInstance sendEvent:[CacheManager EVENT_AD_PRELOAD_LOADED:_name] dict:nil];
197198

198199
if (loadingAdRequestCount == 0){
199200
[self fillAds];//fill up repository if need
200201
}
201202
// The adLoader has finished loading ads, and a new request can be sent.
202203
}
203204

205+
- (void)nativeAdDidRecordClick:(GADNativeAd *)nativeAd {
206+
[EventEmitter.sharedInstance sendEvent:[CacheManager EVENT_AD_CLICKED:_name] dict:nil];
207+
}
208+
209+
- (void)nativeAdDidRecordImpression:(GADNativeAd *)nativeAd {
210+
[EventEmitter.sharedInstance sendEvent:[CacheManager EVENT_AD_IMPRESSION:_name] dict:nil];
211+
}
212+
213+
- (void)nativeAdWillPresentScreen:(GADNativeAd *)nativeAd {
214+
[EventEmitter.sharedInstance sendEvent:[CacheManager EVENT_AD_OPEN:_name] dict:nil];
215+
}
216+
217+
- (void)nativeAdDidDismissScreen:(GADNativeAd *)nativeAd {
218+
[EventEmitter.sharedInstance sendEvent:[CacheManager EVENT_AD_CLOSED:_name] dict:nil];
219+
}
204220

205221
- (void)adLoader:(nonnull GADAdLoader *)adLoader didFailToReceiveAdWithError:(nonnull NSError *)error {
206222
if(_isMediationEnabled){
@@ -230,7 +246,8 @@ - (void)adLoader:(nonnull GADAdLoader *)adLoader didFailToReceiveAdWithError:(no
230246
@"error":errorDic,
231247
};
232248

233-
[EventEmitter.sharedInstance sendEvent:CacheManager.EVENT_AD_PRELOAD_ERROR dict:event];
249+
[EventEmitter.sharedInstance sendEvent:[CacheManager EVENT_AD_PRELOAD_ERROR:_name] dict:event];
250+
234251
for (id<AdListener> listener in [attachedAdListeners copy]){
235252
[listener didFailToReceiveAdWithError:error];
236253
}
@@ -246,7 +263,7 @@ - (void)adLoader:(nonnull GADAdLoader *)adLoader didFailToReceiveAdWithError:(no
246263
NSDictionary *event = @{
247264
@"error":errorDic,
248265
};
249-
[EventEmitter.sharedInstance sendEvent:CacheManager.EVENT_AD_PRELOAD_ERROR dict:event];
266+
[EventEmitter.sharedInstance sendEvent:[CacheManager EVENT_AD_PRELOAD_ERROR:_name] dict:event];
250267
for (id<AdListener> listener in [attachedAdListeners copy]){
251268
[listener didFailToReceiveAdWithError:error];
252269
}

ios/RNAdMobManager/RNGADNativeView.m

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,12 @@ - (void)setTargetingOptions:(NSDictionary *)targetingOptions {
106106
NSArray *allKeys = [targetingOptions allKeys];
107107

108108
if ([allKeys containsObject:@"targets"]) {
109-
[adRequest setCustomTargeting:(NSDictionary *) [targetingOptions objectForKey:@"targets"]];
109+
NSArray *array = [targetingOptions objectForKey:@"targets"];
110+
NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
111+
for (NSDictionary *object in array) {
112+
[dic setValue:[object valueForKey:@"key"] forKey:[object valueForKey:@"value"]];
113+
}
114+
[adRequest setCustomTargeting:dic];
110115
}
111116

112117
if ([allKeys containsObject:@"categoryExclusions"]) {

ios/RNAdMobManager/UnifiedNativeAdLoadedListener.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ - (void)adLoader:(nonnull GADAdLoader *)adLoader didReceiveNativeAd:(nonnull GAD
4141

4242
NSMutableDictionary* args = [[NSMutableDictionary alloc] init];
4343
[args setObject:[NSNumber numberWithInteger:_nativeAds.count] forKey:_repo];
44-
[EventEmitter.sharedInstance sendEvent:CacheManager.EVENT_AD_PRELOAD_LOADED dict:args];
44+
[EventEmitter.sharedInstance sendEvent:[CacheManager EVENT_AD_PRELOAD_LOADED:_repo] dict:args];
4545
}
4646

4747
- (void)adLoader:(nonnull GADAdLoader *)adLoader didFailToReceiveAdWithError:(nonnull NSError *)error {

src/AdManager.js

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import {NativeModules} from 'react-native';
2-
import { AdOptions } from './utils';
1+
import { DeviceEventEmitter, NativeModules } from "react-native";
2+
import { AdOptions } from "./utils";
33

44
const RNAdmobNativeAdsManager = NativeModules.RNAdmobNativeAdsManager;
55

@@ -12,8 +12,10 @@ async function isTestDevice() {
1212
}
1313

1414
function registerRepository(config) {
15-
config.mediaAspectRatio = AdOptions.mediaAspectRatio[config.mediaAspectRatio || "unknown"];
16-
config.adChoicesPlacement = AdOptions.adChoicesPlacement[config.adChoicesPlacement || "topRight"];
15+
config.mediaAspectRatio =
16+
AdOptions.mediaAspectRatio[config.mediaAspectRatio || "unknown"];
17+
config.adChoicesPlacement =
18+
AdOptions.adChoicesPlacement[config.adChoicesPlacement || "topRight"];
1719
return RNAdmobNativeAdsManager.registerRepository(config);
1820
}
1921

@@ -29,11 +31,16 @@ async function resetCache() {
2931
return RNAdmobNativeAdsManager.resetCache();
3032
}
3133

34+
function subscribe(repo, eventName, listener) {
35+
return DeviceEventEmitter.addListener(`${eventName}:${repo}`, listener);
36+
}
37+
3238
export default {
3339
setRequestConfiguration,
3440
isTestDevice,
3541
registerRepository,
3642
hasAd,
3743
unRegisterRepository,
3844
resetCache,
39-
}
45+
subscribe,
46+
};

0 commit comments

Comments
 (0)