iOS 用 Intune アプリ SDK - Web ビュー機能

アプリケーション内での Web コンテンツの表示

iOS では、Web ビューを使用して、アプリのコンテキストを離れることなく、さまざまな Web コンテンツを表示できます。 一部のアプリケーションでは、複数のプラットフォーム間で機能と UI を共有する方法として Web ビューを使用する場合もあります。

Web ビューはアプリ内に存在するため、潜在的なデータ リークに公開されます。 ユーザーがアプリ内の任意の外部 Web ページに移動できる場合 (意図的なアプリ設計を通じて、またはレンダリングされた Web ページの html コンテンツ内の公開されたリンクを巧みに操作する) 場合、ユーザーはアプリからマネージド データを漏洩できる可能性があります。

Intune MAM SDK には、マネージド コンテンツとアンマネージド コンテンツの両方がアプリ内の Web ビューを介して表示されるさまざまなシナリオを処理するための API がいくつか用意されています。 これらの API は、アプリにサインインしているマネージド ユーザーが存在する場合にのみ呼び出す必要があります。 どの API がどのシナリオに適用されるのかを示すクイック ガイドとして、次の表を参照してください。

シナリオ API
任意の Web ページのリスクのないユーザーと組織のコンテンツのみ API は必要ありません
ユーザー以外のコンテンツと組織以外のコンテンツのみ TreatAllWebViewsAsUnmanaged を設定します。 Info.plist
ユーザー/組織と非ユーザー/非組織のコンテンツの組み合わせ (大多数の非ユーザー/非組織) Info.plistTreatAllWebViewsAsUnmanagedを設定し、ユーザーまたは組織のデータを含む Web ビューのIntuneMAMWebViewPolicyCurrentIdentitysetWebViewPolicy:forWebViewer:を使用する
ユーザー/組織と非ユーザー/非組織のコンテンツの組み合わせ (多数派ユーザー/組織) ユーザーまたは組織のデータを含まない Web ビューのIntuneMAMWebViewPolicyUnmanagedでのみsetWebViewPolicy:forWebViewer:を使用する
ユーザーまたは組織のコンテンツですが、任意の Web ページのリスクがある TreatAllWebViewsAsUnmanagedsetWebViewPolicy:forWebViewer:の適切な使用方法に従って、任意の Web ページに移動する可能性がある Web ビューのIntuneMAMWebViewPolicyDelegateも実装します

Web ビュー シナリオ 1: ユーザーまたは組織のコンテンツを表示する Web ページのみ

アプリがユーザーまたは組織のコンテンツをレンダリングする方法として Web ビューのみを使用し、Web ビューが任意の外部 Web ページに移動するリスクがない場合は、API または設定を使用する必要はありません。 既定では、SDK は、アプリ内に表示されるすべての Web ビューを、現在の UI ポリシー ID に属するコンテンツとして扱います。

管理対象ユーザーがアプリ内で Web ビューを開いた場合、Web ビューから切り取り/コピーされたデータはマネージド コンテンツとして扱われます。 Web ビューへの貼り付けは、マネージド アカウントのポリシーに従って処理されます。

アンマネージド ユーザーがアプリ内で Web ビューを開いた場合、Web ビューからの切り取り/コピー データはアンマネージド コンテンツとして扱われます。 Web ビューへの貼り付けは、アンマネージド アカウントによって行われたかのように扱われ、追加の制限は適用されません。

Web ビュー シナリオ 2: ユーザーまたは組織のコンテンツを表示しない Web ページのみ

アプリが Web ビュー内にユーザーまたは組織のコンテンツを表示しないとわかっている場合は、アプリのInfo.plistYESTreatAllWebViewsAsUnmanagedを設定できます。 これにより、Web ビュー内の任意のユーザーによって実行されたすべての切り取り、コピー、貼り付けアクションがアンマネージドとして扱われます。 アクションの実行に使用されるアカウントの管理状態に関係なく、アクションはアンマネージド ユーザーによって実行されたかのように扱われます。

これにより、管理対象アプリのコンテンツが Web ビューを介してアプリの外部に漏洩しないようにします。 このフラグの設定は、アプリが Web ビューのみを使用してプライバシー通知、EULA、またはユーザーが表示する必要のないその他の静的ページ コンテンツを表示する場合に適しています。

TreatAllWebViewsAsUnmanagedが設定されている場合、Web ビュー自体はアンマネージドと見なされるため、Web ビュー内に表示されるすべてのコンテンツをコピーして他のアンマネージド アプリに貼り付けることができます

Web ビュー シナリオ 3: ユーザー/組織と非ユーザー/非組織のコンテンツの組み合わせ

