На самом деле есть свойство code
(Int
) в GADRequestError
, поэтому вы можете использовать его для создания GADErrorCode
, как показано ниже,
func adView(_ bannerView: GADBannerView, didFailToReceiveAdWithError error: GADRequestError) {
let gadErrorCode = GADErrorCode(rawValue: error.code)
}
Теперь давайте поговорим оповедение SDK.
Нет подключения к Интернету до инициализации Admob SDK
Если подключение к Интернету абсолютно отсутствует и вы инициализируете SDK с помощью следующей команды,
GADMobileAds.configure(withApplicationID: "ca-app-pub-3940256099942544~1458002511")
Вы получите ту же ошибку, что и ваш вопрос, а метод делегата didFailToReceiveAdWithError
также получит эту ошибку SDK-ошибки вместо ошибки при сбое рекламного баннера.На самом деле эта ошибка (kCFErrorDomainCFNetwork
code -1009
) означает, что вы даже не подключены к интернету.Вы можете увидеть здесь для более подробной информации.
Так что теперь, если вы создадите GADErrorCode
из этого кода -1009
, он всегда будет переходить к default case
везде, где вы его используете вswitch
заявление.Примерно так:
let gadErrorCode = GADErrorCode(rawValue: error.code)!
switch gadErrorCode {
case .internalError:
print( "Internal Error code \(gadErrorCode.rawValue)")
default:
print( "Unknown Error Code \(gadErrorCode.rawValue)")
}
Выход
Unknown Error Code -1009
Таким образом, это было объяснением, когда SDK не инициализирован.
Нет подключения к Интернету после инициализации Admob SDK ИЛИ до запроса баннера
Если у вас было подключение к Интернету, когда вы сделали вызов конфигурации GADMobileAds.configure
, и SDK успешно инициализирован, то вы всегда получите один изкод ошибки, указанный в перечислении GADErrorCode
.
Чтобы убедиться в этом, мы можем легко прервать загрузку баннера двумя способами
1) Вы можете запустить свое приложение, имеяподключение к Интернету для инициализации SDK, затем перед созданием и загрузкой запроса баннера просто отключите Интернет и затем наберите этот код,
bannerView.load(GADRequest())
Теперь вы получите error code 2
, которыйcase case networkError = 2
в GADErrorCode
enum, в котором указано,
Произошла ошибка при загрузке данных из сети.
2) Комментарий заниже строки в вашем кодеt к интернет-соединению и запустите ваше приложение,
bannerView.rootViewController = self
Теперь вы получите error code 0
, что составляет case invalidRequest = 0
, и причина этой ошибки упоминается в документации как
Запрос объявления недействителен.Описание ошибки localizedFailureReason будет содержать более подробную информацию.Как правило, это происходит потому, что у объявления не был установлен идентификатор рекламного блока или контроллер корневого просмотра.
Таким образом, при инициализации SDK вы всегда получите правильный error code
в delegate
didFailToReceiveAdWithError
.