Как получить GADErrorCode из GADRequestError? - PullRequest
0 голосов
/ 09 декабря 2018

Я реализовал рекламное объявление 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: 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 Ответ

0 голосов
/ 13 декабря 2018

На самом деле есть свойство 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 в delegatedidFailToReceiveAdWithError.

...