集成 InMobi SDK 并实现盈利非常简单。首先,请在此处或Cocoapods下载我们最新的 iOS SDK(版本 11.4.0) 。
如果您尚未使用 Cocoapods,请转到您的 Xcode 项目目录并使用以下命令创建一个 pod 文件。
pod <span class="hljs-keyword">init</span>
将以下内容添加到Podfile.
pod <span class="hljs-string">'InMobiSDK'</span>
将依赖项添加到 pod 文件后,运行以下命令完成依赖项的添加任务。现在您已经拥有一个包含 pod 的工作区。
pod <span class="hljs-keyword">update</span>
10.5.0、10.5.1、10.5.3 和 10.5.4 版本仅在InMobiSDK-Swiftpod 上可用,其余版本均可在InMobiSDKpod 上获取。
或者,您可以直接集成该框架。
1. 将以下必备框架添加到您的 Xcode 项目中:
InMobiSDK.xcframework从下载的 InMobi iOS SDK 包中获取libsqlite3.0.tbdlibz.tbdWebKit.framework
2. 将-ObjC标志添加到其他链接器标志中:
-ObjC旗帜
3. 导航至“常规”选项卡 > “框架、库和嵌入内容”。添加InMobiSDK.xcframework为“嵌入和签名”。

在开始初始化 SDK 之前,我们先暂停一下,进行一些检查:
应用传输安全 (ATS) 是 iOS 9 引入的一项默认设置,它强制应用仅通过 TLS 1.2 或更高版本建立网络连接。尽管 InMobi 致力于采用 HTTPS,但目前的设置要求我们的需求合作伙伴支持这一变更,并 100% 符合 ATS 的所有要求。在我们与合作伙伴共同努力构建安全环境的同时,为了确保广告在 iOS 9 及更高版本上正常运行,您需要按照以下步骤进行操作,作为短期解决方案:
禁用 ATS(推荐)——以确保合作伙伴提供的非安全内容在您更新后的应用中正常运行。要禁用 ATS 标志,请将以下代码片段添加到您的应用的Info.plist.
<span class="hljs-tag"><<span class="hljs-name">key</span>></span>NSAppTransportSecurity<span class="hljs-tag"></<span class="hljs-name">key</span>></span>
<span class="hljs-tag"><<span class="hljs-name">dict</span>></span>
<span class="hljs-tag"><<span class="hljs-name">key</span>></span>NSAllowsArbitraryLoads<span class="hljs-tag"></<span class="hljs-name">key</span>></span>
<span class="hljs-tag"><<span class="hljs-name">true</span>></span>
<span class="hljs-tag"></<span class="hljs-name">true</span>></span><span class="hljs-tag"></<span class="hljs-name">dict</span>></span>
如果您计划迁移到 ATS 合规性系统,请禁用 ATS 并添加例外(不推荐)。您可以通过将域添加到例外列表中,允许来自域的安全内容来实现此目的。
<span class="hljs-tag"><<span class="hljs-name">key</span>></span>NSAppTransportSecurity<span class="hljs-tag"></<span class="hljs-name">key</span>></span>
<span class="hljs-tag"><<span class="hljs-name">dict</span>></span>
<span class="hljs-tag"><<span class="hljs-name">key</span>></span>NSAllowsArbitraryLoads<span class="hljs-tag"></<span class="hljs-name">key</span>></span>
<span class="hljs-tag"><<span class="hljs-name">true</span>></span>
<span class="hljs-tag"><<span class="hljs-name">key</span>></span>NSExceptionDomains<span class="hljs-tag"></<span class="hljs-name">key</span>></span>
<span class="hljs-tag"><<span class="hljs-name">dict</span>></span>
<span class="hljs-tag"><<span class="hljs-name">key</span>></span>example.com<span class="hljs-tag"></<span class="hljs-name">key</span>></span>
<span class="hljs-tag"><<span class="hljs-name">dict</span>></span>
<span class="hljs-tag"><<span class="hljs-name">key</span>></span>NSIncludesSubdomains<span class="hljs-tag"></<span class="hljs-name">key</span>></span>
<span class="hljs-tag"><<span class="hljs-name">true</span>></span>
<span class="hljs-tag"></<span class="hljs-name">true</span>></span><span class="hljs-tag"></<span class="hljs-name">dict</span>></span>
<span class="hljs-tag"></<span class="hljs-name">dict</span>></span>
<span class="hljs-tag"></<span class="hljs-name">true</span>></span><span class="hljs-tag"></<span class="hljs-name">dict</span>></span>
请勿在例外列表中使用 InMobi 域名和 CDN,否则会在运行时导致错误。
从 iOS 12 开始,苹果引入了隐私设置,允许用户访问 WiFi 信息。为了提升盈利能力和用户体验,我们鼓励用户分享 WiFi 信息以进行定向广告投放。