より複雑なアプリでは、ユーザー/組織の Web ビューと非ユーザー/非組織 Web ビューの組み合わせを使用する場合があります。 アプリでは、Web ビューを使用してプライバシーに関する通知を表示するだけでなく、Web ビューを使用してユーザー コンテンツを表示することもできます。 この場合、 IntuneMAMPolicyManagersetWebViewPolicy:forWebViewer: API を使用できます。 この API を使用すると、アプリは個々の Web ビューをアンマネージドとしてマークしたり、個々の Web ビューに対する TreatAllWebViewsAsUnmanaged の効果を元に戻したりできます。

API は 2 つの引数を受け取ります。 1 つ目は、 IntuneMAMWebViewPolicy 型の列挙値です。 2 つ目は、子ビュー階層に WKWebView を含めることができる UIView または UIViewController のいずれかです。 WKWebView 自体は、2 番目の引数として直接渡すこともできます。

WKWebView が 2 番目の引数として渡された UIView または UIViewController の子である場合、この API が呼び出されるときにビュー階層内に存在する必要はありません。 UIView または UIViewController で渡された の子 WKWebView は、追加されたときに適切なポリシーが適用されます。

  • IntuneMAMWebViewPolicyUnset - これは、すべての WKWebView の既定のポリシーです。 Web ビューは、 TreatAllWebViewsAsUnmanaged フラグにのみ従って処理されます。
  • IntuneMAMWebViewPolicyUnmanaged - このポリシーでタグ付けされた Web ビューでユーザーが実行した切り取り/コピー/貼り付けアクションは、アンマネージド ID によって実行されたかのように扱われます。 このポリシーは、 TreatAllWebViewsAsUnmanaged フラグを上書きします。
  • IntuneMAMWebViewPolicyCurrentIdentity - このポリシーでタグ付けされた Web ビューでユーザーが実行した切り取り/コピー/貼り付けアクションは、現在の UI ポリシー ID によって実行されたかのように扱われます。 このポリシーは、 TreatAllWebViewsAsUnmanaged フラグを上書きします。

ユーザー以外のデータと組織以外のデータの過半数

アプリ内の Web ビューの大部分がアンマネージド コンテンツを表示する場合は、アプリのInfo.plistTreatAllWebViewsAsUnmanagedを設定し、IntuneMAMWebViewPolicyCurrentIdentityを使用してsetWebViewPolicy:forWebViewer:をユーザーまたは組織のコンテンツ Web ビューで呼び出すことができます。

マジョリティ ユーザーと組織のデータ

アプリ内の Web ビューの大部分がユーザーまたは組織のコンテンツを表示する場合は、すべての Web ビューが既定で管理されたビューとして扱われるので、IntuneMAMWebViewPolicyUnmanagedを持つsetWebViewPolicy:forWebViewer:のみをアンマネージド Web ビューで呼び出す必要があります。

Web ビュー シナリオ 4: ユーザーまたは組織のコンテンツですが、任意の Web ページのリスクがある

Web ビューを使用してユーザーまたは組織のコンテンツを表示するが、任意の外部 URL に移動するリスクがある場合は、追加の API を TreatAllWebViewsAsUnmanagedsetWebViewPolicy:forWebViewer:と組み合わせて使用できます。 その例としては、検索エンジンへの直接または間接的なリンクを含む機能またはフィードバック Web ページの提案があります。

IntuneMAMWebViewPolicyDelegate を実装し、 IntuneMAMPolicyManagersetWebViewPolicyDelegate:forWebViewer:を使用して Web ビューに設定できます。 IntuneMAMWebViewPolicyDelegateには、必要なメソッドが 1 つisExternalURL:

setWebViewPolicyDelegate:forWebViewer: メソッドは、WKWebView または SFSafariViewController で直接呼び出す必要があります。

Web ビューが新しいページに移動するたびに、 isExternalURL: デリゲート メソッドが呼び出されます。 アプリケーションは、デリゲート メソッドに渡される URL が、ユーザーまたは組織のデータを貼り付けることができる内部 Web サイト、または組織データが漏洩する可能性がある外部 Web サイトを表しているかどうかを判断する必要があります。 NOを返すと、読み込まれる Web サイトが、ユーザーまたは組織のデータを共有できる組織の場所であることが SDK に通知されます。 YESを返すと、現在のポリシー設定で必要な場合、SDK は WKWebView または SFSafariViewController ではなくマネージド ブラウザーで URL を開きます。 これにより、アプリ内のユーザーまたは組織のデータが外部 Web サイトに漏洩することがなくなります。

Web ビュー API の例

アプリは、5 つの 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 を実装し、 setWebViewPolicyDelegate:forWebViewer:を使用して Web ビュー E に設定する必要もあります。 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 をサポートしない場合は、アプリの Info.plist の UIApplicationSceneManifest ("アプリケーション シーン マニフェスト" とも呼ばれます) 設定を削除する必要があります。