2017-05-09 2 views
0

Wenn mein CallButton geklickt wird, klingelt es eine Telefonnummer, ich möchte meine Interstitial-Anzeige anzeigen, bevor der Anruf getätigt wird. Ich habe meine Anzeige auf der Schaltfläche "IBAction function ad" getestet und sie funktioniert auf der Schaltfläche, aber wenn ich sie auf der CallButton-Funktion anrufe, wird sie nicht funktionieren und direkt zu einem Anruf übergehen.laden Interstitial-Anzeige auf IBAction-Schaltfläche

class ProfilePageViewController: UIViewController, MFMessageComposeViewControllerDelegate, UITableViewDelegate, UIAlertViewDelegate, GADInterstitialDelegate { 

@IBAction func ad(_ sender: Any) { 
    if self.interstitialAd.isReady { 
     self.interstitialAd.present(fromRootViewController: self) 
    } 
} 

@IBAction func callButton(_ sender: Any) { 

    if let contactopt = contact{ 

     if let url = NSURL(string: "tel://\(contactopt)") { 
      // UIApplication.shared.openURL(url as URL) 
      UIApplication.shared.open(url as URL, options: [:], completionHandler: nil) 
     } 
    } 
} 

var interstitialAd: GADInterstitial! 

func reloadInterstitialAd() -> GADInterstitial { 
    var interstitial = GADInterstitial(adUnitID: "ca-app-pub-/6966780536") 
    interstitial.delegate = self 
    interstitial.load(GADRequest()) 
    return interstitial 
} 

func interstitialDidDismissScreen(ad: GADInterstitial!) { 
    self.interstitialAd = reloadInterstitialAd() 
} 

func interstitialDidDismissScreen(_ ad: GADInterstitial) { 
    interstitialAd = reloadInterstitialAd() 
} 
override func viewDidLoad() { 
    self.interstitialAd = GADInterstitial(adUnitID: "ca-app-pub-/6966780536") 
    let request = GADRequest() 
    request.testDevices = ["2077ef9a63d2b398840261c8221a0c9b"] 
    self.interstitialAd.load(request) 
    self.interstitialAd = reloadInterstitialAd() 

    super.viewDidLoad() 

} 

}

Antwort

1

Natürlich geht es um einen Anruf. Das ist, was Sie sagen, es mit UIApplication.shared.open zu tun.

Tätigen Sie den Anruf, nachdem die Anzeige in interstitialDidDismissScreen entlassen wurde. Überprüfen Sie auch, ob eine Anzeige vorhanden ist, interstitialAd.isReady. Wenn keine Anzeige vorhanden ist, gehen Sie direkt zum Anruf.

Sie tun auch die gleiche Sache zweimal in Ihrer viewDidLoad:

// Sets up an ad 
self.interstitialAd = GADInterstitial(adUnitID: "ca-app-pub-/6966780536") 
let request = GADRequest() 
request.testDevices = ["2077ef9a63d2b398840261c8221a0c9b"] 
self.interstitialAd.load(request) 
// Creates a new ad 
self.interstitialAd = reloadInterstitialAd() 

Nur self.interstitialAd = reloadInterstitialAd() nennen.

+0

tun Sie schlage ich vor, die „IBAction Funktion ad“ lassen, wie es ist, eine ganzseitige Anzeige zu zeigen, und in der interstitialDidDismissScreen Funktion meine Callbutton-Funktion aufrufen? –

+0

@hghgh Es tut mir leid, ich verstehe nicht, was Sie fragen. –

0

Ich glaube, Ihr Problem hat mit der Synchronität der present Methode auf dem interstitiellen zu tun. Ich weiß nicht, was die Implementierung ist, aber es scheint, als ob die Präsentation der Anzeige den Thread nicht blockiert, auf dem sie aufgerufen wurde. Sie sollten versuchen, GADInterstitialDelegate zu implementieren, um das Ereignis zu erfassen, wenn die Anzeige präsentiert wird, um von dort aus Ihren Anruf zu tätigen.

0

Versuchen Sie folgendes:

GADInterstitial ist eine einmalige Verwendung Objekt. Das heißt, sobald ein Interstitial angezeigt wird, gibt hasBeenUsed True zurück und das Interstitial kann nicht zum Laden einer anderen Anzeige verwendet werden. Um ein weiteres Interstitial anzufordern, müssen Sie ein neues GADInterstitial-Objekt erstellen: . Die beste Vorgehensweise, wie oben gezeigt, ist eine Hilfsmethode zum Erstellen und Laden eines Interstitials zu haben.

func createAndLoadInterstitial() -> GADInterstitial { 
    var interstitial = GADInterstitial(adUnitID: "ca-app-pub-3940256099942544/4411468910") 
    interstitial.delegate = self 
    interstitial.load(GADRequest()) 
    return interstitial 
} 

func interstitialDidDismissScreen(_ ad: GADInterstitial) { 
    interstitial = createAndLoadInterstitial() 
} 

@IBAction func ad(_ sender: Any) { 
    if self.interstitialAd.isReady { 
     self.interstitialAd.present(fromRootViewController: self) 
    } 
}