iOS の権限と検出

ローカル ネットワーク上のデバイスをスキャンするアプリは、ローカル ネットワーク デバイスを検出して接続するための 1 回限りの権限ダイアログをユーザーに表示するようになります。Cast プラットフォームは、ローカル ネットワークを使用して Cast デバイスを検出して制御するため、ユーザーが権限を拒否すると、キャストできなくなります。

ユーザー エクスペリエンスを向上させるため、標準のデバイス選択ツールを使用しているアプリの SDK に UX の変更をいくつか加えます。これらの UX の変更により、ローカル ネットワーク アクセス権限が必要な理由と、ローカル ネットワーク デバイスへのアクセスが無効になっている場合にキャストを有効にする方法が、ユーザーにとってよりわかりやすくなります。

Cast iOS SDK v4.6.0 以降は、Swift Package Manager の設定に沿って Swift Package Manager で追加するか、手動設定に沿って手動でダウンロードできます。このリリースには、Xcode 12 でビルドされたアプリがネットワーク上の Cast デバイスを検出できるように、基盤となる検出メカニズムの変更が含まれています。キャスト アイコンが常に表示されるようになります。ユーザーがキャスト アイコンをタップしたときに利用可能なデバイスがない場合は、デバイスが利用できない理由に関するガイダンス(ローカル ネットワークへのアクセス権を再度有効にする方法など)が記載されたダイアログが表示されます。

Cast SDK の変更点

初回キャスト

ユーザーが初めてキャストを試みると、ローカル ネットワーク アクセス(LNA)のインタースティシャル ダイアログが表示され、ローカル ネットワーク アクセスが必要な理由が説明されます。その後、Apple が提供する iOS ローカル ネットワーク アクセス権限のプロンプトが表示されます。次のモックは、フローを示しています。

ローカル ネットワーク アクセス権限のフロー

キャストを利用できません

iOS 送信側 SDK 4.6.0 以降では、ユーザーが Wi-Fi に接続している場合、キャスト アイコンが常に表示されます。キャスト デバイスが利用できない場合、キャスト アイコンをタップすると、キャストが利用できない理由のヒントをユーザーに提供するダイアログが表示されます(下のモックアップを参照)。

キャスト機能付きフローを利用できない

アプリの更新

  1. Cast iOS SDK 4.8.6 をプロジェクトに追加する

    Swift Package Manager を使用している場合は、google-cast-ios-sdk パッケージをバージョン 4.8.6 に更新します。

    それ以外の場合は、 SDK を手動でプルします。

  2. NSBonjourServices を Info.plist に追加する

    Info.plist で NSBonjourServices を指定して、ローカル ネットワーク検出を成功させます。

    デバイス検出が正しく機能するには、_googlecast._tcp と _<your-app-id>._googlecast._tcp の両方をサービスとして追加する必要があります。

    appID は receiverID で、GCKDiscoveryCriteria で定義されている ID と同じです。

    次の例の NSBonjourServices 定義を更新し、「ABCD1234」をアプリ ID に置き換えます。

    <key>NSBonjourServices</key>
    <array>
      <string>_googlecast._tcp</string>
      <string>_ABCD1234._googlecast._tcp</string>
    </array>
  3. NSLocalNetworkUsageDescription を Info.plist に追加します。

    アプリの Info.plist ファイルに NSLocalNetworkUsageDescription のアプリ固有の権限文字列を追加して、ローカル ネットワーク プロンプトに表示されるメッセージをカスタマイズすることを強く推奨します。たとえば、Cast 検出や DIAL などの他の検出サービスについて説明します。

    <key>NSLocalNetworkUsageDescription</key>
    <string>${PRODUCT_NAME} uses the local network to discover Cast-enabled devices on your WiFi
    network.</string>

    このメッセージは、モックアップに示すように、iOS のローカル ネットワーク アクセス ダイアログの一部として表示されます。

    キャストのローカル ネットワーク アクセス権限のダイアログの画像
  4. Apple App Store にアプリを再リリースする

    また、できるだけ早く 4.8.6 を使用してアプリを再リリースすることをおすすめします。

カスタマイズ

キャスト デバイスの検出の開始

デフォルトでは、キャスト デバイスの検出は、ユーザーがキャスト アイコン(GCKUICastButton)を初めてタップしたときに開始されます。ユーザーがローカル ネットワークでキャスト アプリを初めて使用しようとした場合は、新しい LNA インタースティシャルが表示され、続いて iOS のローカル ネットワーク アクセス権限のダイアログが表示されます。

デバイス検出の開始タイミングと UX の特定の要素の動作を制御できる新しいフラグが利用可能になりました。

startDiscoveryAfterFirstTapOnCastButton: BOOL(true/false)

デフォルト値は true です。このフラグは、フラグ GCKCastOptions::disableDiscoveryAutostart が false に設定されている場合にのみ適用されます。

true に設定されている場合、ユーザーが GCKUICastButton を初めてタップしたときに、キャスト デバイスの検出が開始されます。ローカル ネットワークの権限が必要な理由を知らせる情報メッセージがユーザーに表示されます。そのメッセージの後に、iOS LNA メッセージが表示されます。キャスト デバイスの検出は、メッセージが確認された後に開始されます。

以降のアプリの起動では、GCKUICastButton が常に表示されます。

false に設定されている場合、デバイス検出はフラグ GCKCastOptions::disableDiscoveryAutostart の値に基づいて開始されます。

よくある質問

Cast SDK v4.4.8 と Xcode 12 を使用して Cast 送信側アプリを再リリースするとどうなりますか?

Apple からネットワーク マルチキャスト利用資格を取得していない場合、アプリはローカル ネットワーク上の Cast デバイスを検出できない可能性があります。Apple は、Cast のサポートのみを目的としたマルチキャスト利用資格を付与しません。 Xcode 12 でビルドする予定の場合は、Cast 4.6.0 でアプリをリリースする必要があります。

新しいバージョンの Cast SDK がリリースされたら、アプリを更新するにはどうすればよいですか?

  • アプリの Info.plist を更新して、ローカル ネットワークの使用に関する説明を含めます。
  • アプリの Info.plist に NSBonjourServices を追加し、Cast の Bonjour サービス名とアプリ ID を指定します。
  • Cast SDK 4.6.0 を使用するように送信側アプリをアップグレードします。
  • Apple App Store にアプリを再リリースします。

4.6.0 にアップグレードした後、カスタム デバイス選択ツールにデバイスが表示されなくなったのはなぜですか?

これは、標準のデバイス選択ツールではなくカスタムのデバイス選択ツールを使用している場合に発生する可能性がある既知の問題です。Cast SDK のバージョン 4.4.8 以前では、デバイスのスキャンは自動で行われていました。バージョン 4.6.0 以降では、デバイス検出を開始するために、 GCKDiscoveryManager クラスで startDiscovery メソッドを明示的に呼び出す必要があります。

この変更の理由は、ローカル ネットワーク アクセス(LNA)の権限プロンプトが、アプリが初めてスキャンした後に表示されるためです。これにより、アプリ内のランダムな場所に権限ダイアログが表示される可能性があります。

アプリ用にカスタム デバイス選択ツールを構築するデベロッパーは、デバイス スキャンを初めて開始する前に、1 回限りのインタースティシャルを提供することが求められます。