WWDC Quick Look 💓 By SwiftGGTeam
Support local network privacy in your app

Support local network privacy in your app

元の動画を見る

ハイライト

iOS 14 では、アプリがローカル ネットワークに直接アクセスするためのユーザー認証が追加されます。アプリが近くのデバイスを見つけるために Bonjour、ユニキャスト、マルチキャスト、またはブロードキャストを使用する場合、開発者は Info.plist で目的を示し、Bonjour サービス タイプを宣言する必要があります。そうしないと、ローカル検出プロセスが許可システムによってブロックされます。

主要内容

多くのアプリは、デフォルトの利用可能な環境としてローカル ネットワークを使用します。ユーザーが電球のスイッチをクリックすると、携帯電話がスマート ホーム デバイスを検索します。プレイヤーが近くで戦闘を開始したい場合、アプリは Bonjour を使用して同じネットワーク上のサービスを検索し始めます。カメラ、プリンター、ルーター管理ツールも LAN デバイスと直接通信します。 iOS 14 より前は、これらのアクションはバックグラウンドで実行されることが多く、ユーザーが家のどのデバイスをどのアプリが表示しているかを知ることが困難でした。

Appleはこのセッションで初めてプライバシーの理由を説明した。ローカル ネットワーク内のデバイスの組み合わせは、場所の手がかりを形成するのに十分なほどユニークです。デバイスの制御も繊細です。カメラを管理できるアプリは写真を同期できる必要があり、他のアプリが同じデバイスをランダムに検出しないようにする必要があります。したがって、iOS 14 ではローカル ネットワーク アクセスがシステム権限に組み込まれ、どのアプリが近くのデバイスを検出して接続できるかをユーザーが決定できるようになります。

この権限は、アプリ自体のローカル ネットワークへの直接アクセスにのみ影響します。パブリック ネットワーク リソースにのみアクセスするアプリには追加の処理は必要ありません。デバイスの検出は、AirPrint、AirPlay、AirDrop、HomeKit などのシステム サービスを通じて完了し、ローカル ネットワークのアクセス許可を自分で管理する必要はありません。 Bonjour、ユニキャスト、ローカル マルチキャスト、またはブロードキャスト プロトコルを直接使用する場合、アプリは構成とエクスペリエンスを更新する必要があります。

このデモンストレーションでは、iOS 13 で書かれた TicTacToe アプリを使用します。iOS 14 SDK で再構築された後、起動時に近くのプレーヤーが表示されなくなり、デバッグ出力に次のことが表示されました。NoAuth。修復ポイントは Info.plist にあります。ローカル ネットワークの使用状況の説明と Bonjour サービス タイプを追加します。完了後、アプリが実際に Bonjour サービスの参照を開始すると、システムはローカル ネットワーク許可プロンプトをポップアップ表示します。

詳細

このゲームには公式のコード スニペットはありません。以下のコード ブロックは、既存のアプリを検査するのに役立つように、逐語的なドラフトで明示的に記載されている構成項目、権限の境界、および API の動作のみを整理しています。

1. どのアクセスがアクセス許可をトリガーするかを決定します

(03:16) アプリがパブリック ネットワーク リソースにのみアクセスする場合、またはシステム サービスを通じてデバイスの検出を完了する場合、iOS 14 のローカル ネットワーク権限のコードを変更する必要はありません。許可システムは、LAN に直接アクセスする場合にのみ介入します。

不需要 App 自己处理本地网络权限:
- 只访问 wide internet 上的资源
- AirPrint
- AirPlay
- AirDrop
- HomeKit

需要本地网络权限:
- App 内直接使用 Bonjour 浏览或广播服务
- 直接访问本地单播地址
- 使用自定义 multicast 协议
- 使用自定义 broadcast 协议

キーポイント:

  • AirPrint、AirPlay、AirDrop、HomeKit はシステムによって検出され、アプリは完全なデバイス リストを取得しません。
  • ユニキャスト、マルチキャスト、またはブロードキャストを使用してローカル ネットワークに直接アクセスする場合、アプリはユーザーの許可を必要とします。
  • サードパーティのフレームワークがプロセス内のローカル ネットワークにアクセスする場合、システム権限は依然としてアプリに帰属します。

2. Info.plist で目的と Bonjour サービスを宣言します

(05:24) iOS 14 では、アプリが 2 つの Info.plist 情報を提供する必要があります。1 つはローカル ネットワークの使用状況の説明、もう 1 つはブラウジングまたはブロードキャスト時に Bonjour によって使用されるサービス タイプのリストです。デモの TicTacToe アプリは 1 つのサービス タイプのみを使用しており、逐語的な値は次のとおりです。tictactoe.tcp

<key>NSLocalNetworkUsageDescription</key>
<string>TicTacToe uses the local network to discover players around you.</string>

<key>NSBonjourServices</key>
<array>
  <string>tictactoe.tcp</string>
</array>

キーポイント:

  • NSLocalNetworkUsageDescriptionシステム許可ポップアップ ウィンドウが表示され、ローカル ネットワークが必要な特定の機能が示されます。 -NSBonjourServicesアプリが実際に閲覧またはブロードキャストする Bonjour サービス タイプのみをリストします。
  • アプリにこれらの構成が欠けている場合、デモの Bonjour ブラウザは戻ります。NoAuthとなり、ローカルネットワーク許可ポップアップウィンドウは最初に表示されません。

3. いくつかの検出方法では追加の資格が必要です

