iOS 權限和探索

從 iOS 14 開始,作業系統會強制執行新的限制和權限,進而影響 Google Cast 使用者體驗。這也會影響您在應用程式中建構 Cast SDK 的方式。如要讓應用程式在最新版 iOS 中維持 Cast 功能,您必須更新應用程式,以處理這些權限異動。

iOS 14

開發人員應將 iOS Cast 傳送端應用程式更新至 Google Cast SDK v4.6.0 以上版本。這些版本支援 iOS 14 和相關需求。

從 iOS 14 開始,掃描區域網路裝置的應用程式會顯示一次性權限對話方塊,提示使用者尋找及連線至區域網路裝置。Cast 平台會使用區域網路探索及控制 Cast 裝置,因此如果使用者拒絕授權,就無法投放內容。

為提升使用者體驗,我們將對使用標準裝置挑選器的應用程式,進行 SDK 的 UX 修改。這些 UX 調整項目可讓使用者更清楚瞭解為何需要區域網路存取權,以及在停用區域網路裝置存取權後,如何啟用投放功能。

只要使用 Xcode 11.7 以下版本建構應用程式,以 Cast SDK 4.4.8 以下版本建構的應用程式就能繼續運作。如果您使用 Xcode 12 以上版本建構 iOS 14 應用程式,建議您更新至 Cast SDK 4.6.0 以上版本,確保 Cast 應用程式能繼續正常運作。

如要透過 CocoaPods 下載 Cast iOS SDK 4.6.0 以上版本,請按照 CocoaPods 設定操作;如要手動下載,請按照手動設定操作。這個版本包含基礎探索機制的變更,可讓使用 Xcode 12 建構的應用程式在網路上尋找 Cast 裝置。「投放」按鈕現在應該會一律顯示。如果使用者輕觸「投放」按鈕時沒有可用裝置,系統會顯示對話方塊,說明裝置可能無法使用的原因,包括如何重新啟用區域網路存取權。

Cast SDK 異動

首次投放

使用者首次嘗試投放內容時,系統會顯示區域網路存取權 (LNA) 中間頁面對話方塊,說明為何需要區域網路存取權,接著顯示 Apple 提供的 iOS 區域網路存取權提示。以下模擬畫面說明流程:

區域網路存取權權限流程

無法投放

從 iOS 傳送端 SDK 4.6.0 開始,只要使用者連上 Wi-Fi,系統一律會顯示 Cast 按鈕。如果無法使用 Cast 裝置,輕觸「投放」按鈕會顯示對話方塊,提供 Cast 無法使用的可能原因提示,如下方模擬畫面所示:

無法使用 Flow with Cast

在 iOS 14 上更新應用程式

  1. 將 Cast iOS SDK 4.8.3 新增至專案

    如果使用 CocoaPods,請使用 pod update 將 4.8.3 版 SDK 新增至專案。

    否則,請 手動提取 SDK

  2. NSBonjourServices 新增至 Info.plist

    Info.plist 中指定 NSBonjourServices,允許 iOS 14 成功偵測區域網路。

    您必須同時新增 _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. NSLocalNetworkUsageDescription 新增至 Info.plist

    強烈建議您在應用程式的 Info.plist檔案中加入應用程式專屬的權限字串,自訂「區域網路」提示中顯示的訊息,例如說明 Cast 探索和其他探索服務 (如 DIAL)。NSLocalNetworkUsageDescription

    <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 應用程式,系統會顯示新的區域網路存取權限中繼頁面,接著顯示 iOS 區域網路存取權限對話方塊。

我們提供新的旗標,讓您控管裝置探索作業的啟動時間,以及特定 UX 元素的行為:

startDiscoveryAfterFirstTapOnCastButton: BOOL(true/false)

預設值為 true。只有在 GCKCastOptions::disableDiscoveryAutostart 旗標設為 false 時,這個旗標才適用。

如果設為 true,使用者第一次輕觸 GCKUICastButton 時,系統就會開始探索 Cast 裝置。系統會向使用者顯示資訊訊息,說明為何需要本機網路權限。該訊息後方會顯示 iOS 14 LNA 訊息。 確認訊息後,系統就會開始探索投放裝置。

後續啟動應用程式時,GCKUICastButton 一律會顯示。

如果設為 false,裝置探索作業就會根據旗標 GCKCastOptions::disableDiscoveryAutostart 的值啟動。

常見問題

如果我使用 Cast SDK 4.4.8 版和 Xcode 12 重新發布 Cast 傳送端應用程式,會發生什麼情況?

除非您已向 Apple 取得網路多點播送權利,否則應用程式可能無法探索區域網路上的 Cast 裝置。 請注意,Apple 不會僅為了支援 Cast 而授予多播權利。 如果您打算使用 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 中首次啟動裝置掃描前,提供一次性中介插頁式廣告。

iOS 13

iOS 13 推出新的權限規定,會影響使用 Google Cast SDK 的應用程式。

自 Google Cast SDK v4.4.3 版起,我們提供額外的 SDK,不需 Bluetooth® 權限。您可以在開發人員網站和新的 google-cast-sdk-no-bluetooth Cocoapods 中使用這項功能。

應用程式詳情

以下是依據目前使用的 iOS SDK 版本所做的分類:

使用 iOS 12 SDK 以下版本建構的應用程式

  • 建議採取行動:在 iOS 13 上執行時,裝置探索效能可能會降低,但仍可運作。強烈建議開發人員在 Cast SDK v4.4.4 發布後立即升級。
  • iOS 13 會提示使用者授予應用程式藍牙® 權限。

使用 iOS 13 SDK 建構的應用程式

  • 敬請採取行動:更新至 Cast SDK 4.4.4,否則使用者未授予位置資訊權限時,系統可能不會顯示 Cast 按鈕。如要在 iOS 13 上確保投放體驗穩定可靠,請升級至 Cast SDK 4.4.4。