2016-05-11 16 views
5

Google AdMob ağındaki AD'lere aracılık etmek için MoPub SDK'yı entegre ediyorum. AD'yi kendi customEvent ve Bağdaştırıcımı uyguladıktan sonra gösterebilirim, ancak AD'yi tıklama olaylarını kendi başlarına işlemek için alamıyorum. AdMob yerel AD'sini tıkladığımda olduğu gibi, beni hiçbir yere yönlendirmeyecek. Facebook ve Flurry'nin CustomEvent ve Bağdaştırıcısını kullanırken, tıklamalar otomatik olarak işlenir. Bu konuda herhangi bir deneyimi var mı?AdMob Native Ads with MoPub (iOS)

Teşekkürler. Aşağıdaki kodu:

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 AdMob Reklam en için özel UI yaşıyorsanız

@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 




` 

cevap

0

, o zaman callToAction kısmı için kullanacağınız bir düğme olacak.

Eğer bu yöntemde ayrıca tıklama & çağrıyı almak için adCalled yöntemini uygulamak sonra o düğme için

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

seçici eklemek yapmak, tıklama eylemini algılamak için bir seçici eklemek gerekir her şeyden

Birincisi, aşağıda referansın kodu Aşağıda, reklam nesnesini & koleksiyon görünümümden almak için kullandığım örnek var, ardından yönlendiriyorum.

- (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]; 
     } 
    } 
} 

Bunu kullanarak google izleme URL'sini kullanarak bağlantı webini açabilirim.

Bu yardımcı olur umarım.