Как получить GADErrorCode из GADRequestError?
Я реализовал рекламный баннер AdMob, а также GADBannerViewDelegate
протокол, как определено здесь: https://developers.google.com/admob/ios/banner
Так что я могу использовать этот обратный вызов:
/// Tells the delegate an ad request failed.
func adView(_ bannerView: GADBannerView,
didFailToReceiveAdWithError error: GADRequestError) {
print("adView:didFailToReceiveAdWithError: \(error.localizedDescription)")
}
Я могу видеть из файла, который определяет GADRequestError
что есть также GADErrorCode
enum: https://github.com/floatinghotpot/google-admob-sdk/blob/master/src/ios/GADRequestError.h
Как описано здесь: https://developers.google.com/ad-manager/mobile-ads-sdk/ios/api/reference/Enums/GADErrorCode
-
Однако я действительно изо всех сил пытаюсь получить GADErrorCode
Перечислить объект из GADRequestError
объект ошибки.
-
Это значение GADRequestError
объект ошибки, когда объявление не загружается, потому что устройство находится в автономном режиме:
Error Domain=com.google.admob Code=-1009 "The Internet connection appears to be offline." UserInfo={NSUnderlyingError=0x600000f46880 {Error Domain=kCFErrorDomainCFNetwork Code=-1009 "The Internet connection appears to be offline." UserInfo={NSErrorFailingURLStringKey=https://googleads.g.doubleclick.net/mads/static/sdk/native/sdk-core-v40.html?sdk=afma-sdk-i-v7.36.0, NSErrorFailingURLKey=https://googleads.g.doubleclick.net/mads/static/sdk/native/sdk-core-v40.html?sdk=afma-sdk-i-v7.36.0, _kCFStreamErrorCodeKey=50, _kCFStreamErrorDomainKey=1, NSLocalizedDescription=The Internet connection appears to be offline.}}, NSErrorFailingURLStringKey=https://googleads.g.doubleclick.net/mads/static/sdk/native/sdk-core-v40.html?sdk=afma-sdk-i-v7.36.0, NSErrorFailingURLKey=https://googleads.g.doubleclick.net/mads/static/sdk/native/sdk-core-v40.html?sdk=afma-sdk-i-v7.36.0, _kCFStreamErrorDomainKey=1, _kCFStreamErrorCodeKey=50, NSLocalizedDescription=The Internet connection appears to be offline.}
Можно ли это как-то преобразовать в GADErrorCode
Перечислить объект?
1 ответ
На самом деле есть 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 networkError = 2
в GADErrorCode
перечисление, которое заявляет,
При загрузке данных из сети произошла ошибка.
2) Прокомментируйте строку кода ниже, подключитесь к интернету и запустите приложение,
bannerView.rootViewController = self
Теперь вы получите error code 0
который case invalidRequest = 0
и причина этой ошибки упоминается в документации как
Запрос объявления недействителен. Описание ошибки localizedFailureReason будет содержать более подробную информацию. Обычно это связано с тем, что в объявлении не указан идентификатор рекламного блока или контроллер корневого просмотра.
Таким образом, когда SDK инициализируется, вы всегда получите правильное error code
в delegate
didFailToReceiveAdWithError
,