iOS の権限と検出

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

iOS 14

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

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

ユーザー エクスペリエンスを向上させるため、標準のデバイス選択ツールを使用しているアプリの 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 デバイスを検出できるように、基盤となる検出メカニズムの変更が含まれています。キャスト アイコンが常に表示されるようになります。キャスト アイコンをタップしたときに利用可能なデバイスがない場合は、デバイスが利用できない理由に関するガイダンスと、ローカル ネットワークへのアクセス権を再度有効にする方法に関する情報が記載されたダイアログが表示されます。

Cast SDK の変更点

初回キャスト

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

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

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

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

Flow with Cast を利用できない

iOS 14 でアプリを更新する

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

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

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

  2. NSBonjourServicesInfo.plist に追加する

    iOS 14 でローカル ネットワーク検出を成功させるには、Info.plistNSBonjourServices を指定します。

    デバイス検出が正しく機能するには、_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. NSLocalNetworkUsageDescriptionInfo.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.3 を使用してアプリを再リリースすることをおすすめします。

カスタマイズ

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

デフォルトでは、ユーザーがキャストボタン(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 を使用してキャスト送信側アプリを再リリースするとどうなりますか?

Apple からネットワーク マルチキャスト利用資格を取得していない場合、アプリはローカル ネットワーク上の Cast デバイスを検出できない可能性があります。Apple は、Cast のサポートのみを目的としたマルチキャスト利用資格を付与しません。 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 の両方で利用できます。

アプリの内訳

現在使用している 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 にアップグレードする必要があります。