2015-12-30 2 views
1

Мой iAd отлично работает при подключении к Интернету, но при отсутствии Интернета он представляет собой серый экран. Мой код также может работать, когда я устанавливаю симулятор, чтобы давать ошибки, переключаясь на следующий экран. Я попытался проверить, загружено ли объявление, и перейти, если это не так, но автоматически переходит на следующий экран.Удаление межсайтового объявления iAd, когда нет подключения к Интернету

Мой код:

class TransistionScene: SKScene, ADInterstitialAdDelegate { 
    var interAd = ADInterstitialAd() 
    var interAdView = UIView() 
    var closeButton = UIButton() 
    var adLoaded = false 

    override func didMoveToView(view: SKView) { 

     closeButton.frame = CGRectMake(20, 20, 30, 30) 
     closeButton.layer.cornerRadius = 15 
     closeButton.setTitle("x", forState: .Normal) 
     closeButton.setTitleColor(UIColor.blackColor(), forState: .Normal) 
     closeButton.backgroundColor = UIColor.whiteColor() 
     closeButton.layer.borderColor = UIColor.blackColor().CGColor 
     closeButton.layer.borderWidth = 1 

     loadAd() 
     closeButton.addTarget(self, action: "close:", forControlEvents: UIControlEvents.TouchDown) 

    } 

    func close(sender: UIButton) { 
     closeButton.removeFromSuperview() 
     interAdView.removeFromSuperview() 
     adLoaded = false 
     let myScene = GameOver(size: self.size) 
     myScene.scaleMode = self.scaleMode 
     let transition = SKTransition.flipHorizontalWithDuration(1.0) 
     self.view?.presentScene(myScene, transition: transition) 
    } 

    func loadAd() { 
     interAd = ADInterstitialAd() 
     interAd.delegate = self  
    } 

    func interstitialAdWillLoad(interstitialAd: ADInterstitialAd!) { 

    } 

    func interstitialAdDidLoad(interstitialAd: ADInterstitialAd!) { 

     interAdView = UIView() 
     interAdView.frame = self.view!.frame 
     view!.addSubview(interAdView) 
     interAd.presentInView(interAdView) 
     UIViewController.prepareInterstitialAds() 

     interAdView.addSubview(closeButton) 

    } 

    func interstitialAdDidUnload(interstitialAd: ADInterstitialAd!) { 
     interAdView.removeFromSuperview() 

     let myScene = GameOver(size: self.size) 
     myScene.scaleMode = self.scaleMode 
     let transition = SKTransition.flipHorizontalWithDuration(1.0) 
     self.view?.presentScene(myScene, transition: transition) 
     adLoaded = false 
    } 

    func interstitialAd(interstitialAd: ADInterstitialAd!, didFailWithError error: NSError!) { 

     adLoaded = false 
     closeButton.removeFromSuperview() 
     let myScene = GameOver(size: self.size) 
     myScene.scaleMode = self.scaleMode 
     let transition = SKTransition.flipHorizontalWithDuration(1.0) 
     self.view?.presentScene(myScene, transition: transition) 
     interAdView.removeFromSuperview() 

    } 

    func interstitialAdActionShouldBegin(interstitialAd: ADInterstitialAd!, willLeaveApplication willLeave: Bool) -> Bool { 
     return true 
    } 

    func interstitialAdActionDidFinish(interstitialAd: ADInterstitialAd!) { 
     // Done with this ad. Lets get a new one 
     interAdView.removeFromSuperview() 
     //adLoaded = false 
    } 
} 
+1

положите loadAd() в условие if, и если условие проверяет подключение к Интернету. если true loadAd еще нет. –

+0

Как бы вы могли проверить подключение? –

+0

[Avinash Tag] (http://stackoverflow.com/users/1308160/avinash-tag) 's метод небезопасен, так как пользователь вполне может быть подключен к Интернету, но устройство все еще не извлекло объявление из сервер еще. После выгрузки объявлений требуется некоторое время, прежде чем появится новое объявление. Хуже того, пользователь может быть подключен к действительно плохому интернет-соединению, или iDD CDN может быть недоступен, поэтому вы по-прежнему будете видеть, что пользователь подключен к Интернету, но пока не может отображать рекламу. –

ответ

-1

Пожалуйста, смотрите эту ссылку о проверке подключения к Интернету на прошивке: Easiest way to detect Internet connection on iOS?

Поместите loadAd() в если проверку заявления, если пользователь подключен к Интернету.

0

Хотя метод Avinash Tag «s может работать, значительно проще и, что более важно, безопаснее (подробнее об этом ниже) способ решить вашу проблему, чтобы просто проверить, если interAd.loaded верно перед вызовом метода loadAd().

Вы должны обернуть свой код в методе didMoveToView() как таковой:

override func didMoveToView(view: SKView) { 

    if interAd.loaded { // Check if ad is loaded 

     closeButton.frame = CGRectMake(20, 20, 30, 30) 
     closeButton.layer.cornerRadius = 15 
     closeButton.setTitle("x", forState: .Normal) 
     closeButton.setTitleColor(UIColor.blackColor(), forState: .Normal) 
     closeButton.backgroundColor = UIColor.whiteColor() 
     closeButton.layer.borderColor = UIColor.blackColor().CGColor 
     closeButton.layer.borderWidth = 1 

     loadAd() 
     closeButton.addTarget(self, action: "close:", forControlEvents: UIControlEvents.TouchDown) 
    } 
    else { 
     print("Interstitial not loaded yet!") 
    } 
} 

причина, почему этот метод является гораздо более безопасным, чем проверка подключения к Интернету является то, что пользователь может быть очень хорошо подключен к Интернету, но устройство все еще не загрузило объявление с сервера. После выгрузки объявлений требуется некоторое время, прежде чем появится новое объявление. Хуже того, пользователь может быть подключен к действительно плохому интернет-соединению, или iDD CDN может быть недоступен, поэтому вы по-прежнему будете видеть, что пользователь подключен к Интернету, но пока не может отображать рекламу.

Смежные вопросы