iOS の権限と検出

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

iOS 14

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

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

Google は、ユーザー エクスペリエンスを向上させるために、標準のデバイス選択ツールを使用しているアプリ向けに、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 Sender SDK 4.6.0 以降では、ユーザーが Wi-Fi に接続しているときには、常にキャスト アイコンが表示されます。キャスト デバイスを利用できない場合は、キャスト アイコンをタップすると、以下のモックのように、キャストが利用できない理由についてのヒントをユーザーに提供するダイアログが表示されます。

キャストを使用したフローを利用できません

iOS 14 でのアプリの更新

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

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

    それ以外の場合は、 SDK を手動で取り込みます。

  2. NSBonjourServicesInfo.plist に追加する

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

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

    appID は receiverID であり、GCKDiscoveryCriteria で定義されている ID と同じです。

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

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

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

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

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

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

    また、できる限り早急に 4.8.1 を使用するアプリを再リリースすることをおすすめします。

カスタマイズ

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

デフォルトでは、ユーザーがキャスト アイコン(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 を更新して、ローカル ネットワークの使用方法の説明を追加します。
  • NSBonjourServices をアプリの Info.plist に追加し、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 へのアップグレードが必要です。