diff --git a/ios/RNGoogleMobileAds/RNGoogleMobileAdsMediaView.mm b/ios/RNGoogleMobileAds/RNGoogleMobileAdsMediaView.mm index 7194fff3..267d4eec 100644 --- a/ios/RNGoogleMobileAds/RNGoogleMobileAdsMediaView.mm +++ b/ios/RNGoogleMobileAds/RNGoogleMobileAdsMediaView.mm @@ -52,11 +52,9 @@ @implementation RNGoogleMobileAdsMediaView { - (instancetype)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { - static const auto defaultProps = std::make_shared(); + static const auto defaultProps = std::make_shared(); _props = defaultProps; - _bridge = [RCTBridge currentBridge]; - _nativeModule = [_bridge moduleForClass:RNGoogleMobileAdsNativeModule.class]; _mediaView = [[GADMediaView alloc] init]; _contentMode = UIViewContentModeScaleAspectFill; self.contentView = _mediaView; @@ -110,9 +108,17 @@ - (instancetype)initWithBridge:(RCTBridge *)bridge { #pragma mark - Common logics +- (RNGoogleMobileAdsNativeModule *)resolveNativeModule { + RCTBridge *bridge = [RCTBridge currentBridge]; + if (bridge) { + return [bridge moduleForClass:RNGoogleMobileAdsNativeModule.class]; + } + return [RNGoogleMobileAdsNativeModule sharedInstance]; +} + - (void)setResponseId:(NSString *)responseId { _responseId = responseId; - GADNativeAd *nativeAd = [_nativeModule nativeAdForResponseId:responseId]; + GADNativeAd *nativeAd = [[self resolveNativeModule] nativeAdForResponseId:responseId]; _mediaView.mediaContent = nativeAd.mediaContent; _mediaView.contentMode = _contentMode; } diff --git a/ios/RNGoogleMobileAds/RNGoogleMobileAdsNativeModule.h b/ios/RNGoogleMobileAds/RNGoogleMobileAdsNativeModule.h index b3c2de29..86716868 100644 --- a/ios/RNGoogleMobileAds/RNGoogleMobileAdsNativeModule.h +++ b/ios/RNGoogleMobileAds/RNGoogleMobileAdsNativeModule.h @@ -30,6 +30,7 @@ @interface RNGoogleMobileAdsNativeModule : RCTEventEmitter #endif ++ (instancetype)sharedInstance; - (GADNativeAd *)nativeAdForResponseId:(NSString *)responseId; @end diff --git a/ios/RNGoogleMobileAds/RNGoogleMobileAdsNativeModule.mm b/ios/RNGoogleMobileAds/RNGoogleMobileAdsNativeModule.mm index 68668a60..42440ec2 100644 --- a/ios/RNGoogleMobileAds/RNGoogleMobileAdsNativeModule.mm +++ b/ios/RNGoogleMobileAds/RNGoogleMobileAdsNativeModule.mm @@ -59,9 +59,16 @@ - (dispatch_queue_t)methodQueue { } #endif +static __weak RNGoogleMobileAdsNativeModule *_sharedInstance = nil; + ++ (instancetype)sharedInstance { + return _sharedInstance; +} + - (instancetype)init { if (self = [super init]) { _adHolders = [NSMutableDictionary dictionary]; + _sharedInstance = self; } return self; } diff --git a/ios/RNGoogleMobileAds/RNGoogleMobileAdsNativeView.mm b/ios/RNGoogleMobileAds/RNGoogleMobileAdsNativeView.mm index 1178da1c..67607229 100644 --- a/ios/RNGoogleMobileAds/RNGoogleMobileAdsNativeView.mm +++ b/ios/RNGoogleMobileAds/RNGoogleMobileAdsNativeView.mm @@ -57,8 +57,6 @@ - (instancetype)initWithFrame:(CGRect)frame { static const auto defaultProps = std::make_shared(); _props = defaultProps; - _bridge = [RCTBridge currentBridge]; - _nativeModule = [_bridge moduleForClass:RNGoogleMobileAdsNativeModule.class]; _nativeAdView = [[GADNativeAdView alloc] init]; self.contentView = _nativeAdView; } @@ -137,9 +135,17 @@ - (instancetype)initWithBridge:(RCTBridge *)bridge { #pragma mark - Common logics +- (RNGoogleMobileAdsNativeModule *)resolveNativeModule { + RCTBridge *bridge = [RCTBridge currentBridge]; + if (bridge) { + return [bridge moduleForClass:RNGoogleMobileAdsNativeModule.class]; + } + return [RNGoogleMobileAdsNativeModule sharedInstance]; +} + - (void)setResponseId:(NSString *)responseId { _responseId = responseId; - _nativeAd = [_nativeModule nativeAdForResponseId:responseId]; + _nativeAd = [[self resolveNativeModule] nativeAdForResponseId:responseId]; [self reloadAd]; }