Intune适用于 iOS 的应用 SDK - Web 视图功能
在应用程序中显示 Web 内容
在 iOS 中,Web 视图可用于显示各种 Web 内容,而无需离开应用的上下文。 某些应用程序还可能使用 Web 视图作为跨多个平台共享功能和 UI 的一种方式。
由于应用内存在 Web 视图,因此会将其公开给潜在的数据泄漏。 如果用户能够通过有意的应用设计或巧妙地操纵呈现的网页 html 内容) 中公开的链接, (导航到应用内的任意外部网页,则用户可能能够从应用泄漏托管数据。
Intune MAM SDK 提供了多个 API,用于处理托管和非托管内容通过应用内的 Web 视图显示的不同方案。 仅当有托管用户登录到应用时,才需要调用这些 API。 请参阅下表,了解哪些 API 适用于哪个方案。
应用场景 | API |
---|---|
仅用户和组织内容,没有任意网页的风险 | 无需 API |
仅非用户和非组织内容 | 在 中设置TreatAllWebViewsAsUnmanaged Info.plist |
用户/组织和非用户/非组织内容混合 (大多数非用户/非组织) | 在 Info.plist 包含用户或组织数据的 Web 视图中设置 和使用setWebViewPolicy:forWebViewer: IntuneMAMWebViewPolicyCurrentIdentity TreatAllWebViewsAsUnmanaged |
用户/组织和非用户/非组织内容的混合 (多数用户/组织) |
setWebViewPolicy:forWebViewer:
IntuneMAMWebViewPolicyUnmanaged 仅在不包含用户或组织数据的 Web 视图上使用 |
用户或组织内容,但存在任意网页的风险 | 在 适当地使用 TreatAllWebViewsAsUnmanaged 和 setWebViewPolicy:forWebViewer: 之后,还会为可能导航到任意网页的 Web 视图实现IntuneMAMWebViewPolicyDelegate |
Web 视图方案 1:仅显示用户或组织内容的网页
如果应用仅使用 Web 视图作为呈现用户或组织内容的方式,并且 Web 视图没有导航到任意外部网页的风险,则无需使用任何 API 或设置。 默认情况下,SDK 会将应用内显示的任何 Web 视图视为属于当前 UI 策略标识的内容。
如果托管用户在应用中打开 Web 视图,则来自 Web 视图的任何剪切/复制数据都将被视为托管内容。 粘贴到 Web 视图中将根据托管帐户的策略进行处理。
如果非托管用户在应用中打开 Web 视图,则来自 Web 视图的任何剪切/复制数据都将被视为非托管内容。 粘贴到 Web 视图中将被视为由非托管帐户完成,并且不会施加其他限制。
Web 视图方案 2:仅不显示用户或组织内容的网页
如果应用知道它永远不会在 Web 视图中显示用户或组织内容,则可以在应用的 Info.plist
中将 YES
设置为 TreatAllWebViewsAsUnmanaged
。 这会将 Web 视图中的任何用户执行的所有剪切、复制和粘贴操作视为非托管操作。 无论用于执行操作的帐户的管理状态如何,该操作都将被视为由非托管用户执行。
这样做可确保托管应用内容不会通过 Web 视图泄露到应用外部。 如果应用仅使用 Web 视图来显示隐私声明、EULA 或其他不需要用户查看的静态页面内容,则设置此标志是个好主意。
设置 后 TreatAllWebViewsAsUnmanaged
,Web 视图中显示的所有内容 都可以 复制并粘贴到其他非托管应用,因为 Web 视图本身被视为非托管。
Web 视图方案 3:用户/组织和非用户/非组织内容的混合
更复杂的应用可能会结合使用用户/组织和非用户/非组织 Web 视图。 应用可能使用 Web 视图来显示隐私声明,但也使用 Web 视图来显示用户内容。 在这种情况下, IntuneMAMPolicyManager
可以使用 的 setWebViewPolicy:forWebViewer:
API。 此 API 允许应用将单个 Web 视图标记为非托管或撤消对单个 Web 视图的影响 TreatAllWebViewsAsUnmanaged
。
API 采用两个参数。 第一个是 类型的枚举值 IntuneMAMWebViewPolicy
。 第二个可以是 UIView 或 UIViewController,其子视图层次结构中可能包含 WKWebView。 WKWebView 本身也可以作为第二个参数直接传入。
如果 WKWebView 是作为第二个参数传入的 UIView 或 UIViewController 的子级,则在调用此 API 时,它不必存在于视图层次结构中。 在 UIView 或 UIViewController 中传递的任何子 WKWebView 都将在添加时应用适当的策略。
-
IntuneMAMWebViewPolicyUnset
- 这是所有 WKWebView 的默认策略。 将仅TreatAllWebViewsAsUnmanaged
根据 标志处理 Web 视图。 -
IntuneMAMWebViewPolicyUnmanaged
- 用户对此策略标记的 Web 视图执行的任何剪切/复制/粘贴操作都将被视为由非托管标识执行。 此策略将覆盖标志TreatAllWebViewsAsUnmanaged
。 -
IntuneMAMWebViewPolicyCurrentIdentity
- 用户对此策略标记的 Web 视图执行的任何剪切/复制/粘贴操作都将被视为由当前 UI 策略标识执行。 此策略将覆盖标志TreatAllWebViewsAsUnmanaged
。
大多数非用户和非组织数据
如果应用内的大多数 Web 视图都显示非托管内容,则可以TreatAllWebViewsAsUnmanaged
在应用的 Info.plist
中设置,并在setWebViewPolicy:forWebViewer:
用户或组织内容 Web 视图上调用 。IntuneMAMWebViewPolicyCurrentIdentity
大多数用户和组织数据
如果应用内的大多数 Web 视图显示用户或组织内容,则只需要 setWebViewPolicy:forWebViewer:
在非托管 Web 视图上调用 with IntuneMAMWebViewPolicyUnmanaged
,因为默认情况下,所有 Web 视图都被视为托管视图。
Web 视图方案 4:用户或组织内容,但存在任意网页的风险
如果 Web 视图用于显示用户或组织内容,但存在导航到任意外部 URL 的风险,则可以将其他 API 与 TreatAllWebViewsAsUnmanaged
和 setWebViewPolicy:forWebViewer:
结合使用。 示例包括具有指向搜索引擎的直接或间接链接的“建议功能”或“反馈”网页。
IntuneMAMWebViewPolicyDelegate
可以使用 实现并设置为 Web 视图IntuneMAMPolicyManager
setWebViewPolicyDelegate:forWebViewer:
。 有 IntuneMAMWebViewPolicyDelegate
一个必需的方法, isExternalURL:
。
setWebViewPolicyDelegate:forWebViewer:
方法必须直接在 WKWebView 或 SFSafariViewController 上调用。
每次 Web 视图导航到新页面时, isExternalURL:
都会调用委托方法。 应用程序应确定传递给委托方法的 URL 是否表示可以粘贴用户或组织数据的内部网站,还是表示可能泄露组织数据的外部网站。
NO
返回将告知 SDK 正在加载的网站是可以共享用户或组织数据的组织位置。 如果当前策略设置需要,则 YES
返回将导致 SDK 在托管浏览器中打开 URL,而不是 WKWebView 或 SFSafariViewController。 这将确保应用内任何用户或组织数据都不会泄露到外部网站。
Web 视图 API 示例
应用使用五个 Web 视图构建, (A、B、C、D 和 E) 。 Web 视图 A、B 和 C 不显示用户或组织数据。 Web 视图 D 显示可供公司所有用户使用的组织页面。 Web 视图 E 呈现可能包含链接的用户文档。
由于大多数 Web 视图都是非托管的 (A、B 和 C) ,因此可以设置为 TreatAllWebViewsAsUnmanaged
减少需要调用 setWebViewPolicy:forWebViewer:
的次数。
由于 Web 视图 D 和 E 显示用户内容,并且所有 Web 视图现在默认处于非托管状态,因此我们需要使用 IntuneMAMWebViewPolicyCurrentIdentity
标记它们setWebViewPolicy:forWebViewer:
。
由于 Web 视图 E 包含用户可能单击的链接并可用于导航到任意 URL,因此我们还需要实现 IntuneMAMWebViewPolicyDelegate
并使用 将其设置为 Web 视图 E setWebViewPolicyDelegate:forWebViewer:
。 在isExternalURL:
实现中,我们可以检查传入 URL,并查看它们是否与文档的 URL 相同。 如果不匹配,则我们知道它是一个外部 URL,可以返回 YES
。 如果它们确实匹配,则我们知道它是内部 URL,并且可以返回 NO
。
实现和调用这些 API 意味着托管用户或组织内容不会泄漏到 Web 视图 A、B 和 C。这也意味着托管内容无法泄露到用户可以通过单击文档内的链接在 E 中导航到的任何外部 URL。 还可以通过防止 Web 视图 D 和 E 中的数据泄露到应用外部来保护托管内容。
SwiftUI 支持
新创建的 SwiftUI 应用支持 UIScenes,但默认情况下未实现 UISceneDelegate。 如果你的应用打算支持 UIScenes 并使用 Intune 应用 SDK,则需要实现 UISceneDelegate。 如果它不打算支持 UIScenes, UIApplicationSceneManifest
则必须删除应用 Info.plist 中名为“应用程序场景清单”) 设置的 (。