Show native AdMob ads with MoPub (iOS)

I integrate the MoPub SDK for AD authentication from the Google AdMob network. I can get AD to show after implementing my own adapter and adapter, but I cannot get AD to handle click events myself. As with when I press AD, I will not direct me anywhere. When using Facebook and Flurry, CustomEvent and Adapter clicks are processed automatically. Anyone have any experience on this?

Thanks at Advance. Code below:

MPGoogleAdMobCustomEvent

@interface MPGoogleAdMobCustomEvent() @property(nonatomic, strong)GADAdLoader *loader; @end @implementation MPGoogleAdMobCustomEvent - (void)requestAdWithCustomEventInfo:(NSDictionary *)info { MPLogInfo(@"MOPUB: requesting AdMob Native Ad"); NSString *adUnitID = [info objectForKey:@"adUnitID"]; if (!adUnitID) { [self.delegate nativeCustomEvent:self didFailToLoadAdWithError:MPNativeAdNSErrorForInvalidAdServerResponse(@"MOPUB: No AdUnitID from GoogleAdMob")]; return; } self.loader = [[GADAdLoader alloc] initWithAdUnitID:adUnitID rootViewController:nil adTypes:@[kGADAdLoaderAdTypeNativeContent] options:nil]; self.loader.delegate = self; GADRequest *request = [GADRequest request]; #if (TARGET_OS_SIMULATOR) request.testDevices = @[ kGADSimulatorID ]; #endif CLLocation *location = [[CLLocationManager alloc] init].location; if (location) { [request setLocationWithLatitude:location.coordinate.latitude longitude:location.coordinate.longitude accuracy:location.horizontalAccuracy]; } request.requestAgent = @"MoPub"; [self.loader loadRequest:request]; } - (void)adLoader:(GADAdLoader *)adLoader didReceiveNativeContentAd:(GADNativeContentAd *)nativeContentAd { MPLogDebug(@"MOPUB: Did receive nativeAd"); MPGoogleAdMobNativeAdAdapter *adapter = [[MPGoogleAdMobNativeAdAdapter alloc] initWithGADNativeContentAd:nativeContentAd]; adapter.url = nativeContentAd.advertiser; MPNativeAd *interfaceAd = [[MPNativeAd alloc] initWithAdAdapter:adapter]; NSMutableArray *imageArray = [NSMutableArray array]; for (GADNativeAdImage *images in nativeContentAd.images) { [imageArray addObject:images.imageURL]; } [super precacheImagesWithURLs:imageArray completionBlock:^(NSArray *errors) { if ([errors count]) { [self.delegate nativeCustomEvent:self didFailToLoadAdWithError:errors[0]]; } else { [self.delegate nativeCustomEvent:self didLoadAd:interfaceAd]; } }]; } - (void)adLoader:(GADAdLoader *)adLoader didFailToReceiveAdWithError:(GADRequestError *)error { MPLogDebug(@"MOPUB: AdMob ad failed to load with error (customEvent): %@", error.description); [self.delegate nativeCustomEvent:self didFailToLoadAdWithError:error]; } @end 

MPGoogleAdMobNativeAdAdapter

 @interface MPGoogleAdMobNativeAdAdapter()<GADNativeAdDelegate> @property(nonatomic, strong)NSDictionary *properties; @end @implementation MPGoogleAdMobNativeAdAdapter - (instancetype)initWithGADNativeContentAd:(GADNativeContentAd *)contentAD { self = [super init]; if (self) { self.contentAd = contentAD; self.contentAd.delegate = self; self.properties = [self convertAssetsToProperties:contentAD]; } return self; } - (NSDictionary *)convertAssetsToProperties:(GADNativeContentAd *)adNative { self.contentAd = adNative; NSMutableDictionary * dictionary = [NSMutableDictionary dictionary]; if (adNative.headline) { dictionary[kAdTitleKey] = adNative.headline; } if (adNative.body) { dictionary[kAdTextKey] = adNative.body; } if (adNative.images[0]) { dictionary[kAdMainImageKey] = ((GADNativeAdImage *)adNative.images[0]).imageURL.absoluteString; } if (adNative.callToAction) { dictionary[kAdCTATextKey] = adNative.callToAction; } return [dictionary copy]; } #pragma mark MPNativeAdAdapter - (NSTimeInterval)requiredSecondsForImpression { return 0.0; } - (NSURL *)defaultActionURL { return nil; } - (BOOL)enableThirdPartyClickTracking { return YES; } - (void)willAttachToView:(UIView *)view { self.contentAd.rootViewController = [self.delegate viewControllerForPresentingModalView]; } - (void)didDetachFromView:(UIView *)view { self.contentAd.rootViewController = nil; } #pragma mark GADNativeAdDelegate - (void)nativeAdWillPresentScreen:(GADNativeAd *)nativeAd { if ([self.delegate respondsToSelector:@selector(nativeAdWillPresentModalForAdapter:)]) { [self.delegate nativeAdWillPresentModalForAdapter:self]; } } - (void)nativeAdDidDismissScreen:(GADNativeAd *)nativeAd { if ([self.delegate respondsToSelector:@selector(nativeAdDidDismissModalForAdapter:)]) { [self.delegate nativeAdDidDismissModalForAdapter:self]; } } - (void)nativeAdWillLeaveApplication:(GADNativeAd *)nativeAd { if ([self.delegate respondsToSelector:@selector(nativeAdWillLeaveApplicationFromAdapter:)]) { [self.delegate nativeAdWillLeaveApplicationFromAdapter:self]; } } @end ` 
+5
source share
1 answer

If you have a user interface for AdMob ads, then a button will appear that you will use for the callToAction part.

First of all, you need to add a selector to detect a click action, to add a selector for this button

 [callToActionButton addTarget:self action:@selector(adCalled:) forControlEvents:UIControlEventTouchUpInside]; 

After that, implement the adCalled method to get the click and call the method further, below is the code for your reference. Below is the example that I used to get the declaration object from my collection view, and then redirect it.

 - (void)adCalled:(id)sender { CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:mainCollectionView]; // Get the button position NSIndexPath *indexPath = [collectionView indexPathForItemAtPoint:buttonPosition]; // Get the index path of button so that I can retrieve the correct ad object id selectedAd = [adArray objectAtIndex:indexPath.row]; if ([selectedAd isKindOfClass:[GADNativeContentAd class]]) { NSString *url = [selectedAd valueForKey:@"googleClickTrackingURLString"]; NSLog(@"URL is :%@", url); NSURL *googleUrl = [NSURL URLWithString:url]; if ([[UIApplication sharedApplication] canOpenURL: googleUrl]) { [[UIApplication sharedApplication] openURL:googleUrl]; } } } 

Using this, I can open the n web link using the google tracking URL.

Hope this helps.

0
source

All Articles