App.entitlements文件中。
要获得位置信息许可,您必须告知用户允许传递位置数据。更多信息,请参阅“传递位置信息”。
由于缺乏统一的广告标识符 (IDFA),Apple 提供了 SKAdNetwork API 作为归因解决方案。使用 SKAN 表示您的应用通过 InMobi 实现盈利,并接受来自支持 SKAN 的买家的出价。
要使用 SKAdNetwork ID 配置您的应用,请确保在应用的 Info.plist 文件中输入 InMobi SKAdNetwork ID 以及所有您希望向其销售广告资源的买家的 ID。请按照 Apple 的说明进行操作。
InMobi 和 InMobi 买家的 SKAdNetwork ID 以两种格式托管在一起:
这些文件会经常更新。
将 InMobi SDK 头文件导入到您的AppDelegate.h文件中:
<span class="hljs-keyword">@import</span> InMobiSDK;
<span class="hljs-comment">/**Please do not remove the window property as it can lead to undefined behavior**/</span>
<span class="hljs-keyword">@property</span> (<span class="hljs-keyword">strong</span>, <span class="hljs-keyword">nonatomic</span>) <span class="hljs-built_in">UIWindow</span> *window;
<span class="hljs-keyword">import</span> InMobiSDK
<span class="hljs-comment">/**Please do not remove the window property as it can lead to undefined behavior**/</span>
<span class="hljs-keyword">var</span> window: <span class="hljs-type">UIWindow</span>?
didFinishLaunchingWithOptions在应用程序代理的m文件中的方法中初始化SDK :
<span class="hljs-operator">-</span> (<span class="hljs-type">BOOL</span>)application:(<span class="hljs-type">UIApplication</span> <span class="hljs-operator">*</span>)application didFinishLaunchingWithOptions:(<span class="hljs-type">NSDictionary</span> <span class="hljs-operator">*</span>)launchOptions {
void (<span class="hljs-operator">^</span>completionBlock)(<span class="hljs-type">NSError</span><span class="hljs-operator">*</span>) <span class="hljs-operator">=</span> <span class="hljs-operator">^</span>( <span class="hljs-type">NSError</span><span class="hljs-operator">*</span> _Nullable error) {
<span class="hljs-keyword">if</span> (error) {
<span class="hljs-type">NSLog</span>(@<span class="hljs-string">"SDK Initialization Error - %@"</span>, error.description);
}
<span class="hljs-keyword">else</span> {
<span class="hljs-type">NSLog</span>(@<span class="hljs-string">"IM Media SDK successfully initialized"</span>);
}
};
[<span class="hljs-type">IMSdk</span> setLogLevel:<span class="hljs-type">IMSDKLogLevelDebug</span>];
[<span class="hljs-type">IMSdk</span> initWithAccountID:kIMAccountID consentDictionary:@{<span class="hljs-type">IMCommonConstants</span>.<span class="hljs-type">IM_GDPR_CONSENT_AVAILABLE</span>: @<span class="hljs-string">"true"</span>, <span class="hljs-type">IMCommonConstants</span>.<span class="hljs-type">IM_GDPR_CONSENT_IAB</span>: @<span class="hljs-string">"<<consent format="</span><span class="hljs-string">" iab="</span><span class="hljs-string">" in="</span><span class="hljs-string">">>"</span>} andCompletionHandler:completionBlock];
<span class="hljs-keyword">return</span> <span class="hljs-type">YES</span>;
} <span class="hljs-operator"></</span>consent<span class="hljs-operator">></span>
<span class="hljs-keyword">func</span> <span class="hljs-title function_">application</span>(<span class="hljs-keyword">_</span> <span class="hljs-params">application</span>: <span class="hljs-type">UIApplication</span>, <span class="hljs-params">didFinishLaunchingWithOptions</span> <span class="hljs-params">launchOptions</span>: [<span class="hljs-type">UIApplication</span>.<span class="hljs-params">LaunchOptionsKey</span>: <span class="hljs-keyword">Any</span>]<span class="hljs-operator">?</span>) -> <span class="hljs-type">Bool</span> {
<span class="hljs-type">IMSdk</span>.setLogLevel(<span class="hljs-type">IMSDKLogLevel</span>.debug)
<span class="hljs-type">IMSdk</span>.initWithAccountID(<span class="hljs-string">"accountID"</span>, consentDictionary: [:]) { (error) <span class="hljs-keyword">in</span>
<span class="hljs-keyword">if</span> <span class="hljs-keyword">let</span> error <span class="hljs-operator">=</span> error {
<span class="hljs-built_in">print</span>(error.localizedDescription)
}
}
<span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>
}<span class="hljs-operator"></</span>consent<span class="hljs-operator">><</span>consent format<span class="hljs-operator">=</span><span class="hljs-string">""</span> iab<span class="hljs-operator">=</span><span class="hljs-string">""</span> <span class="hljs-keyword">in</span><span class="hljs-operator">=</span><span class="hljs-string">""</span><span class="hljs-operator">></</span>consent<span class="hljs-operator">></span>
在继续操作之前,了解 GDPR 及其对您在欧洲经济区 (EEA) 地区的流量的影响非常重要。
什么是 consentObject? - consentObject是一个字典,用于表示发布商向 SDK 提供的所有类型的同意信息。如果您希望通过来自欧洲经济区 (EEA) 的流量获利,则此键是必需的。您可以在此处consentObject阅读更多关于 GDPR 法规的信息。
| 钥匙 | 类型 | 推理 |
| GDPR 同意 | 细绳 | 同意字符串是一系列数字,用于标识广告技术供应商的同意状态。
字符串必须遵循此处提到的 IAB 合约。 |
| gdpr_consent_available | 细绳 | “true”:用户已同意收集和使用数据。
“false”:用户未提供收集和使用数据的同意。 除“true”和“false”之外的任何值均无效,并将被视为用户未提供的值。 可以通过字符串常量 IM_GDPR_CONSENT_IAB 访问密钥 gdpr_consent_available。 |
| GDPR | 细绳 | 请求是否受 GDPR 法规约束(0 = 否,1 = 是),省略表示未知。 |
每个会话都需要提供一个 consentObject。SDK 不会持久化同意信息,它只会将 consentObject 保存在内存中。如果应用重新启动,SDK 将丢失 consentObject。在会话期间,可以按如下方式更新 consentObject:
[IMSdk updateGDPRConsent:@{<span class="hljs-tag"><<span class="hljs-name">insert</span> <span class="hljs-attr">consentobject</span>=<span class="hljs-string">""</span> <span class="hljs-attr">dictionary</span>=<span class="hljs-string">""</span> <span class="hljs-attr">here</span>=<span class="hljs-string">""</span>></span>}];<span class="hljs-tag"></<span class="hljs-name">insert</span>></span>
IMSdk.updateGDPRConsent(<span class="hljs-tag"><<span class="hljs-name">insert</span> <span class="hljs-attr">consentobject</span>=<span class="hljs-string">""</span> <span class="hljs-attr">dictionary</span>=<span class="hljs-string">""</span> <span class="hljs-attr">here</span>=<span class="hljs-string">""</span>></span>)<span class="hljs-tag"></<span class="hljs-name">insert</span>></span>
如果您的应用会收集用户位置信息,我们建议您不要将位置信息传递给 InMobi,因为带有位置信息的展示具有更高的潜在收益。如果应用支持位置信息,InMobi SDK 会自动传递位置信息。如果您在应用中使用位置信息,但希望禁用向 InMobi 传递位置信息,请在 InMobi 客户界面中,为您的广告位选择“位置权限”选项。

