iOS の権限と検出

iOS 14 以降、オペレーティング システムはキャストのユーザー エクスペリエンスに影響する新しい制限と権限を適用します。これは Cast 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 向けにビルドしている場合は、Cast SDK v4.6.0 以降に更新して、Cast アプリが引き続き正常に動作するようにすることをおすすめします。

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.8.0 をプロジェクトに追加する

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

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

  2. NSBonjourServicesInfo.plist に追加する

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

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

    appID は、receivedID です。これは、GCKDiscoveryCriteria で定義された ID と同じです。

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

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

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

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

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

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

    また、できるだけ早く 4.8.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 を含むキャスト センダー アプリを再リリースするとどうなりますか?

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 の両方から入手できます。

アプリの詳細

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