2016-05-11 5 views
1

Ich entwickle eine iOS App und habe kürzlich das Facebook SDK für iOS integriert. Derzeit wird Version 4.11.0 mit FBAdView und FBInterstitialAd für Facebook Audience Network-Anzeigen verwendet. Die Implementierung in meiner App ist fast identisch mit der App AdUnitsSample im SDK.FBInterstitialAd showAdFromRootViewController Fehler

Die FBAdView Banner-Anzeigen waren in Ordnung, aber ich habe ein ernstes Problem mit der FBInterstitialAd gefunden. Wenn das Interstitial zum ersten Mal angezeigt wird, funktioniert es einwandfrei und wird korrekt ausgeblendet. Wenn der Nutzer jedoch durch die Anzeige klickt (um eine Webseite oder App-Store-Seite im In-App-Browser anzuzeigen) und dann die Schaltflächen "Abbrechen" oder "Fertig" verwendet, um zum Interstitial zurückzukehren und dann zurück zur App, dann zeigt dann die Anzeige bei nachfolgenden Anfragen nicht an.

Für die fehlgeschlagenen Anfragen, die loadAd Methode funktioniert gut, und die interstitialAdDidLoad: Delegatmethode wird wie üblich gebrannt, aber wenn ich showAdFromRootViewController: nichts passiert nennen, abgesehen von dieser Warnung im Konsolenprotokoll:

Warning: Attempt to present <FBInterstitialAdInternal: 0x1626fc90> on <FBInterstitialAdInternal: 0x163488d0> whose view is not in the window hierarchy!

Der einzige Unterschied zwischen meiner App und der AdUnitsSample-App besteht darin, dass meine App eine XIB-basierte Benutzeroberfläche mit UINavigationController verwendet, während die Beispielanwendung Storyboard und UITabBarController verwendet. Der Aufruf, den ich an die Methode showAdFromRootViewController: mache, sendet meinen Root-View-Controller als Parameter, und dies ist der UIViewController, der gerade auf dem Bildschirm ist.

Aus der Warnung scheint es, dass das Facebook-Interstitial versucht, sich über dem vorherigen Interstitial (FBInterstitialAd ist eine UIViewController Unterklasse) anzuzeigen, und ich habe keine Ahnung warum. Wenn ich das nicht lösen kann, muss ich nur die Interstitial-Anzeigen löschen, was nicht gut ist.

Irgendwelche Ideen?

Update:

Nach dem AdUnitsSample App einige mehr herumspielen, erkannte ich einen weiteren Unterschied. Die Beispielanwendung verwendet ARC, meine App jedoch nicht. Sicher genug, wenn ich ARC in der Beispiel-App ausgeschaltet habe, bekam ich genau den gleichen Fehler. Ich habe keine Ahnung, wie ich das umgehen soll, und da meine App von Bibliotheken von Drittanbietern abhängt, die nicht für ARC gebaut werden, kann ich ARC nicht aktivieren.

Antwort

1

Wir haben das gleiche Problem.

Sie sollten -fobjc-arc Flag zu Ihrer .mm-Datei hinzufügen (used FBInterstitialAd api).

+0

Ich habe versucht, ARC mit -fobj-arc nur für die UIViewController-Klasse, die die FBInterstitialAd enthielt, aber ich habe immer noch die gleichen Fehler und Konsolenwarnung. –

+0

Sie können auf AdUnitsSample App testen: 1.Deaktivieren Sie "Objective-c ARC" (Sie erhalten den Fehler) 2. Fügen Sie -fobjc-arc Flag zu InterstitialViewController (es wird keinen Fehler mehr) – lailai

+0

FYI, meine App hat auch eine UINavigationController in der Stammansicht. – lailai

0

Dies ist eher eine Umgehungslösung als eine echte Lösung, aber am Ende machte ich eine UIViewController Wrapper-Klasse, die das FBInterstitialAd Objekt enthielt und zeigte. Ich habe ARC nur für diese eine Datei aktiviert, indem ich das Flag -fobjc-arc in den Einstellungen verwendete. Zuerst hat es nicht funktioniert, mit der normalen modalen Präsentation für den Wrapper-View-Controller. Dann habe ich versucht, den Wrapper View Controller auf den Navigations-Stack zu schieben (da meine App einen Navigations-Controller in der Root-Ansicht hat). Es ist nicht ideal, aber dieser Ansatz hat funktioniert.