否则:您可以NSLocationWhenInUseUsageDescription在文件中设置标志(请求位置权限的描述)info.plist。
<span class="hljs-comment">//Using <corelocation corelocation.h=""> fetch the coordinate</span>
<span class="hljs-keyword">self</span>.locationMgr <span class="hljs-operator">=</span> [[<span class="hljs-type">CLLocationManager</span> alloc] <span class="hljs-keyword">init</span>];
[<span class="hljs-keyword">self</span>.locationMgr requestWhenInUseAuthorization];
<span class="hljs-keyword">self</span>.locationMgr.desiredAccuracy <span class="hljs-operator">=</span> kCLLocationAccuracyHundredMeters;
<span class="hljs-keyword">self</span>.locationMgr.delegate <span class="hljs-operator">=</span> <span class="hljs-keyword">self</span>;
[<span class="hljs-keyword">self</span>.locationMgr startUpdatingLocation];
#pragma mark <span class="hljs-operator">-</span> <span class="hljs-type">CLLocationManagerDelegate</span>
<span class="hljs-operator">-</span> (void)locationManager:(<span class="hljs-type">CLLocationManager</span> <span class="hljs-operator">*</span>)manager didUpdateLocations:(<span class="hljs-type">NSArray</span> <span class="hljs-operator">*</span>)locations {
<span class="hljs-type">CLLocation</span> <span class="hljs-operator">*</span>clLocation <span class="hljs-operator">=</span> locations.lastObject;
[<span class="hljs-type">IMSdk</span> setLocation:clLocation];
[<span class="hljs-keyword">self</span>.locationMgr stopUpdatingLocation];
} <span class="hljs-operator"></</span>corelocation<span class="hljs-operator">></span>
<span class="hljs-string">"var locationMgr: CLLocationManager?
//Using CLLocationManagerDelegate fetch the coordinate
locationMgr = CLLocationManager()
locationMgr?.requestWhenInUseAuthorization()
locationMgr?.delegate = self
locationMgr?.startUpdatingLocation()
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
if let clLocation = locations.last {
IMSdk.setLocation(clLocation)
}
locationMgr?.stopUpdatingLocation()
}"</span>
请确保您已获得用户同意共享此数据。支持以下值:
| 年龄 | 性别 |
|
|
例子:
<span class="hljs-section">[IMSdk setGender:IMSDKGenderMale]</span><span class="hljs-comment">;</span>
<span class="hljs-section">[IMSdk setAgeGroup:IMSDKAgeGroupBetween25And29]</span><span class="hljs-comment">;</span>
IMSdk<span class="hljs-selector-class">.setGender</span>(.female)
IMSdk<span class="hljs-selector-class">.setAgeGroup</span>(.between25And29)
我们建议您同时使用年龄限制信息,以遵守相关政策,例如 Google 家庭应用的数据实践政策。您必须根据用户的地理位置数据来确定年龄限制的定义。如果该值设置为 True,InMobi SDK 将不会传输设备标识符,例如 Android 中的“AAID”和 iOS 中的“IDFA”。请注意,默认值为 False。
[IMSdk <span class="hljs-symbol">setIsAgeRestricted:</span> <span class="hljs-literal">false</span>]; <span class="hljs-regexp">//</span> possible value are <span class="hljs-literal">true</span>, <span class="hljs-literal">false</span>
IMSdk. <span class="hljs-built_in">setIsAgeRestricted</span>(false) <span class="hljs-comment">// possible value are true, false</span>
InMobi SDK 无需在苹果公司 2024 年春季截止日期前在隐私清单文件中包含数据使用情况和跟踪域详细信息,因为它不属于苹果常用 SDK 的范畴。InMobi 正在密切关注此事,如有任何变更,我们将及时通知您。
您必须在隐私清单中说明您对 Reason API的使用情况。苹果公司已发布一项更新,自3 月 13 日起生效,该更新要求开发者收到一封通知邮件,告知其使用需要已批准理由的 API 的应用,其隐私清单中缺少哪些理由。自5 月 1 日起,您应将指定 API 的已批准理由添加到应用代码中。
为了满足这些要求,我们即将于2024 年 3 月 11 日发布的 InMobi SDK 10.6.7 版本将包含一个隐私清单文件,其中详细说明了 InMobi SDK 的 Reason API 的使用情况。值得注意的是,InMobi SDK 更新后,Xcode 将能够无缝检测到 Reason API。
| API类别 | API 类别类型 | 原因 | 评论 |
|---|---|---|---|
| 磁盘空间 API | NSPrivacyAccessedAPICategoryDiskSpace | E174.1 | 该 SDK 可优化并行资源下载,防止下载失败。 |
| 用户默认 API | NSPrivacyAccessedAPICategoryUserDefaults | CA92.1 | SDK 存储重要的操作数据,包括之前的 SDK 版本和应用程序启动等详细信息。 |
对于以音频或视频媒体作为主要内容的发布商,我们建议通过观察AVAudioSessionInterruptionnotification用户发布的消息来监听中断情况AVAudioSession。这将有助于提前预防任何内容中断,并提前解决用户体验问题。更多信息请阅读以下 Apple 文档:文章 1、文章 2。
InMobi SDK 使用 iOS WKWebView 来渲染 HTML 广告。根据苹果的设计,WKWebView 不遵循AVAudioSessionCategory应用程序的设置,并且 OMSDK 的音频测量功能也无法正常工作。为了控制 HTML 视频广告,SDK 管理了AVAudioSession……
广告的音频可能会与应用的音频混合在一起。因此,建议您在显示全屏广告时暂停应用的音频,并在广告关闭后恢复播放。
从 SDK 9.1.5 版本开始,您可以使用新的 API 来处理该功能AVAudiosSession。此功能默认启用。
+(<span class="hljs-type">void</span>)shouldAutoManageAVAudioSession:(<span class="hljs-type">BOOL</span>)value;
如果设置为“是”,SDK 将AVAudioSession自动管理。广告展示时,API 会将 AVAudioSession 的类别设置为“插播式视频广告”,AVAudioSessionCategoryAmbient并将“视频插播式视频广告”设置为“插播式视频广告”。广告关闭后,SDK 会将“插播式视频广告”和“视频插播式视频广告”重置为初始状态。categoryOptionAVAudioSessionCategoryOptionMixWithOthersAVAusioSessionCategorycategoryOption
此设置不会阻止应用内广告音频播放,而是会与广告音频混合播放。因此,建议您在显示全屏广告时暂停应用音频,并在广告关闭后恢复播放。
如果将其设置为“否”,则 SDK 将AVAudioSession在 HTML 视频播放生命周期期间停止管理,并且 OMSDK 和音频测量功能可能保持不可用状态,从而导致发布商的收入损失。
如需了解更多信息,请联系您的相关合作伙伴。
您现在一切就绪!接下来,我们来看看如何设置不同的广告格式并开始盈利。准备好了吗?
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