iOS の権限と検出

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

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

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 向けにビルドする場合は、キャスト SDK が引き続き適切に動作するように、Cast SDK v4.6.0 以降に更新することをおすすめします。

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

キャスト SDK の変更

初回キャスト

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

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

キャストできません

iOS の送信者 SDK 4.6.0 以降では、ユーザーが Wi-Fi に接続されているときに必ずキャスト アイコンが表示されます。キャスト デバイスが利用できないときにキャスト アイコンをタップすると、キャストが利用できない場合について考えられるヒントをユーザーに示すダイアログが表示されます。次のモックの例をご覧ください。

キャストできないフロー

iOS 14 でアプリを更新する

  1. プロジェクトに iOS 用 Cast 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」を実際のアプリ ID に置き換えます。

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

    キャスト ディスカバリや各種の検出サービス(DIAL など)を説明するために、NSLocalNetworkUsageDescription のアプリ用権限文字列を Info.plist ファイルに追加して、ローカル ネットワーク プロンプトに表示されるメッセージをカスタマイズすることを強くおすすめします。

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

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

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

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

Customizations

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

デフォルトでは、ユーザーが初めてキャスト アイコン(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 を追加し、キャストの 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 に説明する文字列を追加します。

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

  • アプリで Cast 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 にアップグレードする必要があります。
  • ゲストモードを統合するか、Bluetooth® に対応していない Google Cast SDK でゲストモードを無効にする方法については、デベロッパー向けドキュメントをご覧ください。