如何从 GADRequestError 中获取 GADErrorCode?
How to get a GADErrorCode from a 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
枚举:
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
-
但是我真的很难从 GADRequestError
错误对象中获取 GADErrorCode
枚举对象。
-
这是由于设备离线导致广告无法加载时 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
枚举对象?
实际上 GADRequestError
中有一个 code
属性(一个 Int
),因此您可以使用它来创建 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
)意味着你甚至没有连接到互联网连接。您可以查看here了解更多详情。
所以现在,如果您从此代码 -1009
创建 GADErrorCode
,它将始终转到 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())
现在,您将在 GADErrorCode
枚举中得到 error code 2
也就是这种情况 case networkError = 2
,其中指出,
There was an error loading data from the network.
2) 在您的代码中注释掉下面的行,连接到互联网连接和 运行 您的应用程序,
bannerView.rootViewController = self
现在您将得到 error code 0
即 case invalidRequest = 0
并且文档中提到此错误的原因是
The ad request is invalid. The localizedFailureReason error
description will have more details. Typically this is because the ad
did not have the ad unit ID or root view controller set.
所以,当SDK初始化的时候,你总是会在delegate
didFailToReceiveAdWithError
.
中得到一个合适的error code
我已经实施了 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
-
但是我真的很难从 GADRequestError
错误对象中获取 GADErrorCode
枚举对象。
-
这是由于设备离线导致广告无法加载时 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
枚举对象?
实际上 GADRequestError
中有一个 code
属性(一个 Int
),因此您可以使用它来创建 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
)意味着你甚至没有连接到互联网连接。您可以查看here了解更多详情。
所以现在,如果您从此代码 -1009
创建 GADErrorCode
,它将始终转到 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())
现在,您将在 GADErrorCode
枚举中得到 error code 2
也就是这种情况 case networkError = 2
,其中指出,
There was an error loading data from the network.
2) 在您的代码中注释掉下面的行,连接到互联网连接和 运行 您的应用程序,
bannerView.rootViewController = self
现在您将得到 error code 0
即 case invalidRequest = 0
并且文档中提到此错误的原因是
The ad request is invalid. The localizedFailureReason error description will have more details. Typically this is because the ad did not have the ad unit ID or root view controller set.
所以,当SDK初始化的时候,你总是会在delegate
didFailToReceiveAdWithError
.
error code