InMobi 的 SDK 11.4.0 为您的应用带来更强大的盈利能力。升级过程极其简单,只需拖放集成并完成几个合规步骤即可。
有关 iOS 集成的更多信息,请参阅 iOS SDK 集成入门指南。
最新版本的 InMobi SDK 支持:
导入子模块,例如InMobi.IMBanner(或InMobi.IMSdk):
问题:编译错误“模块‘ InMobiSDK’中没有名为‘IMSdk’的子模块;您是不是想用‘Swift’?”
原因:Swift 默认情况下不支持子模块的概念。
解决方法:将 ( @import InMobiSDK.IMBanner;) 替换为 ( @import InMobiSDK;)。
这同样适用于任何其他子模块(例如InMobiSDK.IMSdk,InMobiSDK.IMBannerDelegate...)。注意:如果您有类似 ( #import <inmobisdk imbanner.h=""></inmobisdk>) 的行,也需要将其替换为 ( @import InMobiSDK;)。
常量的使用,例如IM_GDPR_CONSENT_AVAILABLE:
问题:编译错误“使用了未声明的标识符IM_GDPR_CONSENT_AVAILABLE”。
解决方法:替换IM_GDPR_CONSENT_AVAILABLE为 IMCommonConstants IM_GDPR_CONSENT_AVAILABLE。
所有这些常量现在都可以在类 Other 下使用,IMCommonConstants. 这些常量现在是IMCommonConstants类的静态成员:
IM_GDPR_CONSENT_AVAILABLEIM_GDPR_CONSENT_IABIM_SUBJECT_TO_GDPRIM_PARTNER_GDPR_CONSENT_AVAILABLEIM_PARTNER_GDPR_APPLIES在 Objective-C (k) 表示法中使用枚举值:
问题:编译错误“使用了未声明的标识符kIMSDKLogLevelDebug,您是不是想用这个IMSDKLogLevelDebug?”
Xcode建议:替换kIMSDKLogLevelDebug 为IMSDKLogLevelDebug
解决方案:请接受 Xcode 编辑器建议的修复方案。
这适用于 Objective-C中任何其他使用“k”表示法的常量。kIMSDKAgeGroupBelow18,,都可以使用相同的方法进行修正。应用程序中可能存在的枚举类型完整列表包括:,,和。kIMSDKEducationHighSchoolOrLesskIMSDKGenderMaleIMSDKGenderIMSDKEducationIMSDKAgeGroup
IMInterstitial 类的 showFromViewController 方法:
问题:此方法有两个重载版本,两者都会导致编译错误。
解决方案:请接受 Xcode 代码自动完成功能建议的更改。
示例 1:用新版本替换旧版本:
较旧:
[self.interstitial showFromViewController: self];
较新:
[self.interstitial showFrom: self];
示例 2:用新版本替换旧版本:
较旧:
[self.interstitial showFromViewController:self withAnimation: kIMInterstitialAnimationTypeCoverVertical];
较新:
[self.interstitial showFrom:self with:IMInterstitialAnimationTypeCoverVertical];
当你输入“[self.interstitial show”时,它应该会提供两种变体供你选择。
纯 Objective-C 应用程序的链接错误:
问题:如果您有一个纯 Objective-C 应用程序(不包含任何 Swift 文件),则会遇到很多链接错误,例如:
未定义的符号: _OBJC_CLASS_$__TtCs12_SwiftObject
未定义符号:值见证表 ()等等。这是因为 InMobi SDK 是一个静态链接框架,您的应用程序找不到 Swift 库的路径。
解决方法:有两种方法可以修复这些链接错误:
解决方案 1:请在项目中添加一个空的 Swift 虚拟文件。添加后,Xcode 编辑器会询问是否生成自动桥接头文件;请选择“是”。这样做的好处是 Swift 编译器可以找到所需 Swift 库的位置,从而解决所有链接问题。
具体操作方法如下:
解决方案 2:请在 Xcode 中仔细选择您的目标(从项目中),然后转到
“构建设置”> “搜索路径” >“库搜索路径”,并找到以下两个条目:
同样,编译器将能够找到 Swift 库的位置,从而修复链接错误。
导入子模块,例如InMobi.IMBanner(或InMobi.IMSdk):
问题:编译错误“找不到模块InMobiSDK.IMBanner”
原因:Swift 默认情况下不支持子模块的概念。
解决方案:将 (import InMobiSDK.IMBanner) 替换为 (import InMobiSDK)。
这同样适用于其他子模块(例如,,,InMobiSDK.IMSdk等等InMobiSDK.IMBannerDelegate)。
使用常量,例如:IM_GDPR_CONSENT_AVAILABLE.
问题:编译错误“在作用域中找不到‘IM_GDPR_CONSENT_AVAILABLE’”
解决方法:替换IM_GDPR_CONSENT_AVAILABLE为 IMCommonConstants IM_GDPR_CONSENT_AVAILABLE。
所有这些常量现在都可以在 IMCommonConstants 类中使用。其他一些常量现在是 IMCommonConstants 类的静态成员:
IM_GDPR_CONSENT_AVAILABLEIM_GDPR_CONSENT_IABIM_SUBJECT_TO_GDPRIM_PARTNER_GDPR_CONSENT_AVAILABLEIM_PARTNER_GDPR_APPLIES类primaryView的方法IMNative
问题:此方法的返回类型现在是可选的。因此,如果您使用此方法,则必须调整代码以解包方法的返回值。
解决方案:手动调整代码。仅当返回值不为 nil 时,才需要将此子视图添加到主视图中。
例如:如果你的源代码(较旧)中有以下这行代码,请将其更改为较新的代码。
较旧:
self.contentView.addSubview(native.primaryView(ofWidth: aWidth))
较新:
if let aView = native.primaryView(ofWidth: aWidth) {
self.contentView.addSubview(aView)
}
在源代码中创建广告对象:
问题:如果您在源代码中创建广告,请注意所有 3 个广告构造函数(IMBannerIMInterstitial、IMNative 和 IMNative)现在都返回非可选实例。
解决方案:请删除用于解包/可选绑定这些广告构造函数返回的实例的代码(如果有)。
例如:
重命名以满足此要求警告:
问题:编译警告。“重命名为 'banner(_: didReceiveWithMetaInfo: )' 以满足此要求”
解决方法:在大多数情况下,Xcode 建议的修复方法(例如重命名)是正确的。
示例:带有警告的源行
func banner(_ banner: IMBanner!, didReceiveWith info: IMAdMetaInfo!)
Xcode 接受代码修复后的源代码行:
func banner(_ banner: IMBanner!, didReceiveWithMetaInfo info: IMAdMetaInfo!)
已重命名的 API 列表:
func interstitial(_ interstitial: IMInterstitial!, didReceiveWithMetaInfo metaInfo: IMAdMetaInfo!)
func userWillLeaveApplication(from banner: IMBanner!)
func userWillLeaveApplication(from interstitial: IMInterstitial!)
func userWillLeaveApplication(from native: IMNative!)
func userDidSkipPlayingMedia(from native: IMNative!)
参数可选性与协议预期之间的差异:
问题:编译警告:“nativeDidFinishPlayingMedia 的参数的可选性与协议 'IMNativeDelegate' 的预期不同”
解决方案:在大多数情况下,Xcode 建议的修复方法(例如删除!)是正确的。
例1:
带有警告的源行:
func nativeDidFinishLoading(_ native: IMNative!)
Xcode 接受代码修复后的源代码行:
func nativeDidFinishLoading(_ native: IMNative)
例2:
带有警告的源行:
func native(native: IMNative!, didFailToLoadWithError error: IMRequestStatus!)
Xcode 接受代码修复后的源代码行:
func native(native: IMNative!, didFailToLoadWithError error: IMRequestStatus)
实例方法几乎完全符合协议警告的可选要求:
问题:编译警告。“实例方法 'native(_:didInteractWithParams:)' 与协议 'IMNativeDelegate' 的可选要求 'native(_:didInteractWithParams:)' 几乎匹配”。解决方案:请检查相应委托中的方法,查看哪个参数类型不同,并进行相应的修复。
例1:
带有警告的源行:
public func native(native: IMNative!, didInteractWithParams params: [AnyHashable: Any]!)
IMNativeDelegate 协议中的此方法期望参数类型为 [String: Any]。因此,只需将 AnyHashable 更新为 String 类型,并移除方法签名中的“!”即可解决此警告。
手动更改后,请更正源线路:
public func native(native: IMNative!, didInteractWithParams params: [String: Any])
例2:
带有警告的源行:
func banner(_ banner: IMBanner!, didInteractWithParams params: [AnyHashable: Any]!)
如果我们检查IMBannerDelegate协议中的这种方法,可以发现有三个不同之处:
手动更改后,正确的源线路:
func banner(_ banner: IMBanner, didInteractWithParams params: [String: Any]?)
以下方法已被移除,请停止使用。
IMBanner:
-(void)getSignals;
内部:
-(void)getSignals;
IMBannerDelegate:
-(void)banner:(IMBanner*)banner gotSignals:(NSData*)signals;
-(void)banner:(IMBanner *)banner failedToGetSignalsWithError: (IMRequestStatus*)status;
IMInterstitialDelegate:
-(void)interstitial:(IMInterstitial*)interstitial gotSignals:(NSData*)signals;
-(void)interstitial:(IMInterstitial*)interstitial failedToGetSignalsWithError:(IMRequestStatus*)status;
替代方法:[IMSdk getToken]用于代替上述方法
By installing this SDK update, you agree that your Children Privacy Compliance setting remains accurate or that you will update that setting, whenever there is a change in your app's audience. You may update the app's Children Privacy Compliance settings at https://publisher.inmobi.com/my-inventory/app-and-placements.
Support Center