J'essaie de faire la tâche (apparemment) simple d'intégrer des annonces natives AdMob dans mon application iOS exécutée sur Swift. Permettez-moi d'abord de vous montrer mes storyboards et mon code d'intégration, puis nous passerons aux choses que j'ai essayé de résoudre.
Configuration: storyboards et code
Dans mon App Delegate, je configure Firebase sur Google Mobile Ads ...
NATIVE AD - didFailToReceiveAdWithError: Error Domain=com.google.admob Code=1 "Request Error: No ad to show." UserInfo={NSLocalizedDescription=Request Error: No ad to show., gad_response_info= ** Response Info ** Response ID: ymbzXou2CcrohQb16bzgBA Network: (null) ** Mediation line items ** Entry (1) Network: GADMAdapterGoogleAdMobAds Credentials: { } Error: Error Domain=com.google.admob Code=1 "Request Error: No ad to show." UserInfo={NSLocalizedDescription=Request Error: No ad to show.} Latency: 0.095 }
J'ai également ajouté mon GADApplicationIdentifier
à mon Info.plist. Dans mon storyboard, j'ai un ViewController
qui contient un UICollectionViewCell
qui contient un GADUnifiedNativeAdView
et les éléments natifs sont liés via des points de vente.
Dans mon ViewController, dans le viewDidLoad, je charge 5 annonces natives.
NATIVE AD - didReceive: <GADUnifiedNativeAd: 0x283bbdc00> NATIVE AD - didReceive: <GADUnifiedNativeAd: 0x283bbd7a0> NATIVE AD - didReceive: <GADUnifiedNativeAd: 0x283bc73a0> NATIVE AD - didReceive: <GADUnifiedNativeAd: 0x283ba9880> NATIVE AD - didReceive: <GADUnifiedNativeAd: 0x283ba9810> NATIVE AD - adLoaderDidFinishLoading
Dans le GADUnifiedNativeAdLoaderDelegate
, je reçois l'annonce et je les GADUnifiedNativeAdLoaderDelegate
à un tableau.
import Firebase class AdCollectionViewCell: UICollectionViewCell { @IBOutlet var adView: GADUnifiedNativeAdView var nativeAd = GADUnifiedNativeAd() func setAdData() { adView.nativeAd = nativeAd (adView.headlineView as! UILabel).text = nativeAd.headline adView.callToActionView?.isUserInteractionEnabled = false (adView.callToActionView as! UILabel).text = nativeAd.callToAction adView.mediaView?.mediaContent = nativeAd.mediaContent adView.mediaView?.contentMode = .scaleAspectFill } }
Dans UICollectionView's
délégué de mon UICollectionView's
, dans cellForItemAt
j'ai défini la classe de la cellule
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { if isAdCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "adCell", for: indexPath) as! AdCollectionViewCell if nativeAds.count == 5 { cell.nativeAd = nativeAds[0] cell.nativeAd.rootViewController = self } cell.setAdData() return cell }
Enfin, dans UICollectionViewCell's
classe de mon UICollectionViewCell's
, j'ai défini les données de l'annonce
var nativeAds = [GADUnifiedNativeAd]() extension ViewController: GADUnifiedNativeAdLoaderDelegate { func adLoader(_ adLoader: GADAdLoader, didFailToReceiveAdWithError error: GADRequestError) { print("NATIVE AD - didFailToReceiveAdWithError: \(error)") } func adLoader(_ adLoader: GADAdLoader, didReceive nativeAd: GADUnifiedNativeAd) { print("NATIVE AD - didReceive: \(nativeAd)") nativeAds.append(nativeAd) } func adLoaderDidFinishLoading(_ adLoader: GADAdLoader) { print("NATIVE AD - adLoaderDidFinishLoading") libraryCollection.reloadData() } }
L'erreur
Désormais, chaque fois que j'utilise l'identifiant de bloc d'annonces natif de test fourni par Google AdMob, ca-app-pub-3940256099942544/3986624511
, tout fonctionne très bien! Je n'obtiens aucune erreur et le système imprime
override func viewDidLoad() { super.viewDidLoad() // Load Ads let adUnitID = "ca-app-pub-{adUnitId}" let numAdsToLoad = 5 let options = GADMultipleAdsAdLoaderOptions() options.numberOfAds = numAdsToLoad let imageOptions = GADNativeAdImageAdLoaderOptions() imageOptions.disableImageLoading = false let mediaOptions = GADNativeAdMediaAdLoaderOptions() mediaOptions.mediaAspectRatio = .square let adOptions = GADNativeAdViewAdOptions() adOptions.preferredAdChoicesPosition = .topLeftCorner adLoader = GADAdLoader(adUnitID: adUnitID, rootViewController: self, adTypes: [.unifiedNative], options: [options, imageOptions, mediaOptions]) adLoader.delegate = self adLoader.load(GADRequest()) }
Mais le problème survient lorsque j'essaie d'utiliser mon propre identifiant de bloc d'annonces natif. Lors du chargement, le système imprime l'erreur
import Firebase class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. FirebaseApp.configure() GADMobileAds.configure(withApplicationID: "ca-app-pub-8482280186158418~7106629637") GADMobileAds.sharedInstance().start(completionHandler: nil) } }
pour chaque annonce que je charge. Et j'ai essayé BEAUCOUP de choses pour résoudre ce problème que j'ai trouvées partout sur Internet ...
Dépannage
Comme je l'ai mentionné, j'ai parcouru Internet pour obtenir de l'aide et des options de dépannage. Voici ce que j'ai fait.
App Transport Security Settings
dans le fichier Info.plist, comme indiqué par AdMob . (Autoriser les chargements arbitraires, Autoriser les chargements arbitraires pour les médias, Autoriser les chargements arbitraires dans le contenu Web)3 Réponses :
J'ai eu le même problème avec le code d'erreur 1. Aussi après avoir publié mon application dans l'Appstore. Les annonces de test ont bien fonctionné. Après avoir pu associer mon application à l'App Store (8 jours après la publication), cela a fonctionné.
Il semble que vous n'obtenez tout simplement pas l'annonce. Cela dépend de nombreux facteurs tels que votre pays, votre appareil, votre IDFA ou tout autre type d'informations qu'AdMob a pu collecter. Du point de vue de l'annonceur, vous n'êtes pas un public attrayant.
Si vous souhaitez augmenter vos chances d'obtenir une annonce, vous pouvez utiliser un VPN pour les zones à forte demande, par exemple aux États-Unis.
Si vous recevez un message "Aucune annonce à afficher" lorsque vous utilisez des bannières Google (AdMob), vous pouvez résoudre le problème en fixant la largeur de vue 320.
Avez-vous réussi à le résoudre?
Salut, je suis également confronté au même problème, l'avez-vous résolu?
@Daniel Avez-vous réussi à le résoudre?
@RohitKanade Non, je reçois toujours des demandes chez Admob mais aucune impression sur mon application: /