2016-05-11 13 views
5

Ich integriere MoPub SDK, um Anzeigen aus dem Google AdMob-Netzwerk zu vermitteln. Ich kann das AD nach der Implementierung meines eigenen customEvent und Adapters anzeigen lassen, aber ich kann das AD nicht dazu bringen, Klickereignisse eigenständig zu behandeln. Wenn ich auf die AdMob-native AD klicke, wird es mich nirgends leiten. Bei Verwendung von Facebook und Flurry CustomEvent und Adapter werden Klicks automatisch verarbeitet. Hat jemand Erfahrung zu diesem Thema?Anzeigen von AdMob-Anzeigen mit MoPub (iOS)

Vielen Dank im Voraus. Code unten:

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 




` 

Antwort

0

Wenn Sie Ihre benutzerdefinierte UI für AdMob Anzeige zu haben, dann wird es eine Taste sein, die Sie für callToAction Teil verwenden werden.

Zunächst einmal benötigen Sie einen Selektor hinzufügen Aktion von Klick zu erfassen, um die Wähler für die

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

Taste zu tun hinzufügen Danach die adCalled Methode implementieren, um den Klick & Aufruf die Methode weiter zu kommen, Unten ist der Code für Ihre Referenz Unten ist das Beispiel, das ich verwendet habe, um das Anzeigenobjekt aus meiner Sammlungsansicht & zu bekommen, dann leite ich es um.

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

diese verwenden ich den Link n Web öffnen können, die Google Tracking-URL.

Hoffe, das hilft.