2015-05-11 8 views
7

Io lo uso per mostrare annunci AdMob sul piè di pagina di UITableView:Admob annunci non compaiono nel piè di pagina di UITableView quando la tastiera è mostrato

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { 
    GADBannerView *sampleView = [[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner]; 

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
    { 
     sampleView.hidden=true; 
    } 

    sampleView.adUnitID = @"myID"; 

    sampleView.rootViewController = self; 

    [sampleView loadRequest:[GADRequest request]]; 
    return sampleView; 
} 
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { 
    return 50.0; 
} 

non ho dispositivo iPhone vero e proprio, quindi ho solo testarlo su simulatori . Il codice sopra funziona se la tastiera del software è nascosta e ho digitato la parola usando la mia tastiera del MacBook. Tuttavia, quando apro la tastiera software nel simulatore, gli annunci non sono stati caricati al piè di pagina. Invece carica direttamente sotto la barra di ricerca. Come dovrei risolvere questo? Non so se questo errore si sia verificato anche nel dispositivo reale.

Admob no in footer

risposta

2

Ho bisogno di un rappresentante superiore di commentare, ma il problema potrebbe essere legato al modo si crea il GADBannerView.

Come sapete, il delegato -tableView:viewForFooterInSection: viene chiamato ogni volta che è necessario eseguire il rendering della visualizzazione del piè di pagina. Se si sposta la vista fuori dallo schermo e si torna indietro, il delegato si innescherà di nuovo.

La creazione di GADBannerView nel metodo delegato -tableView:viewForFooterInSection: comporta la creazione di una nuova visualizzazione annuncio ogni volta che si scorre avanti e indietro e viene inviata una nuova richiesta di annuncio.

Il mio suggerimento è spostare la creazione di GADBannerView nel metodo -viewDidLoad: di ViewController e restituire la stessa istanza ogni volta.

@interface MyViewController() 

@property (nonatomic, strong) GADBannerView *footerAdView; 
@property (nonatomic, assign, getter=isFooterAdRequested) BOOL footerAdRequested; 

@end 


@implementation MyViewController 

... 

-(void)viewDidLoad:(BOOL)animated { 
    self.footerAdView = [[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner]; 
    _footerAdView.adUnitID = @"myID"; 
    _footerAdView.rootViewController = self; 
} 

... 

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { 
    if(![self isFooterAdFetched]) { 
     [_footerAdView loadRequest:[GADRequest request]]; 
     self.footerAdRequested = YES; // Set this to NO again when ad is dismissed/closed/ended so that a new ad can be requested only when the current one is done. 
    } 
    return _footerAdView; 
} 

... 

@end 

Anche se la mia vaga ipotesi di seguito non ti aiuta, forse l'esempio ti aiuta a mantenere la stessa vista annuncio ed essere un po 'più bello per l'utente, non modificare l'annuncio ogni volta che l'utente scorre avanti e indietro.

mia vaga congettura:

ho mai lavorato con Google Ads quindi non si può dire se si cerca di gestire gli annunci senza essere adeguatamente fissato alla gerarchia della vista. Il mio sospetto era che l'annuncio distaccato (coperto dalla tastiera in modo che ne venisse caricato uno nuovo) si trovasse in qualche modo fuori posto.

+0

Tq. Questo ha risolto il problema di inviare ripetutamente la richiesta di annuncio. Ma gli annunci non sono ancora stati caricati al piè di pagina e caricati diretti sotto la barra di ricerca. – user2872856

+0

Hmm, hai provato a eseguire il debug della gerarchia della vista utilizzando il pulsante che assomiglia a "due rettangoli (uno orizzontale e uno verticale) uno sopra l'altro" (puoi trovarlo nella barra inferiore in Xcode quando è in esecuzione insieme a un pulsante di pausa) per vedere se riesci a scoprire cosa sta succedendo? –