iOS 權限和探索

現在,掃描區域網路裝置的應用程式會提示使用者,顯示單次授權對話方塊,以便尋找及連線至區域網路裝置。Cast 平台會使用區域網路尋找及控制 Cast 裝置,因此如果使用者拒絕授予權限,就無法投放內容。

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

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

Cast SDK 異動

首次投放

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

區域網路存取權限流程

無法投放

自 iOS 傳送端 SDK 4.6.0 版起,只要使用者連上 Wi-Fi,就會顯示「投放」按鈕。如果沒有可用的投放裝置,輕觸「投放」按鈕會顯示對話方塊,提示使用者無法投放的可能原因,如下圖所示:

無法使用 Cast 流程

更新應用程式

  1. 在專案中加入 Cast iOS SDK 4.8.6

    如果使用 Swift Package Manager,請將 google-cast-ios-sdk 套件更新至 4.8.6 版。

    否則,請 手動提取 SDK。

  2. 將「NSBonjourServices」新增至Info.plist

    請在 Info.plist 中指定 NSBonjourServices,允許系統成功探索區域網路。

    您必須將 _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 檔案中,為 NSLocalNetworkUsageDescription 新增應用程式專屬的權限字串,例如描述 Cast 探索和其他探索服務 (例如 DIAL)。

    <key>NSLocalNetworkUsageDescription</key>
    <string>${PRODUCT_NAME} uses the local network to discover Cast-enabled devices on your WiFi
    network.</string>

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

    Cast 區域網路存取權限對話方塊圖片
  4. 在 Apple 應用程式商店 重新發布應用程式

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

自訂項目

開始探索投放裝置

根據預設,使用者首次輕觸「投放」按鈕 (GCKUICastButton) 時,系統會啟動投放裝置探索功能。如果使用者首次嘗試在區域網路上使用投放應用程式,系統會先顯示新的 LNA 插頁式廣告,接著顯示 iOS 區域網路存取權限對話方塊。

您可以使用新旗標,控制裝置探索的啟動時機,以及使用者體驗中特定元素的行為:

startDiscoveryAfterFirstTapOnCastButton: BOOL(true/false)

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

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

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

如果設為 false,系統會根據 GCKCastOptions::disableDiscoveryAutostart 旗標的值,開始探索裝置。

常見問題

如果我使用 Cast SDK v4.4.8 和 Xcode 12 重新發布 Cast 傳送端應用程式,會發生什麼事?

除非您已取得 Apple 的網路多點傳播授權,否則應用程式可能無法在區域網路上探索 Cast 裝置。請注意,Apple 不會僅為了支援 Cast 而授予多點傳播授權。 如果您打算使用 Xcode 12 建構,請使用 Cast 4.6.0 發布應用程式。

新版 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) 權限提示。這可能會導致權限對話方塊隨機出現在應用程式中。

如果開發人員為應用程式建構自訂裝置挑選器,則必須在首次啟動裝置掃描前,提供一次性插頁式廣告。