(06:18) Apple は、2 種類のアプリを特に強調しています。1 つはローカル マルチキャスト検出に Bonjour を使用せず、もう 1 つはネットワーク上のすべての Bonjour サービス タイプを列挙する必要があります。これら 2 種類の操作には、iOS 14 の開発者ポータルを介して資格を申請する必要があります。

Info.plist 声明适用:
- 使用 Bonjour 浏览已知 service type
- 使用 Bonjour 广播自己的 service type

需要申请 entitlement:
- 不通过 Bonjour 做本地 multicast discovery
- 枚举网络上的全部 Bonjour service type

キーポイント:

  • 資格は、通常の Bonjour アプリのデフォルト要件ではありません。
  • 宣言したサービス タイプのみを検索する場合は、Bonjour とNSBonjourServices
  • ビジネスがレガシー ハードウェアのカスタム マルチキャスト プロトコルに依存している場合、資格付与アプリケーションを iOS 14 適応計画に含める必要があります。

4. ユーザーアクション後にブラウジングをトリガーする

(08:42) Info.plist が完了すると、デモ アプリは起動するとすぐに Bonjour のブラウジングを開始し、システムはすぐに許可プロンプトをポップアップ表示します。 Apple は後に、起動時にインターネットを参照せず、ユーザーが「ゲームの検索」をクリックするのを待ってから検索を開始するという、より良いバージョンを発表しました。

较差体验:
App launch -> start Bonjour browsing -> system prompt appears immediately

较好体验:
App launch -> wait
User taps "Search for games" -> start Bonjour browsing -> system prompt explains this action

キーポイント:

  • 許可プロンプトは、ユーザーが開始したアクションの近くにある必要があります。
  • ローカル ネットワークの使用法の説明には、近くのプレーヤーの検出など、有効な機能が記載されている必要があります。
  • アプリの起動時に Web の閲覧を開始すると、ユーザーはパーミッション要求をコンテキストのない中断として簡単に表示できます。

5. 許可待機期間中の API 動作の処理

(10:32) ローカル ネットワークの権限により、一部の API の動作が変更される場合があります。 Bonjour の結果は非同期で返されるため、許可を待っている間は近くにデバイスがないように見える場合があります。NWConnection待機状態のままになります。ローカルネットワークを使用するURLSessionタスクを設定する必要がありますwaitsForConnectivity、ソケット コードはシステム コール エラーを処理する必要があります。

let configuration = URLSessionConfiguration.default
configuration.waitsForConnectivity = true

let session = URLSession(configuration: configuration)

キーポイント:

  • waitsForConnectivityは、許可が付与された後、ローカル ネットワーク タスクが完了を続行できるようにする、逐語的に明示的に指定された属性です。 -NWConnection待機ステータスは必ずしもサーバーにアクセスできないことを意味するわけではなく、単にローカル ネットワークのアクセス許可がまだ付与されていない可能性があります。
  • ソケットを直接使用する場合、ローカルネットワークに常に到達できるとは限らず、通常のパスにはシステムコールエラーが含まれる必要があります。

重要ポイント

1. 近くのプレイヤーの入り口を検索する

機能: 近くのプレイ、画面コラボレーション、LAN ルームのリストを明示的な「近くのデバイスを検索」ボタンの後ろに配置します。

実行する価値がある理由: セッションのデモでは、Bonjour ブラウジングをトリガーする前にユーザーが積極的に検索を開始するのを待つことで、許可ポップアップ ウィンドウが理解しやすくなることが示されています。

開始方法: まず Info.plist に書き込みますNSLocalNetworkUsageDescriptionそしてNSBonjourServices, 次に、Bonjour ブラウザの起動タイミングをアプリの起動からユーザー アクションのコールバックに移動します。

2. スマートホームまたはカメラのペアリングプロセス

対処方法: デバイスのペアリング ページで、検出プロセスを開始する前に、アプリが同じ Wi-Fi 上のカメラ、ライト、スピーカー、またはコントローラーを検索することを説明します。

実行する価値がある理由: Apple はローカル ネットワーク デバイスの制御を機密性の高いシナリオとして明確にリストしており、ユーザーはアプリがなぜ近くのデバイスを認識できるのかを知る必要があります。

開始方法: 実際に使用されている Bonjour サービスの種類をリストし、各ペアリング エントリの使用方法を明確に説明します。NoAuthまたは、デバイス リストが空の場合にローカル ネットワークのアクセス許可を確認するようにユーザーに指示します。

3. 古いハードウェアの LAN プロトコル監査

やるべきこと: マルチキャスト、ブロードキャスト、またはカスタム検出プロトコルを使用するハードウェア アプリ用の iOS 14 互換性チェックリストを作成します。

実行する価値がある理由: セッションの説明、Bonjour のローカル マルチキャスト検出をバイパスするには、追加の資格が必要になる場合があります。

開始方法: まず、Bonjour に移行できる検出プロセスを宣言されたサービス タイプに移行します。本当にマルチキャストを列挙またはカスタマイズする必要がある場合は、開発者ポータル用の資格アプリケーションを準備します。

4. ローカルネットワーク接続の待機状態UI

対処方法: ローカル サーバー、プリンター、またはメディア デバイスに接続するときに、「許可またはネットワーク接続を待機中」を直接失敗を示すのではなく、通常の状態に変更します。

実行する価値がある理由: 逐語草案では、Bonjour は当分の間結果が得られない可能性があると述べています。NWConnection待っているかもしれない、URLSession接続を待つことができます。

開始方法: ローカル ネットワークの設定をリクエストしますwaitsForConnectivity、バンドルNWConnection待機状態は UI に統合されており、ソケット エラーに対するユーザーが理解できる回復パスを提供します。

関連セッション

コメント

GitHub Issues · utterances