Skip to content

Commit

Permalink
Added xcprivacy
Browse files Browse the repository at this point in the history
Added BE configurable timeouts
Added utcOffset to events
Added heartbeat game event
Video playback improvements
Fixed banner impression callbacks
  • Loading branch information
TrevenNefta committed Apr 8, 2024
1 parent 1da7e16 commit b1536d6
Show file tree
Hide file tree
Showing 31 changed files with 7,269 additions and 4,009 deletions.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
186 changes: 122 additions & 64 deletions Assets/NeftaCustomAdapter/Plugins/iOS/ALNeftaMediationAdapter.m
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,34 @@
#import "ALNeftaMediationAdapter.h"
#import <AppLovinSDK/MAAdapterDelegate.h>

@interface MListener : NSObject
@property (nonatomic, strong) NSString* placementId;
@property (nonatomic) int state;
@property (nonatomic, strong) id<MAAdapterDelegate> listener;
-(instancetype)initWithId:(NSString *)placementId listener:(id<MAAdapterDelegate>)listener;
@end
@implementation MListener
-(instancetype)initWithId:(NSString *)placementId listener:(id<MAAdapterDelegate>)listener {
self = [super init];
if (self) {
_placementId = placementId;
_state = 0;
_listener = listener;
}
return self;
}
@end

@interface ALNeftaMediationAdapter ()

@end

@implementation ALNeftaMediationAdapter

static NeftaPlugin_iOS *_plugin;
static NSMutableDictionary<NSString *, id<MAAdapterDelegate>> *_listeners;
static NSMutableArray *_listeners;
static ALNeftaMediationAdapter *_lastBanner;

id<MAAdViewAdapterDelegate> _bL;
NSString* _placementId;

