es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo archivar una aplicación Swift iOS en Xcode con Google Mobile Ads SDK v8?

El siguiente código carga y presenta un anuncio de video con recompensa utilizando Google AdMob SDK v8 y Swift iOS. El código funciona como se espera cuando se construye la aplicación, sin embargo, se producen los siguientes errores al intentar ARCHIVAR la aplicación en Xcode.

Errores:
  1. No se puede convertir el valor de tipo ‘String’ al tipo de argumento esperado ‘GADRequest?’
  2. El miembro de instancia ‘load’ no se puede usar en el tipo ‘GADRewardedAd’; ¿quisiste usar un valor de este tipo en su lugar?
  3. Etiqueta de argumento incorrecta en la llamada (tiene ‘fromRootViewController:userDidEarnRewardHandler:’, se esperaba ‘fromRootViewController:delegate:’)
  4. El tipo de argumento ‘() -> ()’ no cumple con el tipo esperado ‘GADRewardedAdDelegate’

¿Alguien sabe dónde está el problema?

import GoogleMobileAds
import SwiftUI

class ViewController: UIViewController, GADFullScreenContentDelegate {

    var rewardedAd: GADRewardedAd?

    override func viewDidLoad() {
        super.viewDidLoad()

        createAndLoadRewardedAd { (success) in
            if success {
                // TODO: Add code here if needed after loading the rewarded ad successfully.
            }
        }
    }

    func createAndLoadRewardedAd(completion: @escaping (Bool) -> ()) {
        let request = GADRequest()
        GADRewardedAd.load(withAdUnitID: "AdUnitID-HIDDEN",
                           request: request) { (ad, error) in
            if let error = error {
                print("El anuncio con recompensa no se pudo cargar con el error: \(error.localizedDescription)")
                return
            }
            self.rewardedAd = ad
            self.rewardedAd?.fullScreenContentDelegate = self
            // El anuncio se cargó correctamente
            completion(true)
        }
    }

    func showRewardedAd() {
        if let ad = rewardedAd {
            ad.present(fromRootViewController: self) {
                let reward = ad.adReward
                // TODO: Reward the user.
            }
        } else {
            print("El anuncio no estaba listo")
        }
    }

    @IBAction func showRewardedAdButtonTapped(_ sender: Any) {
        showRewardedAd()
    }
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Hay algunos errores que ocurren al intentar archivar la aplicación en Xcode. Aquí están los problemas y soluciones:

    1. Error: No se puede convertir el valor de tipo ‘String’ al tipo de argumento esperado ‘GADRequest?’

    Solución: Parece que el problema está en el parámetro ‘request’ en el método GADRewardedAd.load. Asegúrate de que sea de tipo GADRequest. Puedes intentar hacer una conversión forzada de la cadena ‘AdUnitID-HIDDEN’ a GADRequest de la siguiente manera: GADRewardedAd.load(withAdUnitID: “AdUnitID-HIDDEN”, request: GADRequest(), completionHandler: { (ad, error) in …

    1. Error: No se puede usar el miembro de instancia ‘load’ en el tipo ‘GADRewardedAd’; ¿quisiste usar un valor de este tipo en su lugar?

    Solución: Este error ocurre cuando intentas llamar al método load en la clase GADRewardedAd en lugar de una instancia de la clase. Asegúrate de haber definido una variable de instancia de tipo GADRewardedAd y estás llamando al método load en esa variable.

    1. Error: Etiqueta de argumento incorrecta en la llamada (esperaba ‘fromRootViewController:delegate:’, obtuvo ‘fromRootViewController:userDidEarnRewardHandler:’)

    Solución: Este error ocurre porque la firma del método para presentar un anuncio recompensado ha cambiado en el SDK de AdMob v8. El método correcto para presentar el anuncio ahora es ‘present(fromRootViewController: UIViewController, delegate: GADFullScreenContentDelegate?)’. Así que cambia la línea donde presentas el anuncio a esto: ad.present(fromRootViewController: self, delegate: self)

    1. Error: El tipo de argumento ‘() -> ()’ no cumple con el tipo esperado ‘GADRewardedAdDelegate’

    Solución: Parece que no has implementado el protocolo GADRewardedAdDelegate. Agrega esto a la definición de clase: ‘class ViewController: UIViewController, GADFullScreenContentDelegate, GADRewardedAdDelegate {‘. Luego, implementa el método ‘func rewardedAd(_ rewardedAd: GADRewardedAd, userDidEarn reward: GADAdReward)’ para manejar la recompensa obtenida por el usuario.

Comments are closed.