diff --git a/ios/admob_plugin.xcodeproj/project.xcworkspace/xcuserdata/gustavomaciel.xcuserdatad/UserInterfaceState.xcuserstate b/ios/admob_plugin.xcodeproj/project.xcworkspace/xcuserdata/gustavomaciel.xcuserdatad/UserInterfaceState.xcuserstate index 528efa92..45215a45 100644 Binary files a/ios/admob_plugin.xcodeproj/project.xcworkspace/xcuserdata/gustavomaciel.xcuserdatad/UserInterfaceState.xcuserstate and b/ios/admob_plugin.xcodeproj/project.xcworkspace/xcuserdata/gustavomaciel.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/ios/admob_plugin/Banner.h b/ios/admob_plugin/Banner.h index 02742a5d..77662d3c 100644 --- a/ios/admob_plugin/Banner.h +++ b/ios/admob_plugin/Banner.h @@ -1,3 +1,11 @@ +// +// Banner.h +// Banner +// +// Created by Gustavo Maciel on 24/01/21. +// + + #include "core/object.h" #import @@ -15,7 +23,6 @@ NSString *adUnitId; ViewController *rootController; } -@property (nonatomic, strong) Banner * banner; - (instancetype)init: (int) instance_id; - (void)load_banner: (NSString*) ad_unit_id : (int) position : (NSString*) size; diff --git a/ios/admob_plugin/Banner.mm b/ios/admob_plugin/Banner.mm index cd2bba38..76e2b0dc 100644 --- a/ios/admob_plugin/Banner.mm +++ b/ios/admob_plugin/Banner.mm @@ -1,3 +1,11 @@ +// +// Banner.mm +// Banner +// +// Created by Gustavo Maciel on 24/01/21. +// + + #import "Banner.h" @implementation Banner @@ -31,7 +39,7 @@ - (void) load_banner:(NSString*)ad_unit_id :(int)position :(NSString*)size { UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation; - + if (bannerView == nil) { if ([size isEqualToString:@"BANNER"]) { bannerView = [[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner]; @@ -91,7 +99,7 @@ - (void)addBannerViewToView { [NSLayoutConstraint constraintWithItem:bannerView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual - toItem:rootController.bottomLayoutGuide + toItem:rootController.view.safeAreaLayoutGuide.bottomAnchor attribute:NSLayoutAttributeTop multiplier:1 constant:0]]; @@ -102,7 +110,7 @@ - (void)addBannerViewToView { [NSLayoutConstraint constraintWithItem:bannerView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual - toItem:rootController.topLayoutGuide + toItem:rootController.view.safeAreaLayoutGuide.topAnchor attribute:NSLayoutAttributeBottom multiplier:1 constant:0]]; diff --git a/ios/admob_plugin/Interstitial.h b/ios/admob_plugin/Interstitial.h index 0d9c034d..3c1760f7 100644 --- a/ios/admob_plugin/Interstitial.h +++ b/ios/admob_plugin/Interstitial.h @@ -1,3 +1,11 @@ +// +// Interstitial.h +// Interstitial +// +// Created by Gustavo Maciel on 24/01/21. +// + + #import #import #import "app_delegate.h" @@ -14,8 +22,6 @@ ViewController *rootController; } -@property (nonatomic, strong) Interstitial *interstitial; - - (instancetype)init: (int) instance_id; - (void)load_interstitial: (NSString*)ad_unit_id; diff --git a/ios/admob_plugin/Interstitial.mm b/ios/admob_plugin/Interstitial.mm index d71cb160..44fcc6bc 100644 --- a/ios/admob_plugin/Interstitial.mm +++ b/ios/admob_plugin/Interstitial.mm @@ -1,3 +1,10 @@ +// +// Interstitial.mm +// Interstitial +// +// Created by Gustavo Maciel on 24/01/21. +// + #import "Interstitial.h" @implementation Interstitial diff --git a/ios/admob_plugin/Rewarded.h b/ios/admob_plugin/Rewarded.h index 898918d4..f333d357 100644 --- a/ios/admob_plugin/Rewarded.h +++ b/ios/admob_plugin/Rewarded.h @@ -1,3 +1,10 @@ +// +// Rewarded.h +// Rewarded +// +// Created by Gustavo Maciel on 24/01/21. +// + #import #import #import "app_delegate.h" @@ -14,8 +21,6 @@ NSString *adUnitId; ViewController *rootController; } -@property (nonatomic, strong) Rewarded * rewarded; - - (instancetype)init: (int) instance_id; - (void)load_rewarded: (NSString*) ad_unit_id; diff --git a/ios/admob_plugin/Rewarded.mm b/ios/admob_plugin/Rewarded.mm index 5f0f1962..774d90f0 100644 --- a/ios/admob_plugin/Rewarded.mm +++ b/ios/admob_plugin/Rewarded.mm @@ -1,3 +1,10 @@ +// +// Rewarded.mm +// Rewarded +// +// Created by Gustavo Maciel on 24/01/21. +// + #import "Rewarded.h" @implementation Rewarded @@ -32,11 +39,11 @@ - (void) load_rewarded:(NSString*) ad_unit_id { [rewarded loadRequest:request completionHandler:^(GADRequestError * _Nullable error) { if (error) { NSLog(@"error while creating reward"); - Object *obj = ObjectDB::get_instance(instanceId); + Object *obj = ObjectDB::get_instance(self->instanceId); obj->call_deferred("_on_AdMob_rewarded_ad_failed_to_show", (int) error.code); } else { NSLog(@"reward successfully loaded"); - Object *obj = ObjectDB::get_instance(instanceId); + Object *obj = ObjectDB::get_instance(self->instanceId); obj->call_deferred("_on_AdMob_rewarded_ad_loaded"); } }]; diff --git a/ios/admob_plugin/admob_plugin.mm b/ios/admob_plugin/admob_plugin.mm index 3ecdd760..1370652c 100644 --- a/ios/admob_plugin/admob_plugin.mm +++ b/ios/admob_plugin/admob_plugin.mm @@ -1,5 +1,5 @@ // -// admob_plugin.m +// admob_plugin.mm // admob_plugin // // Created by Gustavo Maciel on 16/01/21. diff --git a/ios/admob_plugin/admob_plugin_implementation.h b/ios/admob_plugin/admob_plugin_implementation.h index cea09241..60564e57 100644 --- a/ios/admob_plugin/admob_plugin_implementation.h +++ b/ios/admob_plugin/admob_plugin_implementation.h @@ -43,8 +43,16 @@ static void _bind_methods(); public: - void initialize(bool is_for_child_directed_treatment, const String &max_ad_content_rating, bool is_real, bool is_test_europe_user_consent, int instance_id); - void load_banner(const String &ad_unit_id, int gravity, const String &size); + void initialize(bool is_for_child_directed_treatment, + const String &max_ad_content_rating, + bool is_real, + bool is_test_europe_user_consent, + int instance_id); + + void load_banner(const String &ad_unit_id, + int gravity, + const String &size); + void destroy_banner(); void load_interstitial(const String &ad_unit_id); void show_interstitial(); @@ -55,8 +63,14 @@ ~AdMob(); private: const char* getDeviceId(); - void initializeAfterUMP(bool is_for_child_directed_treatment, bool is_real, int instance_id); - void loadConsentForm(bool is_for_child_directed_treatment, bool is_real, int instance_id); + void GADInitialize(); + void initializeAfterUMP(bool is_for_child_directed_treatment, + bool is_real, + int instance_id); + + void loadConsentForm(bool is_for_child_directed_treatment, + bool is_real, + int instance_id); }; diff --git a/ios/admob_plugin/admob_plugin_implementation.mm b/ios/admob_plugin/admob_plugin_implementation.mm index a60ed007..fb37164b 100644 --- a/ios/admob_plugin/admob_plugin_implementation.mm +++ b/ios/admob_plugin/admob_plugin_implementation.mm @@ -43,48 +43,61 @@ NSLog(@"deinitialize admob"); } -void AdMob::loadConsentForm(bool is_for_child_directed_treatment, bool is_real, int instance_id) { - [UMPConsentForm - loadWithCompletionHandler:^(UMPConsentForm *form, NSError *loadError) { - if (loadError) { - objectDB->call_deferred("_on_AdMob_consent_form_load_failure", (int) loadError.code, loadError.domain); - initializeAfterUMP(is_for_child_directed_treatment, is_real, instance_id); - } else { - String consentStatusMsg = ""; +void AdMob::loadConsentForm(bool is_for_child_directed_treatment, bool is_real, int instance_id) +{ + [UMPConsentForm + loadWithCompletionHandler:^(UMPConsentForm *form, NSError *loadError) + { + if (loadError) + { + objectDB->call_deferred("_on_AdMob_consent_form_load_failure", (int) loadError.code, loadError.domain); + initializeAfterUMP(is_for_child_directed_treatment, is_real, instance_id); + } + else + { + String consentStatusMsg = ""; - if (UMPConsentInformation.sharedInstance.consentStatus == UMPConsentStatusRequired) { + if (UMPConsentInformation.sharedInstance.consentStatus == UMPConsentStatusRequired) + { [form presentFromViewController:(ViewController *)((AppDelegate *)[[UIApplication sharedApplication] delegate]).window.rootViewController - completionHandler:^(NSError *_Nullable dismissError) { - objectDB->call_deferred("_on_AdMob_consent_form_dismissed"); - if (UMPConsentInformation.sharedInstance.consentStatus == UMPConsentStatusObtained) { - objectDB->call_deferred("_on_AdMob_consent_status_changed", "User consent obtained. Personalization not defined."); - } - initializeAfterUMP(is_for_child_directed_treatment, is_real, instance_id); - }]; - consentStatusMsg = "User consent required but not yet obtained."; - } + completionHandler:^(NSError *_Nullable dismissError) + { + objectDB->call_deferred("_on_AdMob_consent_form_dismissed"); + if (UMPConsentInformation.sharedInstance.consentStatus == UMPConsentStatusObtained) + { + objectDB->call_deferred("_on_AdMob_consent_status_changed", "User consent obtained. Personalization not defined."); + } + initializeAfterUMP(is_for_child_directed_treatment, is_real, instance_id); + } + ]; + consentStatusMsg = "User consent required but not yet obtained."; + } - if (UMPConsentInformation.sharedInstance.consentStatus == UMPConsentStatusUnknown){ - consentStatusMsg = "Unknown consent status."; - initializeAfterUMP(is_for_child_directed_treatment, is_real, instance_id); - } - else if (UMPConsentInformation.sharedInstance.consentStatus == UMPConsentStatusNotRequired){ - consentStatusMsg = "User consent not required. For example, the user is not in the EEA or the UK."; - initializeAfterUMP(is_for_child_directed_treatment, is_real, instance_id); - } - else if (UMPConsentInformation.sharedInstance.consentStatus == UMPConsentStatusObtained) { - consentStatusMsg = "User consent obtained. Personalization not defined."; - initializeAfterUMP(is_for_child_directed_treatment, is_real, instance_id); + if (UMPConsentInformation.sharedInstance.consentStatus == UMPConsentStatusUnknown) + { + consentStatusMsg = "Unknown consent status."; + initializeAfterUMP(is_for_child_directed_treatment, is_real, instance_id); + } + else if (UMPConsentInformation.sharedInstance.consentStatus == UMPConsentStatusNotRequired) + { + consentStatusMsg = "User consent not required. For example, the user is not in the EEA or the UK."; + initializeAfterUMP(is_for_child_directed_treatment, is_real, instance_id); + } + else if (UMPConsentInformation.sharedInstance.consentStatus == UMPConsentStatusObtained) + { + consentStatusMsg = "User consent obtained. Personalization not defined."; + initializeAfterUMP(is_for_child_directed_treatment, is_real, instance_id); + } + objectDB->call_deferred("_on_AdMob_consent_status_changed", consentStatusMsg); } - - - objectDB->call_deferred("_on_AdMob_consent_status_changed", consentStatusMsg); - } - }]; + } + ]; } -void AdMob::initialize(bool is_for_child_directed_treatment, const String &max_ad_content_rating, bool is_real, bool is_test_europe_user_consent, int instance_id) { - if (instance != this || initialized) { +void AdMob::initialize(bool is_for_child_directed_treatment, const String &max_ad_content_rating, bool is_real, bool is_test_europe_user_consent, int instance_id) +{ + if (instance != this || initialized) + { return; } objectDB = ObjectDB::get_instance(instance_id); @@ -96,7 +109,7 @@ { NSLog(@"Testing the UMP"); NSLog(@"UUID: %@", [[[UIDevice currentDevice] identifierForVendor] UUIDString] ); - NSLog(@"device ID: %@", [NSString stringWithCString: getDeviceId()] ); + NSLog(@"device ID: %@", [NSString stringWithCString: getDeviceId() encoding: NSUTF8StringEncoding] ); [UMPConsentInformation.sharedInstance reset]; UMPDebugSettings *debugSettings = [[UMPDebugSettings alloc] init]; debugSettings.testDeviceIdentifiers = @[ [[[UIDevice currentDevice] identifierForVendor] UUIDString] ]; @@ -139,8 +152,8 @@ GADMobileAds.sharedInstance.requestConfiguration.testDeviceIdentifiers = @[ kGADSimulatorID ]; NSLog(@"on Testing Simulator: %@", kGADSimulatorID); #else - GADMobileAds.sharedInstance.requestConfiguration.testDeviceIdentifiers = @ [ [NSString stringWithCString: getDeviceId()] ]; - NSLog(@"on Testing Real Device: testDeviceIdentifiers: %@", [NSString stringWithCString: getDeviceId()]); + GADMobileAds.sharedInstance.requestConfiguration.testDeviceIdentifiers = @ [ [NSString stringWithCString: getDeviceId() encoding: NSUTF8StringEncoding] ]; + NSLog(@"on Testing Real Device: testDeviceIdentifiers: %@", [NSString stringWithCString: getDeviceId() encoding: NSUTF8StringEncoding]); #endif } @@ -165,32 +178,11 @@ if (@available(iOS 14, *)) { [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) { - [[GADMobileAds sharedInstance] startWithCompletionHandler:^(GADInitializationStatus *_Nonnull status) - { - NSLog(@"%s", "BEFORE adapterStatusesByClassName"); - NSDictionary* states = [status adapterStatusesByClassName]; - NSLog(@"%s", "AFTER adapterStatusesByClassName"); - NSLog(@"%s", "BEFORE states"); - GADAdapterStatus * adapterStatus = states[@"GADMobileAds"]; - NSLog(@"%s", "AFTER states"); - NSLog(@"%s : %ld", "GADMobileAds", adapterStatus.state); - - objectDB->call_deferred("_on_AdMob_initialization_complete", (int) adapterStatus.state, "GADMobileAds"); - }]; + GADInitialize(); }]; } else{ - [[GADMobileAds sharedInstance] startWithCompletionHandler:^(GADInitializationStatus *_Nonnull status) { - NSLog(@"%s", "BEFORE adapterStatusesByClassName"); - NSDictionary* states = [status adapterStatusesByClassName]; - NSLog(@"%s", "AFTER adapterStatusesByClassName"); - NSLog(@"%s", "BEFORE states"); - GADAdapterStatus * adapterStatus = states[@"GADMobileAds"]; - NSLog(@"%s", "AFTER states"); - NSLog(@"%s : %ld", "GADMobileAds", adapterStatus.state); - - objectDB->call_deferred("_on_AdMob_initialization_complete", (int) adapterStatus.state, "GADMobileAds"); - }]; + GADInitialize(); } initialized = true; @@ -200,6 +192,17 @@ } } +void AdMob::GADInitialize(){ + [[GADMobileAds sharedInstance] startWithCompletionHandler:^(GADInitializationStatus *_Nonnull status) + { + NSDictionary* states = [status adapterStatusesByClassName]; + GADAdapterStatus * adapterStatus = states[@"GADMobileAds"]; + NSLog(@"%s : %ld", "GADMobileAds", adapterStatus.state); + + objectDB->call_deferred("_on_AdMob_initialization_complete", (int) adapterStatus.state, "GADMobileAds"); + }]; +} + void AdMob::load_banner(const String &ad_unit_id, int position, const String &size) { if (!initialized) { NSLog(@"AdMob Module not initialized");