Files
Golf2D/Assets/Plugins/iOS/Appodeal/AppodealObjCBridge.m
2023-12-06 14:51:43 +05:30

530 lines
22 KiB
Objective-C

#if defined(__has_include) && __has_include("UnityAppController.h")
#import "UnityAppController.h"
#else
#import "EmptyUnityAppController.h"
#endif
#import <Appodeal/Appodeal.h>
#import <StackConsentManager/StackConsentManager.h>
#import "AppodealUnityMrecView.h"
#import "AppodealUnityBannerView.h"
#import "AppodealBannerDelegate.h"
#import "AppodealMrecViewDelegate.h"
#import "AppodealBannerViewDelegate.h"
#import "AppodealInterstitialDelegate.h"
#import "AppodealRewardedVideoDelegate.h"
#import "AppodealAdRevenueDelegate.h"
#import "AppodealIAPValidationDelegate.h"
#import "AppodealInitializationDelegate.h"
static AppodealUnityMrecView *mrecUnity;
static AppodealUnityBannerView *bannerUnity;
UIViewController *RootViewController() {
return ((UnityAppController *)[UIApplication sharedApplication].delegate).rootViewController;
}
static NSDateFormatter *DateFormatter() {
static dispatch_once_t onceToken;
static NSDateFormatter *formatter;
dispatch_once(&onceToken, ^{
formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"dd/MM/yyyy";
});
return formatter;
}
static NSString *NSStringFromUTF8String(const char *bytes) {
return bytes ? @(bytes) : nil;
}
static NSDictionary <NSString *, id> *NSDictionaryFromUTF8String(const char *cString) {
NSString *string = [NSString stringWithUTF8String:cString];
if ([string length] == 0) return nil;
NSArray *pairs = [string componentsSeparatedByString:@","];
NSMutableDictionary <NSString *, id> *outputDict = [NSMutableDictionary dictionaryWithCapacity:pairs.count];
[pairs enumerateObjectsUsingBlock:^(NSString *pair, NSUInteger idx, BOOL *stop) {
NSArray <NSString *> *splited = [pair componentsSeparatedByString:@"="];
NSString *key = splited.firstObject;
NSString *value = splited.lastObject;
NSArray *valueSplitted = [value componentsSeparatedByString:@":"];
if (key) {
if ([valueSplitted.firstObject isEqualToString:@"System.Int32"]) {
outputDict[key] = @([valueSplitted.lastObject intValue]);
}
else if ([valueSplitted.firstObject isEqualToString:@"System.Double"]) {
outputDict[key] = @([valueSplitted.lastObject doubleValue]);
}
else if ([valueSplitted.firstObject isEqualToString:@"System.Boolean"]) {
outputDict[key] = @([valueSplitted.lastObject boolValue]);
}
else if ([valueSplitted.firstObject isEqualToString:@"System.String"]){
outputDict[key] = valueSplitted.lastObject;
}
}
}];
return outputDict;
}
void AppodealInitialize(const char *apiKey, int types, const char *pluginVer, const char *engineVer) {
[Appodeal setFramework:APDFrameworkUnity version: [NSString stringWithUTF8String:engineVer]];
[Appodeal setPluginVersion:[NSString stringWithUTF8String:pluginVer]];
[Appodeal initializeWithApiKey:[NSString stringWithUTF8String:apiKey] types:types];
}
BOOL AppodealIsInitialized(int types) {
return [Appodeal isInitializedForAdType:types];
}
BOOL AppodealShowAd(int style) {
return [Appodeal showAd:style rootViewController: RootViewController()];
}
BOOL AppodealShowAdforPlacement(int style, const char *placement) {
return [Appodeal showAd:style forPlacement:[NSString stringWithUTF8String:placement] rootViewController:RootViewController()];
}
BOOL AppodealShowBannerAdViewforPlacement(int YAxis, int XAxis, const char *placement) {
if (!bannerUnity) {
bannerUnity = [AppodealUnityBannerView sharedInstance];
}
[bannerUnity showBannerView:RootViewController() XAxis:XAxis YAxis:YAxis placement:[NSString stringWithUTF8String:placement]];
return false;
}
BOOL AppodealShowMrecAdViewforPlacement(int YAxis, int XAxis, const char *placement) {
if (!mrecUnity) {
mrecUnity = [AppodealUnityMrecView sharedInstance];
}
[mrecUnity showMrecView:RootViewController() XAxis:XAxis YAxis:YAxis placement:[NSString stringWithUTF8String:placement]];
return false;
}
BOOL AppodealIsReadyWithStyle(int style) {
return [Appodeal isReadyForShowWithStyle:style];
}
void AppodealCacheAd(int types) {
[Appodeal cacheAd:types];
}
void AppodealSetAutocache(BOOL autoCache, int types) {
[Appodeal setAutocache:autoCache types:types];
}
void AppodealHideBanner() {
[Appodeal hideBanner];
}
void AppodealHideBannerView() {
if (bannerUnity) {
[bannerUnity.bannerView removeFromSuperview];
}
}
void AppodealHideMrecView() {
if (mrecUnity) {
[mrecUnity.mrecView removeFromSuperview];
}
}
void AppodealSetSmartBanners(bool value) {
[Appodeal setSmartBannersEnabled:value];
}
BOOL AppodealIsSmartBannersEnabled() {
return [Appodeal isSmartBannersEnabled];
}
void AppodealSetTabletBanners(bool value) {
if (!bannerUnity) {
bannerUnity = [AppodealUnityBannerView sharedInstance];
}
if (value) {
[Appodeal setPreferredBannerAdSize:kAppodealUnitSize_728x90];
} else {
[Appodeal setPreferredBannerAdSize:kAppodealUnitSize_320x50];
}
[bannerUnity setTabletBanner:value];
}
void AppodealSetBannerAnimation(BOOL value) {
[Appodeal setBannerAnimationEnabled:value];
}
void AppodealSetBannerRotation(int leftBannerRotation, int rightBannerRotation) {
[Appodeal setBannerLeftRotationAngleDegrees:leftBannerRotation rightRotationAngleDegrees: rightBannerRotation];
}
void AppodealSetLogLevel(int level) {
switch (level) {
case 1:
[Appodeal setLogLevel:APDLogLevelOff];
break;
case 2:
[Appodeal setLogLevel:APDLogLevelDebug];
break;
case 3:
[Appodeal setLogLevel:APDLogLevelVerbose];
break;
default:
break;
}
}
void AppodealSetTestingEnabled(BOOL testingEnabled) {
[Appodeal setTestingEnabled:testingEnabled];
}
void AppodealSetChildDirectedTreatment(BOOL value) {
[Appodeal setChildDirectedTreatment:value];
}
void AppodealUpdateConsentReport() {
[Appodeal updateConsentReport:STKConsentManager.sharedManager.consent];
}
void AppodealUpdateGdprConsent(int consent) {
switch (consent) {
case 0:
[Appodeal updateUserConsentGDPR:APDGDPRUserConsentUnknown];
break;
case 1:
[Appodeal updateUserConsentGDPR:APDGDPRUserConsentPersonalized];
break;
case 2:
[Appodeal updateUserConsentGDPR:APDGDPRUserConsentNonPersonalized];
break;
default:
break;
}
}
void AppodealUpdateCcpaConsent(int consent) {
switch (consent) {
case 0:
[Appodeal updateUserConsentCCPA:APDCCPAUserConsentUnknown];
break;
case 1:
[Appodeal updateUserConsentCCPA:APDCCPAUserConsentOptIn];
break;
case 2:
[Appodeal updateUserConsentCCPA:APDCCPAUserConsentOptOut];
break;
default:
break;
}
}
char *AppodealGetNetworks(int types) {
NSArray<NSString *> *networksArray = [Appodeal registeredNetworkNamesForAdType:types];
NSString *networks = [[networksArray valueForKey:@"description"] componentsJoinedByString:@","];
const char *output = [networks UTF8String];
char *outputCopy = calloc([networks length]+1, 1);
return strncpy(outputCopy, output, [networks length]);
}
void AppodealDisableNetwork(const char *networkName) {
[Appodeal disableNetwork:[NSString stringWithUTF8String:networkName]];
}
void AppodealDisableNetworkForAdTypes(const char *networkName, int type) {
[Appodeal disableNetworkForAdType:type name:[NSString stringWithUTF8String:networkName]];
}
void AppodealSetLocationTracking(BOOL value) {
[Appodeal setLocationTracking:value];
}
void AppodealDisableLocationPermissionCheck() {
[Appodeal setLocationTracking:NO];
}
void AppodealSetTriggerPrecacheCallbacks(int types, bool value) {
[Appodeal setTriggerPrecacheCallbacks:value types:types];
}
char *AppodealGetVersion() {
const char *cString = [[Appodeal getVersion] UTF8String];
char *cStringCopy = calloc([[Appodeal getVersion] length]+1, 1);
return strncpy(cStringCopy, cString, [[Appodeal getVersion] length]);
}
long AppodealGetSegmentId() {
NSNumber *id = [Appodeal segmentId];
return [id longValue];
}
char *AppodealGetRewardCurrency(const char *placement) {
NSString *rewardCurrencyName = [[Appodeal rewardForPlacement:[NSString stringWithUTF8String:placement]] currencyName];
const char *cString = [rewardCurrencyName UTF8String];
char *cStringCopy = calloc([rewardCurrencyName length]+1, 1);
return strncpy(cStringCopy, cString, [rewardCurrencyName length]);
}
double AppodealGetRewardAmount(const char *placement) {
float rewardAmount = [[Appodeal rewardForPlacement:[NSString stringWithUTF8String:placement]] amount];
return (double)rewardAmount;
}
double AppodealGetPredictedEcpm(int types) {
return [Appodeal predictedEcpmForAdType:types];
}
double AppodealGetPredictedEcpmForPlacement(int adType, const char* placement) {
return [Appodeal predictedEcpmForAdType:adType placement:[NSString stringWithUTF8String:placement]];
}
BOOL AppodealCanShow(int style) {
return [Appodeal canShow:style forPlacement:@"default"];
}
BOOL AppodealCanShowWithPlacement(int style, const char *placement) {
return [Appodeal canShow:style forPlacement:[NSString stringWithUTF8String:placement]];
}
BOOL AppodealIsPrecacheAd(int adType) {
return [Appodeal isPrecacheAd:adType];
}
BOOL AppodealIsAutoCacheEnabled(int adType) {
return [Appodeal isAutocacheEnabled:adType];
}
void AppodealSetCustomFilterBool(const char *name, BOOL value) {
[Appodeal setCustomStateValue:[NSNumber numberWithBool:value] forKey:[NSString stringWithUTF8String:name]];
}
void AppodealSetCustomFilterInt(const char *name, int value) {
[Appodeal setCustomStateValue:[NSNumber numberWithInt:value] forKey:[NSString stringWithUTF8String:name]];
}
void AppodealSetCustomFilterDouble(const char *name, double value) {
[Appodeal setCustomStateValue:[NSNumber numberWithDouble:value] forKey:[NSString stringWithUTF8String:name]];
}
void AppodealSetCustomFilterString(const char *name, const char *value) {
[Appodeal setCustomStateValue:[NSString stringWithUTF8String:value] forKey:[NSString stringWithUTF8String:name]];
}
void AppodealResetCustomFilter(const char *name) {
[Appodeal setCustomStateValue:nil forKey:[NSString stringWithUTF8String:name]];
}
void AppodealSetExtraDataBool(const char *name, BOOL value) {
[Appodeal setExtrasValue:[NSNumber numberWithBool:value] forKey:[NSString stringWithUTF8String:name]];
}
void AppodealSetExtraDataInt(const char *name, int value) {
[Appodeal setExtrasValue:[NSNumber numberWithInt:value] forKey:[NSString stringWithUTF8String:name]];
}
void AppodealSetExtraDataDouble(const char *name, double value) {
[Appodeal setExtrasValue:[NSNumber numberWithDouble:value] forKey:[NSString stringWithUTF8String:name]];
}
void AppodealSetExtraDataString(const char *name, const char *value) {
[Appodeal setExtrasValue:[NSString stringWithUTF8String:value] forKey:[NSString stringWithUTF8String:name]];
}
void AppodealResetExtraData(const char *name) {
[Appodeal setExtrasValue:nil forKey:[NSString stringWithUTF8String:name]];
}
void AppodealTrackInAppPurchase(int amount, const char *currency) {
[[APDSdk sharedSdk] trackInAppPurchase:[NSNumber numberWithInt:amount] currency:[NSString stringWithUTF8String:currency]];
}
void AppodealSetUserId(const char *userid) {
[Appodeal setUserId:[NSString stringWithUTF8String:userid]];
}
char *AppodealGetUserId() {
const char *cString = [[Appodeal userId] UTF8String];
char *cStringCopy = calloc([[Appodeal userId] length]+1, 1);
return strncpy(cStringCopy, cString, [[Appodeal userId] length]);
}
void AppodealLogEvent(const char *eventName, const char *eventParams) {
[Appodeal trackEvent:NSStringFromUTF8String(eventName) customParameters:NSDictionaryFromUTF8String(eventParams)];
}
void AppodealValidateInAppPurchase(const char *productIdentifier,
const char *price,
const char *currency,
const char *transactionId,
const char *additionalParams,
int type,
InAppPurchaseValidationSucceededCallback success,
InAppPurchaseValidationFailedCallback failure) {
NSString *productIdString = NSStringFromUTF8String(productIdentifier);
NSString *priceString = NSStringFromUTF8String(price);
NSString *currencyString = NSStringFromUTF8String(currency);
NSString *transactionIdString = NSStringFromUTF8String(transactionId);
NSDictionary *additionalParamsDict = NSDictionaryFromUTF8String(additionalParams);
[Appodeal validateAndTrackInAppPurchase:productIdString
type:(APDPurchaseType)type
price:priceString
currency:[currencyString substringWithRange:NSMakeRange(0, MIN(5,currencyString.length))]
transactionId:transactionIdString
additionalParameters:additionalParamsDict
success:^(NSDictionary *data) {
NSData *jsonData;
NSError *jsonError;
jsonData = [NSJSONSerialization dataWithJSONObject:data
options:0
error:&jsonError];
if (jsonError) {
failure ? failure("Invalid response") : nil;
} else {
NSString *JSONString = [[NSString alloc] initWithBytes:jsonData.bytes
length:jsonData.length
encoding:NSUTF8StringEncoding];
success ? success(JSONString.UTF8String) : nil;
}
}
failure:^(NSError *error) {
NSString *errorString = (!error) ? @"unknown" : [NSString stringWithFormat:@"error: %@", error.localizedDescription];
failure ? failure(errorString.UTF8String) : nil;
}];
}
static AppodealInitializationDelegate *AppodealInitializationDelegateInstance;
void AppodealSetInitializationDelegate(AppodealInitializationCallback initializationCompleted) {
AppodealInitializationDelegateInstance = [AppodealInitializationDelegate new];
AppodealInitializationDelegateInstance.initializationCompletedCallback = initializationCompleted;
[Appodeal setInitializationDelegate:AppodealInitializationDelegateInstance];
}
static AppodealInterstitialDelegate *AppodealInterstitialDelegateInstance;
void AppodealSetInterstitialDelegate(AppodealInterstitialDidLoadCallback interstitialDidLoadAd,
AppodealInterstitialCallbacks interstitialDidFailToLoadAd,
AppodealInterstitialCallbacks interstitialDidFailToPresent,
AppodealInterstitialCallbacks interstitialWillPresent,
AppodealInterstitialCallbacks interstitialDidDismiss,
AppodealInterstitialCallbacks interstitialDidClick,
AppodealInterstitialCallbacks interstitialDidExpired) {
AppodealInterstitialDelegateInstance = [AppodealInterstitialDelegate new];
AppodealInterstitialDelegateInstance.interstitialDidLoadCallback = interstitialDidLoadAd;
AppodealInterstitialDelegateInstance.interstitialDidFailToLoadAdCallback = interstitialDidFailToLoadAd;
AppodealInterstitialDelegateInstance.interstitialDidFailToPresentCallback = interstitialDidFailToPresent;
AppodealInterstitialDelegateInstance.interstitialWillPresentCallback = interstitialWillPresent;
AppodealInterstitialDelegateInstance.interstitialDidDismissCallback = interstitialDidDismiss;
AppodealInterstitialDelegateInstance.interstitialDidClickCallback = interstitialDidClick;
AppodealInterstitialDelegateInstance.interstitialsDidExpiredCallback = interstitialDidExpired;
[Appodeal setInterstitialDelegate:AppodealInterstitialDelegateInstance];
}
static AppodealBannerDelegate *AppodealBannerDelegateInstance;
void AppodealSetBannerDelegate(AppodealBannerDidLoadCallback bannerDidLoadAd,
AppodealBannerCallbacks bannerDidFailToLoadAd,
AppodealBannerCallbacks bannerDidClick,
AppodealBannerCallbacks bannerDidExpired,
AppodealBannerCallbacks bannerDidShow,
AppodealBannerCallbacks bannerDidFailToPresent) {
AppodealBannerDelegateInstance = [AppodealBannerDelegate new];
AppodealBannerDelegateInstance.bannerDidLoadAdCallback = bannerDidLoadAd;
AppodealBannerDelegateInstance.bannerDidFailToLoadAdCallback = bannerDidFailToLoadAd;
AppodealBannerDelegateInstance.bannerDidClickCallback = bannerDidClick;
AppodealBannerDelegateInstance.bannerDidExpiredCallback = bannerDidExpired;
AppodealBannerDelegateInstance.bannerDidShowCallback = bannerDidShow;
AppodealBannerDelegateInstance.bannerDidFailToPresentCallback = bannerDidFailToPresent;
[Appodeal setBannerDelegate:AppodealBannerDelegateInstance];
}
static AppodealBannerViewDelegate *AppodealBannerViewDelegateInstance;
void AppodealSetBannerViewDelegate(AppodealBannerViewDidLoadCallback bannerViewDidLoadAd,
AppodealBannerViewCallbacks bannerViewDidFailToLoadAd,
AppodealBannerViewCallbacks bannerViewDidClick,
AppodealBannerViewCallbacks bannerViewDidShow,
AppodealBannerViewCallbacks bannerViewDidFailToPresent,
AppodealBannerViewCallbacks bannerViewDidExpired) {
AppodealBannerViewDelegateInstance = [AppodealBannerViewDelegate new];
AppodealBannerViewDelegateInstance.bannerViewDidLoadAdCallback = bannerViewDidLoadAd;
AppodealBannerViewDelegateInstance.bannerViewDidFailToLoadAdCallback = bannerViewDidFailToLoadAd;
AppodealBannerViewDelegateInstance.bannerViewDidClickCallback = bannerViewDidClick;
AppodealBannerViewDelegateInstance.bannerViewDidShowCallback = bannerViewDidShow;
AppodealBannerViewDelegateInstance.bannerViewDidFailToPresentCallback = bannerViewDidFailToPresent;
AppodealBannerViewDelegateInstance.bannerViewDidExpiredCallback = bannerViewDidExpired;
if(!bannerUnity) {
bannerUnity = [AppodealUnityBannerView sharedInstance];
}
[bannerUnity.bannerView setDelegate:AppodealBannerViewDelegateInstance];
}
static AppodealMrecViewDelegate *AppodealMrecViewDelegateInstance;
void AppodealSetMrecViewDelegate(AppodealMrecViewDidLoadCallback mrecViewDidLoadAd,
AppodealMrecViewCallbacks mrecViewDidFailToLoadAd,
AppodealMrecViewCallbacks mrecViewDidClick,
AppodealMrecViewCallbacks mrecViewDidShow,
AppodealMrecViewCallbacks mrecViewDidFailToPresent,
AppodealMrecViewCallbacks mrecViewDidExpired) {
AppodealMrecViewDelegateInstance = [AppodealMrecViewDelegate new];
AppodealMrecViewDelegateInstance.mrecViewDidLoadAdCallback = mrecViewDidLoadAd;
AppodealMrecViewDelegateInstance.mrecViewDidFailToLoadAdCallback = mrecViewDidFailToLoadAd;
AppodealMrecViewDelegateInstance.mrecViewDidClickCallback = mrecViewDidClick;
AppodealMrecViewDelegateInstance.mrecViewDidShowCallback = mrecViewDidShow;
AppodealMrecViewDelegateInstance.mrecViewDidFailToPresentCallback = mrecViewDidFailToPresent;
AppodealMrecViewDelegateInstance.mrecViewDidExpiredCallback = mrecViewDidExpired;
if (!mrecUnity) {
mrecUnity = [AppodealUnityMrecView sharedInstance];
}
[mrecUnity.mrecView setDelegate:AppodealMrecViewDelegateInstance];
}
static AppodealRewardedVideoDelegate *AppodealRewardedVideoDelegateInstance;
void AppodealSetRewardedVideoDelegate(AppodealRewardedVideoDidLoadCallback rewardedVideoDidLoadAd,
AppodealRewardedVideoCallbacks rewardedVideoDidFailToLoadAd,
AppodealRewardedVideoCallbacks rewardedVideoDidFailToPresent,
AppodealRewardedVideoDidDismissCallback rewardedVideoWillDismiss,
AppodealRewardedVideoDidFinishCallback rewardedVideoDidFinish,
AppodealRewardedVideoCallbacks rewardedVideoDidPresent,
AppodealRewardedVideoCallbacks rewardedVideoDidExpired,
AppodealRewardedVideoCallbacks rewardedVideoDidReceiveTap) {
AppodealRewardedVideoDelegateInstance = [AppodealRewardedVideoDelegate new];
AppodealRewardedVideoDelegateInstance.rewardedVideoDidLoadAdCallback = rewardedVideoDidLoadAd;
AppodealRewardedVideoDelegateInstance.rewardedVideoDidFailToLoadAdCallback = rewardedVideoDidFailToLoadAd;
AppodealRewardedVideoDelegateInstance.rewardedVideoDidFailToPresentCallback = rewardedVideoDidFailToPresent;
AppodealRewardedVideoDelegateInstance.rewardedVideoWillDismissCallback = rewardedVideoWillDismiss;
AppodealRewardedVideoDelegateInstance.rewardedVideoDidFinishCallback = rewardedVideoDidFinish;
AppodealRewardedVideoDelegateInstance.rewardedVideoDidPresentCallback = rewardedVideoDidPresent;
AppodealRewardedVideoDelegateInstance.rewardedVideoDidExpireCallback = rewardedVideoDidExpired;
AppodealRewardedVideoDelegateInstance.rewardedVideoDidReceiveTapActionCallback = rewardedVideoDidReceiveTap;
[Appodeal setRewardedVideoDelegate:AppodealRewardedVideoDelegateInstance];
}
static AppodealAdRevenueDelegate *AppodealAdRevenueDelegateInstance;
void AppodealSetAdRevenueDelegate(AppodealAdRevenueCallback adRevenueReceived) {
AppodealAdRevenueDelegateInstance = [AppodealAdRevenueDelegate new];
AppodealAdRevenueDelegateInstance.adRevenueReceivedCallback = adRevenueReceived;
[Appodeal setAdRevenueDelegate:AppodealAdRevenueDelegateInstance];
}