iOS の権限と検出

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

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 に接続している場合、キャストボタンが常に表示されます。キャスト デバイスが利用できない場合は、キャスト ボタンをタップすると、キャストを利用できない理由の候補を示すダイアログが表示されます(以下のモックをご覧ください)。

Cast を使用したフローを利用できない

iOS 14 でのアプリの更新

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

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

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

  2. NSBonjourServicesInfo.plist に追加する

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

    デバイス検出が正しく機能するように、_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 に追加する

    ローカル ネットワーク プロンプトに表示されるメッセージをカスタマイズすることを強くおすすめします。そのためには、アプリの 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 を使用してアプリを再リリースすることもおすすめします。

カスタマイズ

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

デフォルトでは、ユーザーが Cast ボタン(GCKUICastButton)を初めてタップしたときに、Cast デバイスの検出が開始されます。iOS 14 へのアップグレード後にユーザーがローカル ネットワークで Cast アプリを初めて使用しようとすると、新しい 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 は 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 アプリストアに再リリースします。

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 へのアップグレードが必要です。