iOS 權限和探索

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

iOS 14

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

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

為了改善使用者體驗,我們針對採用標準裝置挑選器的應用程式,調整 SDK 的使用者體驗。這些使用者體驗修改內容會讓使用者更清楚瞭解為何需要本機網路存取權限,以及如何在停用區域網路裝置存取權的情況下啟用投放功能。

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

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

Cast SDK 變更

首次投放

當使用者首次嘗試投放時,系統會顯示區域網路存取權 (LNA) 插頁式廣告對話方塊,說明需要區域網路存取權的原因,接著是 Apple 提供的 iOS 區域網路存取權限提示。下方模擬圖說明瞭整個流程:

區域網路存取權限流程

無法投放

自 iOS 傳送端 SDK 4.6.0 起,當使用者連上 Wi-Fi 時,一律會顯示「投放」按鈕。如果無法使用投放裝置,輕觸「投放」按鈕就會顯示對話方塊,讓使用者提示無法使用 Cast 的可能原因,如下方的模擬畫面所示:

無法投放內容的流程

在 iOS 14 上更新應用程式

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

    如果您使用 CocoaPods,請使用 pod update 在專案中新增 4.8.1 SDK。

    否則,請 手動提取 SDK

  2. Info.plist 中新增 NSBonjourServices

    Info.plist 中指定 NSBonjourServices,讓區域網路探索在 iOS 14 上成功。

    您必須同時將 _googlecast._tcp_<your-app-id>._googlecast._tcp 新增為服務,裝置探索功能才能正常運作。

    appID 是您的接收器 ID,與 GCKDiscoveryCriteria 中定義的 ID 相同。

    更新以下 NSBonjourServices 範例定義,並將「ABCD1234」換成您的應用程式 ID。

    <key>NSBonjourServices</key>
    <array>
      <string>_googlecast._tcp</string>
      <string>_ABCD1234._googlecast._tcp</string>
    </array>
  3. Info.plist 中新增 NSLocalNetworkUsageDescription

    強烈建議您在應用程式的 NSLocalNetworkUsageDescription 中為 NSLocalNetworkUsageDescription 新增應用程式專屬權限字串,藉此自訂區域網路提示中顯示的訊息,例如描述 Cast 探索服務和其他探索服務 (例如 DIAL)。Info.plist

    <key>NSLocalNetworkUsageDescription</key>
    <string>${PRODUCT_NAME} 會使用區域網路尋找你的 Wi-Fi 網路上支援 Cast 的裝置。</string>

    此訊息會顯示在 iOS 區域網路存取權對話方塊中,如模擬畫面所示。

    「投放區域網路存取權限」對話方塊圖片
  4. 將應用程式重新發布到 Apple App Store

    我們也建議您盡快使用 4.8.1 版重新發布應用程式。

自訂項目

啟動投放裝置探索

根據預設,系統會在使用者第一次輕觸「投放」按鈕 (GCKUICastButton) 時啟動探索投放裝置的功能。如果這是使用者第一次在升級到 iOS 14 後嘗試在區域網路上使用 Cast 應用程式,系統會顯示新的 LNA 插頁,後面接著「iOS 區域網路存取權」對話方塊。

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

startDiscoveryAfterFirstTapOnCastButton: BOOL(true/false)

預設值為 true。 只有標記 GCKCastOptions::disableDiscoveryAutostart 設為 false 時,才能使用這個標記。

如果設為 true,當使用者首次輕觸 GCKUICastButton 時,系統會開始探索投放裝置。系統會向使用者顯示資訊訊息,說明需要區域網路權限的原因。之後,畫面會顯示 iOS 14 LNA 訊息。系統會在確認訊息後開始探索投放裝置。

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

如果設為 false,系統將根據標記 GCKCastOptions::disableDiscoveryAutostart 的值啟動裝置探索作業。

常見問題

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

除非你向 Apple 取得網路多點傳播授權,否則你的應用程式可能無法找到區域網路中的投放裝置。請注意,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 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,否則如果使用者未授予位置存取權,投放按鈕可能不會顯示。必須升級至 Cast SDK 4.4.4,才能在 iOS 13 上享有穩定的投放體驗。