iOS 權限和探索

自 iOS 14 起,作業系統將強制執行影響投放使用者體驗的新限制和權限。這也會影響您在應用程式中建構 Cast SDK 的方式。為了讓應用程式在最新版 iOS 中維持 Cast 功能,您必須更新以處理這些權限變更。

iOS 14

開發人員應將 iOS Cast 傳送端應用程式更新至 Google Cast SDK 4.6.0 以上版本。這些版本支援 iOS 14 及其相關規定。

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

為了改善使用者體驗,我們會針對使用標準裝置挑選器的應用程式,對 SDK 進行一些使用者體驗修改。這些使用者體驗修改內容可讓使用者更清楚瞭解為何需要區域網路存取權,以及在區域網路裝置存取權遭停用時,如何啟用投放功能。

只要使用 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 的流程

在 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 是接收端 ID,與 GCKDiscoveryCriteria 中定義的 ID 相同。

    更新下列範例 NSBonjourServices 定義,並將「ABCD1234」替換為您的 appID。

    <key>NSBonjourServices</key>
    <array>
      <string>_googlecast._tcp</string>
      <string>_ABCD1234._googlecast._tcp</string>
    </array>
  3. NSLocalNetworkUsageDescription 新增至 Info.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) 時啟動投放裝置探索功能。如果這是使用者首次嘗試在升級至 iOS 14 後,透過區域網路使用投放應用程式,系統會顯示新的 LNA 插頁廣告,接著顯示 iOS 區域網路存取權對話方塊。

您可以使用新的標記,控制裝置探索的開始時間,以及使用者體驗中特定元素的行為:

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 不會僅為了支援投放功能而授予多播授權。 如果您打算使用 Xcode 12 建構應用程式,應使用 Cast 4.6.0 發布應用程式。

如果我使用新的 Cast SDK 重新發布應用程式,使用 iOS 13 以下版本的使用者會獲得什麼體驗?

他們將繼續看到在應用程式重新發布前相同的使用者體驗。使用者可見的變更僅限於在 iOS 14 上執行的使用者。

發布 Cast SDK 新版本後,我需要採取哪些步驟才能更新應用程式?

  • 更新應用程式的 Info.plist,加入本機網路使用說明。
  • NSBonjourServices 新增至應用程式的 Info.plist,並提供 Cast 和應用程式 ID 的 Bonjour 服務名稱。
  • 升級傳送端應用程式,改用 Cast SDK 4.6.0。
  • 將應用程式重新發布至 Apple 應用程式商店。

為什麼升級至 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 4.4.3 版起,我們提供另一個不需要 Bluetooth® 權限的 SDK。這項功能可在開發人員網站和新的 google-cast-sdk-no-bluetooth Cocoapods 上使用。

應用程式分析

以下是依據您目前使用的 iOS SDK 版本提供的詳細說明:

使用 iOS 12 SDK 或更早版本建構的應用程式

  • 建議採取行動:在 iOS 13 上執行時,裝置探索功能的效能可能會降低,但仍可正常運作。我們強烈建議開發人員在 Cast SDK 4.4.4 版推出後升級至該版本。
  • iOS 13 會提示使用者授予應用程式藍牙® 權限。

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

  • 敬請採取行動:請更新至 Cast SDK 4.4.4,否則如果使用者未授予位置權限,可能就不會顯示投放按鈕。如要確保在 iOS 13 上獲得可靠的投放體驗,請務必升級至 Cast SDK 4.4.4。