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 アプリが引き続き正常に動作するように、Cast SDK v4.6.0 以降に更新することをおすすめします。

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 を手動で pull します。

  2. NSBonjourServicesInfo.plist に追加する

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

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

    appID はレシーバー ID で、GCKDiscoveryCriteria で定義されている ID と同じです。

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

    <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.8.0 を使用してアプリを再リリースすることをおすすめします。

Customizations

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

デフォルトでは、ユーザーがキャスト アイコン(GCKUICastButton)を初めてタップしたときにキャスト デバイスの検出が開始されます。iOS 14 へのアップグレード後にローカル ネットワークでキャストアプリを初めて使用する場合は、新しい LNA インタースティシャルが表示され、その後に iOS ローカル ネットワーク アクセス権限のダイアログが表示されます。

新しいフラグを使用して、デバイス検出の開始タイミングと UX の特定の要素の動作を制御できるようになりました。

startDiscoveryAfterFirstTapOnCastButton: BOOL(true/false)

デフォルト値は true です。このフラグは、GCKCastOptions::disableDiscoveryAutostart フラグが false に設定されている場合にのみ適用されます。

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 にアップグレードする必要があります。