iOS の権限と検出

iOS 14 以降では、キャスト ユーザー エクスペリエンスに影響する新しい制限と権限がオペレーティング システムに適用されます。また、アプリに Cast SDK を組み込む方法にも影響します。最新バージョンの iOS で Cast 機能を維持するには、これらの権限の変更を処理するようにアプリを更新する必要があります。

iOS 14

デベロッパーは iOS Cast 送信者アプリを Google Cast SDK v4.6.0 以降に更新する必要があります。これらのバージョンでは、iOS 14 とその要件がサポートされています。

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

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

v4.4.8 以前を使用して Cast SDK のバージョンでビルドしたアプリは、Xcode 11.7 以前でビルドされている限り、引き続き動作します。Xcode 12 以降を使用して iOS 14 向けにビルドする場合は、Cast アプリが正常に機能するように、Cast SDK v4.6.0 以降に更新することをおすすめします。

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

Cast SDK の変更点

初回キャスト

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

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

キャストできません

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

キャストが利用できないフロー

iOS 14 でのアプリの更新

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

    CocoaPods を使用している場合は、pod update を使用して 4.7.0 SDK をプロジェクトに追加します。

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

  2. NSBonjourServicesInfo.plist に追加する

    iOS 14 でローカル ネットワーク ディスカバリが成功するように、Info.plistNSBonjourServices を指定します。

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

    appID はレシーバー ID で、GCKDiscoveryCriteria で定義されているものと同じ ID です。

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

    <key>NSBonjourServices</key>
    <array>
      <string>_googlecast._tcp</string>
      <string>_ABCD1234._googlecast._tcp</string>
    </array>
  3. NSLocalNetworkUsageDescriptionInfo.plist に追加する

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

    <key>NSLocalNetworkUsageDescription</key>
    <string>$<PRODUCT_NAME} はローカル ネットワークを使用して、Wi-Fi ネットワーク上の Cast 対応デバイスを検出します。</string>

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

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

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

カスタマイズ

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

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

新しいフラグを使用して、デバイスの検出の開始時間と UX の特定の要素の動作を制御できます。

startDiscoveryAfterFirstTapOnCastButton: BOOL(true/false)

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

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

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

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

よくある質問

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

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

新しい Cast SDK でアプリを再リリースした場合、iOS 13 以前を搭載したユーザーはどうなりますか?

アプリの再リリース前と同様のユーザー エクスペリエンスが引き続き表示されます。ユーザーに表示される変更は iOS 14 で動作するユーザーに限定されます。

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

  • アプリの Info.plist を更新して、ローカル ネットワーク使用状況の説明を含めます。
  • アプリの Info.plistNSBonjourServices を追加し、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)の権限に関するプロンプトが表示されるためです。その結果、アプリ内のランダムな場所に権限ダイアログが表示される可能性があります。

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

iOS 13

iOS 13 では、Google Cast SDK を使用するアプリに影響する新しい権限要件が導入されました。

Google Cast SDK v4.4.3 以降では、Bluetooth® の権限を必要としないゲストモードに対応していない SDK も用意されています。これは、デベロッパー サイトと新しい google-cast-sdk-no-bluetooth CocoaPods の両方で利用できます。なお、ゲストモードの機能は、ゲストモード対応デバイスに表示された PIN を使用して、同じネットワークに接続しなくても特定の送信元内でキャスト デバイスを検出できるようにする機能です。

iOS 13 用にアプリを準備するには、次の情報が必要です。

ゲストモードのサポートを維持する必要がある

  • Privacy - Bluetooth Always Usage Description キーを追加する必要があります。
  • ユーザーの Bluetooth® の使用方法を説明する文字列を Info.plist に追加します。

ゲストモードのサポートを削除する必要がある

  • アプリで Bluetooth のキャスト要件が回避される。
  • Bluetooth® がサポートされていない最新バージョンの Google Cast SDK を統合します。
  • これは、デベロッパー サイトと新しい google-cast-sdk-no-bluetooth CocoaPods の両方で利用できます。

アプリの内訳

現在使用している iOS SDK のバージョン別の内訳は次のとおりです。

iOS 12 SDK 以前でビルドされたアプリ

  • 推奨:iOS 13 では、デバイス ディスカバリのパフォーマンスが低下することがありますが、それでも機能します。利用可能な場合は、Cast SDK v4.4.4 にアップグレードすることを強くおすすめします。
  • iOS 13 では、Bluetooth® の権限をアプリに付与するよう求めるメッセージが表示されます。

iOS 13 SDK を使用してビルドされたアプリ

  • 必要な対応: Cast SDK 4.4.4 にアップデートするか、ユーザーが位置情報の利用許可を付与しなかった場合、キャスト アイコンが表示されないことがあります。iOS 13 で信頼性の高いキャスト体験を実現するには、Cast SDK 4.4.4 へのアップグレードが必要です。
  • ゲストモードを統合する方法、または Google Cast SDK でゲストモードを無効にする方法(Bluetooth® に対応していない場合)について詳しくは、デベロッパー向けドキュメントをご覧ください。