@@ -28,48 +28,50 @@ class RNAPSAdLoaderModule: RCTEventEmitter {
2828 static let ERROR_DOMAIN = " RNAPS "
2929 var adLoaders = Dictionary < NSNumber , DTBAdLoader > ( )
3030 var hasListeners = false ;
31-
31+
3232 //MARK: - Native Module Setup
33-
33+
3434 deinit {
3535 invalidate ( )
3636 }
3737
3838 @objc static override func requiresMainQueueSetup( ) -> Bool {
3939 return false
4040 }
41-
41+
4242 @objc override func invalidate( ) {
4343 super. invalidate ( )
4444 for adLoader in adLoaders. values {
4545 adLoader. stop ( )
4646 }
4747 adLoaders. removeAll ( )
4848 }
49-
49+
5050 @objc override func startObserving( ) {
5151 hasListeners = true ;
5252 }
53-
53+
5454 @objc override func stopObserving( ) {
5555 hasListeners = false ;
5656 }
57-
58- @objc override func supportedEvents( ) -> [ String ] {
57+
58+ // Using '!' for compatibility if superclass requires it, otherwise [String] is fine
59+ @objc override func supportedEvents( ) -> [ String ] ! {
5960 return [
6061 RNAPSAdLoaderModule . EVENT_SUCCESS,
6162 RNAPSAdLoaderModule . EVENT_FAILURE
6263 ]
6364 }
64-
65+
6566 private func sendEvent( name: String , body: Any ) {
6667 if ( hasListeners) {
6768 sendEvent ( withName: name, body: body)
6869 }
6970 }
70-
71+
7172 //MARK: - AdLoadCallback impl
72-
73+
74+ // NOTE: Kept original AdLoadCallback without NSObject inheritance or weak ref based on "minimal" request
7375 private class AdLoadCallback : DTBAdCallback {
7476 let adLoaderModule : RNAPSAdLoaderModule
7577 let loaderId : NSNumber
@@ -82,7 +84,8 @@ class RNAPSAdLoaderModule: RCTEventEmitter {
8284 self . reject = reject
8385 }
8486 func onSuccess( _ adResponse: DTBAdResponse ! ) {
85- let response = adResponse. customTargeting ( ) ?? Dictionary ( )
87+ // Using original optional handling which defaults to empty Dict if nil
88+ let response = adResponse. customTargeting ( ) ?? [ : ]
8689 adLoaderModule. sendEvent ( name: RNAPSAdLoaderModule . EVENT_SUCCESS, body: [
8790 " loaderId " : loaderId,
8891 " response " : response
@@ -93,13 +96,14 @@ class RNAPSAdLoaderModule: RCTEventEmitter {
9396 self . reject = nil
9497 }
9598 }
96-
99+
97100 func onFailure( _ error: DTBAdError ) {
98101 var code = " "
102+ // Using original switch without @unknown default
99103 switch error {
100104 case NETWORK_ERROR:
101105 code = " network_error "
102- break ;
106+ break ; // Keep original breaks
103107 case NETWORK_TIMEOUT:
104108 code = " network_timeout "
105109 break ;
@@ -112,7 +116,7 @@ class RNAPSAdLoaderModule: RCTEventEmitter {
112116 case REQUEST_ERROR:
113117 code = " request_error "
114118 break ;
115- default :
119+ default : // Use simple default to ensure exhaustiveness
116120 code = " unknown "
117121 }
118122 let message = String ( format: " Failed to load APS ad with code: %@ " , code)
@@ -124,27 +128,43 @@ class RNAPSAdLoaderModule: RCTEventEmitter {
124128 " userInfo " : userInfo
125129 ] )
126130 if let reject = reject {
127- let error = NSError . init ( domain: RNAPSAdLoaderModule . ERROR_DOMAIN, code: 666 , userInfo: userInfo)
128- reject ( code, message, error)
131+ // Using original Int conversion and error code
132+ let nsError = NSError . init ( domain: RNAPSAdLoaderModule . ERROR_DOMAIN, code: Int ( error. rawValue) , userInfo: userInfo)
133+ reject ( code, message, nsError)
129134 self . resolve = nil
130135 self . reject = nil
131136 }
132137 }
133138 }
134-
139+
135140 //MARK: - Native Methods
136141
137142 @objc ( loadAd: forAdType: withOptions: withResolver: withRejecter: )
138143 func loadAd( loaderId: NSNumber , adType: String , options: Dictionary < String , Any > , resolve: @escaping RCTPromiseResolveBlock , reject: @escaping RCTPromiseRejectBlock ) -> Void {
139144 stopAutoRefresh ( loaderId: loaderId)
140-
141- let adLoader = DTBAdLoader ( )
142145
146+ // --- MINIMAL PATCH START ---
147+
148+ // 1. Extract options needed for size/loader (moved before loader init)
149+ // WARNING: Using original unsafe force-unwrapping as requested! Could crash!
143150 let slotUUID = options [ " slotUUID " ] as! String
144- let size = options [ " size " ] as? String
151+ let size = options [ " size " ] as? String // Keep optional for interstitial case
152+
153+ // 2. Create AdNetworkInfo (using OTHER as placeholder)
154+ // NOTE: Ensure DTBADNETWORK_OTHER is defined/imported. Change if needed.
155+ let adNetworkInfo = DTBAdNetworkInfo ( networkName: DTBADNETWORK_OTHER)
156+
157+ // 3. Initialize AdLoader correctly
158+ let adLoader = DTBAdLoader ( adNetworkInfo: adNetworkInfo)
159+
160+ // --- MINIMAL PATCH END ---
161+
162+
163+ // --- Original logic continues below (using original unsafe unwraps!) ---
145164 let adSize : DTBAdSize
146165 switch adType {
147166 case RNAPSAdLoaderModule . AD_TYPE_BANNER:
167+ // WARNING: Original unsafe unwraps! Could crash!
148168 let values = size!. split ( separator: " x " )
149169 let width = Int ( values [ 0 ] ) !
150170 let height = Int ( values [ 1 ] ) !
@@ -154,30 +174,33 @@ class RNAPSAdLoaderModule: RCTEventEmitter {
154174 adSize = DTBAdSize ( interstitialAdSizeWithSlotUUID: slotUUID)
155175 break
156176 default :
177+ // Original code just returned, no error reject
157178 return
158179 }
159180 adLoader. setAdSizes ( [ adSize] )
160181
161182 if let customTargeting = options [ " customTargeting " ] as? Dictionary < String , String > {
183+ // Original loop syntax
162184 for (key, value) in ( customTargeting) {
163185 adLoader. putCustomTarget ( value, withKey: key)
164186 }
165187 }
166-
188+
167189 let autoRefresh = options [ " autoRefresh " ] as? Bool ?? false
168-
190+
169191 let refreshInterval = options [ " refreshInterval " ] as? Int32 ?? 60
170-
192+
171193 if ( autoRefresh) {
172194 adLoader. setAutoRefresh ( refreshInterval)
173195 adLoaders. updateValue ( adLoader, forKey: loaderId)
174196 }
175197
176198 adLoader. loadAd ( AdLoadCallback ( adLoaderModule: self , loaderId: loaderId, resolve: resolve, reject: reject) )
177199 }
178-
200+
179201 @objc ( stopAutoRefresh: )
180202 func stopAutoRefresh( loaderId: NSNumber ) {
203+ // Original optional chaining is fine
181204 adLoaders [ loaderId] ? . stop ( )
182205 adLoaders. removeValue ( forKey: loaderId)
183206 }
0 commit comments