- (void)initializeWithParameters:(id<MAAdapterInitializationParameters>)parameters completionHandler:(void (^)(MAAdapterInitializationStatus, NSString *_Nullable))completionHandler {
Expand All @@ -25,74 +44,104 @@ - (void)initializeWithParameters:(id<MAAdapterInitializationParameters>)paramete
} else {
NSString *appId = parameters.serverParameters[@"app_id"];

[NeftaPlugin_iOS EnableLogging: true];
_plugin = [NeftaPlugin_iOS InitWithAppId: appId];

_listeners = [[NSMutableDictionary alloc] init];
_listeners = [NSMutableArray array];

_plugin.OnLoadFail = ^(Placement *placement, NSString *error) {
id<MAAdapterDelegate> listener = _listeners[placement._id];
if (placement._type == TypesBanner) {
[((id<MAAdViewAdapterDelegate>)listener) didFailToLoadAdViewAdWithError: MAAdapterError.unspecified];
} else if (placement._type == TypesInterstitial) {
[((id<MAInterstitialAdapterDelegate>)listener) didFailToLoadInterstitialAdWithError: MAAdapterError.unspecified];
} else if (placement._type == TypesRewardedVideo) {
[((id<MARewardedAdapterDelegate>)listener) didFailToLoadRewardedAdWithError: MAAdapterError.unspecified];
for (int i = 0; i < _listeners.count; i++) {
MListener *ml = _listeners[i];
if ([ml.placementId isEqualToString: placement._id] && ml.state == 0) {
if (placement._type == TypesBanner) {
[((id<MAAdViewAdapterDelegate>)ml.listener) didFailToLoadAdViewAdWithError: MAAdapterError.unspecified];
} else if (placement._type == TypesInterstitial) {
[((id<MAInterstitialAdapterDelegate>)ml.listener) didFailToLoadInterstitialAdWithError: MAAdapterError.unspecified];
} else if (placement._type == TypesRewardedVideo) {
[((id<MARewardedAdapterDelegate>)ml.listener) didFailToLoadRewardedAdWithError: MAAdapterError.unspecified];
}
[_listeners removeObject:ml];
return;
}
}
[_listeners removeObjectForKey: placement._id];
};
_plugin.OnLoad = ^(Placement *placement) {
id<MAAdapterDelegate> listener = _listeners[placement._id];
if (placement._type == TypesBanner) {
dispatch_async(dispatch_get_main_queue(), ^{
placement._isManualPosition = true;
UIView *v = [_plugin GetViewForPlacement: placement show: true];
[((id<MAAdViewAdapterDelegate>)listener) didLoadAdForAdView: v];
});
} else if (placement._type == TypesInterstitial) {
[((id<MAInterstitialAdapterDelegate>)listener) didLoadInterstitialAd];
} else if (placement._type == TypesRewardedVideo) {
[((id<MARewardedAdapterDelegate>)listener) didLoadRewardedAd];
for (int i = 0; i < _listeners.count; i++) {
MListener *ml = _listeners[i];
if ([ml.placementId isEqualToString: placement._id] && ml.state == 0) {
ml.state = 1;
MListener *ml = _listeners[i];
if (placement._type == TypesBanner) {
placement._isManualPosition = true;
UIView *v = [_plugin GetViewForPlacement: placement show: true];
[((id<MAAdViewAdapterDelegate>)ml.listener) didLoadAdForAdView: v];
} else if (placement._type == TypesInterstitial) {
[((id<MAInterstitialAdapterDelegate>)ml.listener) didLoadInterstitialAd];
} else if (placement._type == TypesRewardedVideo) {
[((id<MARewardedAdapterDelegate>)ml.listener) didLoadRewardedAd];
}
return;
}
}
};
_plugin.OnShow = ^(Placement *placement, NSInteger width, NSInteger height) {
id<MAAdapterDelegate> listener = _listeners[placement._id];
if (placement._type == TypesBanner) {
[((id<MAAdViewAdapterDelegate>)listener) didDisplayAdViewAd];
} else if (placement._type == TypesInterstitial) {
[((id<MAInterstitialAdapterDelegate>)listener) didDisplayInterstitialAd];
} else if (placement._type == TypesRewardedVideo) {
[((id<MARewardedAdapterDelegate>)listener) didDisplayRewardedAd];
[((id<MARewardedAdapterDelegate>)listener) didStartRewardedAdVideo];
for (int i = 0; i < _listeners.count; i++) {
MListener *ml = _listeners[i];
if ([ml.placementId isEqualToString: placement._id] && ml.state == 1) {
ml.state = 2;
if (placement._type == TypesBanner) {
[((id<MAAdViewAdapterDelegate>)ml.listener) didDisplayAdViewAd];
} else if (placement._type == TypesInterstitial) {
[((id<MAInterstitialAdapterDelegate>)ml.listener) didDisplayInterstitialAd];
} else if (placement._type == TypesRewardedVideo) {
[((id<MARewardedAdapterDelegate>)ml.listener) didDisplayRewardedAd];
[((id<MARewardedAdapterDelegate>)ml.listener) didStartRewardedAdVideo];
}
return;
}
}
};
_plugin.OnClick = ^(Placement *placement) {
id<MAAdapterDelegate> listener = _listeners[placement._id];
if (placement._type == TypesBanner) {
[((id<MAAdViewAdapterDelegate>)listener) didClickAdViewAd];
} else if (placement._type == TypesInterstitial) {
[((id<MAInterstitialAdapterDelegate>)listener) didClickInterstitialAd];
} else if (placement._type == TypesRewardedVideo) {
[((id<MARewardedAdapterDelegate>)listener) didClickRewardedAd];
for (int i = 0; i < _listeners.count; i++) {
MListener *ml = _listeners[i];
if ([ml.placementId isEqualToString: placement._id] && ml.state == 2) {
if (placement._type == TypesBanner) {
[((id<MAAdViewAdapterDelegate>) ml.listener) didClickAdViewAd];
} else if (placement._type == TypesInterstitial) {
[((id<MAInterstitialAdapterDelegate>) ml.listener) didClickInterstitialAd];
} else if (placement._type == TypesRewardedVideo) {
[((id<MARewardedAdapterDelegate>) ml.listener) didClickRewardedAd];
}
return;
}
}
};
_plugin.OnReward = ^(Placement *placement) {
id<MARewardedAdapterDelegate> listener = (id<MARewardedAdapterDelegate>) _listeners[placement._id];
if (listener != nil) {
[listener didCompleteRewardedAdVideo];
for (int i = 0; i < _listeners.count; i++) {
MListener *ml = _listeners[i];
if ([ml.placementId isEqualToString: placement._id] && ml.state == 2) {
id<MARewardedAdapterDelegate> listener = (id<MARewardedAdapterDelegate>)ml.listener;
[listener didCompleteRewardedAdVideo];
return;
}
}
};
_plugin.OnClose = ^(Placement *placement) {
id<MAAdapterDelegate> listener = _listeners[placement._id];
if (placement._type == TypesBanner) {
[((id<MAAdViewAdapterDelegate>)listener) didCollapseAdViewAd];
[((id<MAAdViewAdapterDelegate>)listener) didHideAdViewAd];
} else if (placement._type == TypesInterstitial) {
[((id<MAInterstitialAdapterDelegate>)listener) didHideInterstitialAd];
} else if (placement._type == TypesRewardedVideo) {
[((id<MARewardedAdapterDelegate>)listener) didHideRewardedAd];
for (int i = 0; i < _listeners.count; i++) {
MListener *ml = _listeners[i];
if ([ml.placementId isEqualToString: placement._id] && ml.state == 2) {
if (placement._type == TypesBanner) {
id<MAAdViewAdapterDelegate> bannerListener = (id<MAAdViewAdapterDelegate>)ml.listener;
[bannerListener didCollapseAdViewAd];
[bannerListener didHideAdViewAd];
} else if (placement._type == TypesInterstitial) {
[((id<MAInterstitialAdapterDelegate>)ml.listener) didHideInterstitialAd];
} else if (placement._type == TypesRewardedVideo) {
[((id<MARewardedAdapterDelegate>)ml.listener) didHideRewardedAd];
}
[_listeners removeObject: ml];
return;
}
}
[_listeners removeObjectForKey: placement._id];
};

[_plugin EnableAds: true];
Expand All @@ -106,34 +155,43 @@ - (NSString *)SDKVersion {
}

- (NSString *)adapterVersion {
return @"1.1.6";
return @"1.1.7";
}

- (void)destroy {
if (_placementId != nil) {
bool isLastBanner = _lastBanner == self;
if (_bL == nil || isLastBanner) {
[_plugin CloseWithId: _placementId];
_placementId = nil;
if (isLastBanner) {
_lastBanner = nil;
}
} else {
[_bL didCollapseAdViewAd];
[_bL didHideAdViewAd];
}
}

- (void)loadAdViewAdForParameters:(id<MAAdapterResponseParameters>)parameters adFormat:(MAAdFormat *)adFormat andNotify:(id<MAAdViewAdapterDelegate>)delegate {
NSString *pid = parameters.thirdPartyAdPlacementIdentifier;
_listeners[pid] = delegate;
_placementId = parameters.thirdPartyAdPlacementIdentifier;
[ALNeftaMediationAdapter ApplyRenderer: parameters];

[_plugin LoadWithId: pid];
_bL = delegate;
_lastBanner = self;
MListener *listener = [[MListener alloc] initWithId: _placementId listener: delegate];
[_listeners addObject: listener];
[_plugin LoadWithId: _placementId];
}

- (void)loadInterstitialAdForParameters:(id<MAAdapterResponseParameters>)parameters andNotify:(id<MAInterstitialAdapterDelegate>)delegate {
NSString *pid = parameters.thirdPartyAdPlacementIdentifier;
_listeners[pid] = delegate;
_placementId = parameters.thirdPartyAdPlacementIdentifier;
[ALNeftaMediationAdapter ApplyRenderer: parameters];

[_plugin LoadWithId: pid];
MListener *listener = [[MListener alloc] initWithId: _placementId listener: delegate];
[_listeners addObject: listener];
[_plugin LoadWithId: _placementId];
}

- (void)showInterstitialAdForParameters:(id<MAAdapterResponseParameters>)parameters andNotify:(id<MAInterstitialAdapterDelegate>)delegate {
_placementId = parameters.thirdPartyAdPlacementIdentifier;
if (![_plugin IsReadyWithId: _placementId]) {
[delegate didFailToDisplayInterstitialAdWithError: MAAdapterError.adNotReady];
return;
Expand All @@ -143,15 +201,15 @@ - (void)showInterstitialAdForParameters:(id<MAAdapterResponseParameters>)paramet
}

- (void)loadRewardedAdForParameters:(id<MAAdapterResponseParameters>)parameters andNotify:(id<MARewardedAdapterDelegate>)delegate {
NSString *pid = parameters.thirdPartyAdPlacementIdentifier;
_placementId = parameters.thirdPartyAdPlacementIdentifier;
[ALNeftaMediationAdapter ApplyRenderer: parameters];

_listeners[pid] = delegate;
[_plugin LoadWithId: pid];
MListener *listener = [[MListener alloc] initWithId: _placementId listener: delegate];
[_listeners addObject: listener];
[_plugin LoadWithId: _placementId];
}

- (void)showRewardedAdForParameters:(id<MAAdapterResponseParameters>)parameters andNotify:(id<MARewardedAdapterDelegate>)delegate {
_placementId = parameters.thirdPartyAdPlacementIdentifier;
if (![_plugin IsReadyWithId: _placementId]) {
[delegate didFailToLoadRewardedAdWithError: MAAdapterError.adNotReady];
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,41 +7,41 @@
<dict>
<key>BinaryPath</key>
<string>NeftaSDK.framework/NeftaSDK</string>
<key>DebugSymbolsPath</key>
<string>dSYMs</string>
<key>LibraryIdentifier</key>
<string>ios-arm64_x86_64-simulator</string>
<string>ios-arm64</string>
<key>LibraryPath</key>
<string>NeftaSDK.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
<string>x86_64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
<key>SupportedPlatformVariant</key>
<string>simulator</string>
</dict>
<dict>
<key>BinaryPath</key>
<string>NeftaSDK.framework/NeftaSDK</string>
<key>DebugSymbolsPath</key>
<string>dSYMs</string>
<key>LibraryIdentifier</key>
<string>ios-arm64</string>
<string>ios-arm64_x86_64-simulator</string>
<key>LibraryPath</key>
<string>NeftaSDK.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
<string>x86_64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
<key>SupportedPlatformVariant</key>
<string>simulator</string>
</dict>
</array>
<key>CFBundlePackageType</key>
<string>XFWK</string>
<key>Version</key>
<string>3.2.6</string>
<string>3.2.7</string>
<key>XCFrameworkFormatVersion</key>
<string>1.0</string>
</dict>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -413,8 +413,10 @@ typedef SWIFT_ENUM(NSInteger, SpendMethod, open) {
};

typedef SWIFT_ENUM(NSInteger, SessionCategory, open) {
SessionCategoryAccountConnected = 0,
SessionCategoryAccountUpgraded = 1,
SessionCategorySessionStart = 0,
SessionCategoryAccountConnected = 1,
SessionCategoryAccountUpgraded = 2,
SessionCategoryHeartbeat = 3,
};

@class Placement;
Expand Down Expand Up @@ -506,7 +508,6 @@ SWIFT_CLASS("_TtC8NeftaSDK9Placement")
@property (nonatomic) NSUInteger _bidTime;
@property (nonatomic) NSUInteger _loadTime;
@property (nonatomic) NSUInteger _showTime;
@property (nonatomic) NSUInteger _timeSinceFailedLoad;
@property (nonatomic) BOOL _isHidden;
@property (nonatomic) BOOL _isManualPosition;
- (BOOL)IsBidding SWIFT_WARN_UNUSED_RESULT;
Expand Down

0 comments on commit b1536d6

Please sign in to comment.