2016-04-08 2 views
0

J'ai un petit jeu avec une minuterie. Je suis en train de mettre en œuvre adMob pour monétiser et je ne suis pas en mesure de redémarrer minuterie/annonces après que l'utilisateur clique sur la bannière et revienne à l'application.adMob iOS resume (retour au bouton app)

Le flux est:

  • 1 - début du match
  • 2 - Afficher les annonces
  • 3 - cliquer sur la bannière et une pause minuterie
  • 4 - Oper safari
  • 5 - cliquez sur " retour à mon application "lien/bouton (fonction iOS)
  • 6 - retour à l'application et au temporisateur (problème ici)

J'ai implémenté toutes les méthodes d'événements adMob (et j'insère le code du temporisateur de restauration) mais je n'arrive pas à sortir de ce problème. Le code fonctionne car il a fonctionné avec iAds (je migre vers adMob).

Toute aide est appréciée. Merci

EDIT: voici le code:

/// Tells the delegate an ad request loaded an ad. 
- (void)adViewDidReceiveAd:(GADBannerView *)adView { 
    NSLog(@"adViewDidReceiveAd"); 
    self.pauseTimer = NO; 
} 

/// Tells the delegate an ad request failed. 
- (void)adView:(GADBannerView *)adView 
    didFailToReceiveAdWithError:(GADRequestError *)error { 
    NSLog(@"adView:didFailToReceiveAdWithError: %@", [error localizedDescription]); 
    self.pauseTimer = NO; 
} 

/// Tells the delegate that a full screen view will be presented in response 
/// to the user clicking on an ad. 
- (void)adViewWillPresentScreen:(GADBannerView *)adView { 
    NSLog(@"adViewWillPresentScreen"); 
    self.pauseTimer = NO; 
} 

/// Tells the delegate that the full screen view will be dismissed. 
- (void)adViewWillDismissScreen:(GADBannerView *)adView { 
    NSLog(@"adViewWillDismissScreen"); 
    self.pauseTimer = NO; 
} 

/// Tells the delegate that the full screen view has been dismissed. 
- (void)adViewDidDismissScreen:(GADBannerView *)adView { 
    NSLog(@"adViewDidDismissScreen"); 
    self.pauseTimer = NO; 
} 

/// Tells the delegate that a user click will open another app (such as 
/// the App Store), backgrounding the current app. 
- (void)adViewWillLeaveApplication:(GADBannerView *)adView { 
    NSLog(@"adViewWillLeaveApplication"); 
    self.pauseTimer = YES; 
} 
+0

code postal pour les méthodes d'événements AdMob afin que nous puissions voir ce qui se passe. On dirait que l'événement revient à l'application, donc vous voulez les méthodes de délégué de l'application et pas les méthodes d'événements AdMob – noobsmcgoobs

+0

@noobsmcgoobs beaucoup de nombreux remerciements pour votre réponse/support. J'ai passé toute la nuit là-dessus. J'ai édité et ajouté le code ... – moustafra

+0

Je viens de donner une réponse. Essayez-le et voyez si cela fonctionne pour vous. Sinon, je peux fournir une autre réponse. – noobsmcgoobs

Répondre

1

Dans ce VC créer une propriété pour stocker ce

@property (nonatomic) BOOL didGoToSafari;

- (void)adViewWillLeaveApplication:(GADBannerView *)adView { 
    NSLog(@"adViewWillLeaveApplication"); 
    self.pauseTimer = YES; 
    self.didGoToSafari = YES; 
} 

Dans le VC que vous montrer à droite avant que l'annonce ne s'affiche au viewWillAppear ou viewDidAppear, vous devez mettre ce code

[[NSNotificationCenter defaultCenter] 
    addObserver:self 
    selector:@selector(applicationDidBecomeActiveNotification:) 
    name:UIApplicationDidBecomeActiveNotification 
    object:[UIApplication sharedApplication]]; 

Et puis après viewDidAppear ou viewWillAppear, écrire cette fonction

- (void)applicationDidBecomeActiveNotification:(NSNotification *)notification { 

if (self.didGoToSafari = YES){ 

     self.pauseTimer = NO; 
     self.didGoToSafari = NO; 
} 
    } 

Dans viewWillDisappear

[[NSNotificationCenter defaultCenter] removeObserver:self         name:UIApplicationDidBecomeActiveNotification 
object:[UIApplication sharedApplication]]; 

Fondamentalement, ce que vous faites est à l'écoute pour voir si l'application est devenue à nouveau actif. Si c'est le cas, vérifiez pour voir si elle revient de Safari. Ce n'est pas parfait parce que vous pourriez utiliser l'application, l'utilisateur va à Safari et ne retourne pas à la partie. Ils pourraient ensuite utiliser Safari plus tard, puis revenir au jeu et il recommencerait à courir. Il y a probablement un flux de contrôle dans le AppDelegate que vous pourriez utiliser pour coder autour de ceci, mais en général ce code devrait le faire.

EDIT: Selon votre commentaire sur la compréhension, voici l'explication complète. Vous utilisez NSNotification pour écouter lorsque l'application revient à un état actif. UIApplicationDidBecomeActiveNotification est appelée automatiquement lorsque votre application devient active (c'est une méthode de délégation d'application). Quand c'est le cas, la méthode (void)applicationDidBecomeActiveNotification est appelée automatiquement et les méthodes de cette méthode sont appelées. Vous disposez d'un indicateur booléen pour voir si l'application renvoie à partir de Safari, car votre application pourrait renvoyer à partir de n'importe quelle autre application si l'utilisateur passait à une autre application lorsque l'annonce était diffusée. À la fin, vous supprimez votre VC en tant qu'observateur pour éviter les fuites de mémoire.

+1

Ca a marché comme un charme! re super! Merci beaucoup ... u rock! :)) Je vais lire et relire vous êtes explication pour comprendre comment cela fonctionne. J'espère que ce ne sera pas difficile de corriger le "bug" du flot dont j'ai parlé. – moustafra

+0

@frankypa Je vous ai fait gagner du temps et j'ai mis à jour la réponse pour que vous n'ayez pas à lire et à relire. – noobsmcgoobs

+0

merci beaucoup! Vous étiez clair mais je suis un noob et junior comme iOS dev et j'ai besoin de comprendre la théorie. Le pouce vers le haut pour toi et grand merci encore! :)) – moustafra