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:用新版本替换旧版本:
较旧:
<span class="hljs-section">[self.interstitial showFromViewController: self]</span><span class="hljs-comment">;</span>
较新:
<span class="hljs-section">[self.interstitial showFrom: self]</span><span class="hljs-comment">;</span>
示例 2:用新版本替换旧版本:
较旧:
<span class="hljs-section">[self.interstitial showFromViewController:self withAnimation: kIMInterstitialAnimationTypeCoverVertical]</span><span class="hljs-comment">;</span>
较新:
[self.interstitial showFrom:self <span class="hljs-keyword">with</span>: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 时,才需要将此子视图添加到主视图中。
例如:如果你的源代码(较旧)中有以下这行代码,请将其更改为较新的代码。
较旧:
<span class="hljs-built_in">self</span>.contentView.<span class="hljs-title function_ invoke__">addSubview</span>(native.<span class="hljs-title function_ invoke__">primaryView</span>(<span class="hljs-attr">ofWidth</span>: aWidth))
较新:
<span class="hljs-keyword">if</span> <span class="hljs-keyword">let</span> aView = native.<span class="hljs-title function_">primaryView</span>(<span class="hljs-params">ofWidth: aWidth</span>) {
self.<span class="hljs-property">contentView</span>.<span class="hljs-title function_">addSubview</span>(aView)
}
在源代码中创建广告对象:
问题:如果您在源代码中创建广告,请注意所有 3 个广告构造函数(IMBannerIMInterstitial、IMNative 和 IMNative)现在都返回非可选实例。
解决方案:请删除用于解包/可选绑定这些广告构造函数返回的实例的代码(如果有)。
例如:
重命名以满足此要求警告:
问题:编译警告。“重命名为 'banner(_: didReceiveWithMetaInfo: )' 以满足此要求”
解决方法:在大多数情况下,Xcode 建议的修复方法(例如重命名)是正确的。
示例:带有警告的源行
<span class="hljs-keyword">func</span> <span class="hljs-title function_">banner</span>(<span class="hljs-keyword">_</span> <span class="hljs-params">banner</span>: <span class="hljs-type">IMBanner</span>!, <span class="hljs-params">didReceiveWith</span> <span class="hljs-params">info</span>: <span class="hljs-type">IMAdMetaInfo</span>!)
Xcode 接受代码修复后的源代码行:
<span class="hljs-keyword">func</span> <span class="hljs-title function_">banner</span>(<span class="hljs-keyword">_</span> <span class="hljs-params">banner</span>: <span class="hljs-type">IMBanner</span>!, <span class="hljs-params">didReceiveWithMetaInfo</span> <span class="hljs-params">info</span>: <span class="hljs-type">IMAdMetaInfo</span>!)
已重命名的 API 列表:
<span class="hljs-keyword">func</span> <span class="hljs-title function_">interstitial</span>(<span class="hljs-keyword">_</span> <span class="hljs-params">interstitial</span>: <span class="hljs-type">IMInterstitial</span>!, <span class="hljs-params">didReceiveWithMetaInfo</span> <span class="hljs-params">metaInfo</span>: <span class="hljs-type">IMAdMetaInfo</span>!)
<span class="hljs-keyword">func</span> <span class="hljs-title function_">userWillLeaveApplication</span>(<span class="hljs-params">from</span> <span class="hljs-params">banner</span>: <span class="hljs-type">IMBanner</span>!)
<span class="hljs-keyword">func</span> <span class="hljs-title function_">userWillLeaveApplication</span>(<span class="hljs-params">from</span> <span class="hljs-params">interstitial</span>: <span class="hljs-type">IMInterstitial</span>!)
<span class="hljs-keyword">func</span> <span class="hljs-title function_">userWillLeaveApplication</span>(<span class="hljs-params">from</span> <span class="hljs-params">native</span>: <span class="hljs-type">IMNative</span>!)
<span class="hljs-keyword">func</span> <span class="hljs-title function_">userDidSkipPlayingMedia</span>(<span class="hljs-params">from</span> <span class="hljs-params">native</span>: <span class="hljs-type">IMNative</span>!)
参数可选性与协议预期之间的差异:
问题:编译警告:“nativeDidFinishPlayingMedia 的参数的可选性与协议 'IMNativeDelegate' 的预期不同”
解决方案:在大多数情况下,Xcode 建议的修复方法(例如删除!)是正确的。
例1:
带有警告的源行:
<span class="hljs-keyword">func</span> <span class="hljs-title function_">nativeDidFinishLoading</span>(<span class="hljs-keyword">_</span> <span class="hljs-params">native</span>: <span class="hljs-type">IMNative</span>!)
Xcode 接受代码修复后的源代码行:
<span class="hljs-keyword">func</span> <span class="hljs-title function_">nativeDidFinishLoading</span>(<span class="hljs-keyword">_</span> <span class="hljs-params">native</span>: <span class="hljs-type">IMNative</span>)
例2:
带有警告的源行:
<span class="hljs-keyword">func</span> <span class="hljs-title function_">native</span>(<span class="hljs-params">native</span>: <span class="hljs-type">IMNative</span>!, <span class="hljs-params">didFailToLoadWithError</span> <span class="hljs-params">error</span>: <span class="hljs-type">IMRequestStatus</span>!)
Xcode 接受代码修复后的源代码行:
<span class="hljs-keyword">func</span> <span class="hljs-title function_">native</span>(<span class="hljs-params">native</span>: <span class="hljs-type">IMNative</span>!, <span class="hljs-params">didFailToLoadWithError</span> <span class="hljs-params">error</span>: <span class="hljs-type">IMRequestStatus</span>)
实例方法几乎完全符合协议警告的可选要求:
问题:编译警告。“实例方法 'native(_:didInteractWithParams:)' 与协议 'IMNativeDelegate' 的可选要求 'native(_:didInteractWithParams:)' 几乎匹配”。解决方案:请检查相应委托中的方法,查看哪个参数类型不同,并进行相应的修复。
例1:
带有警告的源行:
<span class="hljs-keyword">public</span> <span class="hljs-keyword">func</span> <span class="hljs-title function_">native</span>(<span class="hljs-params">native</span>: <span class="hljs-type">IMNative</span>!, <span class="hljs-params">didInteractWithParams</span> <span class="hljs-params">params</span>: [<span class="hljs-params">AnyHashable</span>: <span class="hljs-keyword">Any</span>]<span class="hljs-operator">!</span>)
IMNativeDelegate 协议中的此方法期望参数类型为 [String: Any]。因此,只需将 AnyHashable 更新为 String 类型,并移除方法签名中的“!”即可解决此警告。
手动更改后,请更正源线路:
<span class="hljs-keyword">public</span> <span class="hljs-keyword">func</span> <span class="hljs-title function_">native</span>(<span class="hljs-params">native</span>: <span class="hljs-type">IMNative</span>!, <span class="hljs-params">didInteractWithParams</span> <span class="hljs-params">params</span>: [<span class="hljs-params">String</span>: <span class="hljs-keyword">Any</span>])
例2:
带有警告的源行:
<span class="hljs-keyword">func</span> <span class="hljs-title function_">banner</span>(<span class="hljs-keyword">_</span> <span class="hljs-params">banner</span>: <span class="hljs-type">IMBanner</span>!, <span class="hljs-params">didInteractWithParams</span> <span class="hljs-params">params</span>: [<span class="hljs-params">AnyHashable</span>: <span class="hljs-keyword">Any</span>]<span class="hljs-operator">!</span>)
如果我们检查IMBannerDelegate协议中的这种方法,可以发现有三个不同之处:
手动更改后,正确的源线路:
<span class="hljs-keyword">func</span> <span class="hljs-title function_">banner</span>(<span class="hljs-keyword">_</span> <span class="hljs-params">banner</span>: <span class="hljs-type">IMBanner</span>, <span class="hljs-params">didInteractWithParams</span> <span class="hljs-params">params</span>: [<span class="hljs-params">String</span>: <span class="hljs-keyword">Any</span>]<span class="hljs-operator">?</span>)
以下方法已被移除,请停止使用。
IMBanner:
<span class="hljs-built_in">-</span>(void)getSignals;
内部:
<span class="hljs-built_in">-</span>(void)getSignals;
IMBannerDelegate:
<span class="hljs-built_in">-</span>(void)banner:(IMBanner*)banner gotSignals:(NSData*)signals;
<span class="hljs-built_in">-</span>(void)banner:(IMBanner *)banner failedToGetSignalsWithError: (IMRequestStatus*)status;
IMInterstitialDelegate:
<span class="hljs-built_in">-</span>(void)interstitial:(IMInterstitial*)interstitial gotSignals:(NSData*)signals;
<span class="hljs-built_in">-</span>(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.