2016-05-11 8 views
5

Sto integrando MoPub SDK per mediare annunci pubblicitari dalla rete di Google AdMob. Posso ottenere l'annuncio da mostrare dopo l'implementazione del mio customEvent e dell'adapter, ma non riesco a far sì che l'AD gestisca autonomamente gli eventi click. Come quando clicco su ADM AdMob nativo, non mi indirizzerà da nessuna parte. Quando si utilizza Facebook e Flurry's CustomEvent e Adapter, i clic vengono gestiti automaticamente. Qualcuno ha qualche esperienza su questo argomento?Mostra annunci nativi AdMob con MoPub (iOS)

Grazie in anticipo. Codice qui sotto:

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 




` 

risposta

0

Se si hanno l'interfaccia utente personalizzata per pubblicitaria AdMob di, allora ci sarà un pulsante che si prevede di utilizzare per callToAction parte.

Prima di tutto è necessario aggiungere un selettore per rilevare l'azione di click, per fare aggiungere il selettore per quel pulsante

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

Dopo che implementano il metodo adCalled per ottenere il click & chiamata al metodo ulteriormente, Di seguito è riportato il codice per il riferimento Di seguito è riportato l'esempio che ho utilizzato per ottenere l'oggetto annuncio dalla mia vista raccolta & quindi lo sto reindirizzando.

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

Utilizzo di questo posso aprire il collegamento n web utilizzando l'URL di monitoraggio google.

Spero che questo aiuti.

Problemi correlati