Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Google Cast

Mobile Flock
September 14, 2019

Google Cast

The advantages of cast enabled mobile applications and will do a walkthrough on how we can create cast enabled applications.

Mobile Flock

September 14, 2019
Tweet

More Decks by Mobile Flock

Other Decks in Technology

Transcript

  1. Or

  2. import GoogleCast … { private var castButton: GCKUICastButton … override

    func viewDidLoad() { … castButton = GCKUICastButton(frame: CGRect(x: CGFloat(0), y: CGFloat(0), width: CGFloat(24), height: CGFloat(24))) castButton.tintColor = UIColor.white navigationItem.rightBarButtonItem = UIBarButtonItem(customView: castButton) } }
  3. import GoogleCast … class AppDelegate: UIResponder, UIApplicationDelegate { … func

    application(_: UIApplication, didFinishLaunchingWithOptions _: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { … let options = GCKCastOptions(discoveryCriteria: GCKDiscoveryCriteria(applicationID: kReceiverAppID)) options.physicalVolumeButtonsWillControlDeviceVolume = true GCKCastContext.setSharedInstanceWith(options) // ***ADD THE CAST BUTTON HERE AS WELL!*** } }
  4. import GoogleCast … class sampleViewController: UIViewController, GCKSessionManagerListener, GCKRemoteMediaClientListener, LocalPlayerViewDelegate, GCKRequestDelegate

    { … private var sessionManager: GCKSessionManager! … required init?(coder: NSCoder) { super.init(coder: coder) sessionManager = GCKCastContext.sharedInstance().sessionManager … } … }
  5. func sessionManager(_: GCKSessionManager, didStart session: GCKSession) { print("MediaViewController: sessionManager didStartSession

    \(session)") setQueueButtonVisible(true) switchToRemotePlayback() } func sessionManager(_: GCKSessionManager, didResumeSession session: GCKSession) { print("MediaViewController: sessionManager didResumeSession \(session)") setQueueButtonVisible(true) switchToRemotePlayback() } /* CREATE FUNCTIONS “didEnd”, “didFailToStartSessionWithError”, “didFailToResumeSession” */
  6. func loadSelectedItem(byAppending appending: Bool) { print("enqueue item \(String(describing: mediaInfo))") if

    let remoteMediaClient = sessionManager.currentCastSession?.remoteMediaClient { // Set up the metadata & mediaInfoBuilder let mediaQueueItemBuilder = GCKMediaQueueItemBuilder() mediaQueueItemBuilder.mediaInformation = mediaInfo mediaQueueItemBuilder.autoplay = true let mediaQueueItem = mediaQueueItemBuilder.build() if appending { let request = remoteMediaClient.queueInsert(mediaQueueItem, beforeItemWithID: kGCKMediaQueueInvalidItemID) request.delegate = self }
  7. else { let queueDataBuilder = GCKMediaQueueDataBuilder(queueType: .generic) queueDataBuilder.items = [mediaQueueItem]

    queueDataBuilder.repeatMode = remoteMediaClient.mediaStatus?.queueRepeatMode ?? .off let mediaLoadRequestDataBuilder = GCKMediaLoadRequestDataBuilder() mediaLoadRequestDataBuilder.queueData = queueDataBuilder.build() let request = remoteMediaClient.loadMedia(with: mediaLoadRequestDataBuilder.build()) request.delegate = self } }
  8. func application(_: UIApplication, didFinishLaunchingWithOptions _: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

    ... let appStoryboard = UIStoryboard(name: "Main", bundle: nil) guard let navigationController = appStoryboard.instantiateViewController(withIdentifier: "MainNavigation") as? UINavigationController else { return false } let castContainerVC = GCKCastContext.sharedInstance().createCastContainerController(for: navigationController) as GCKUICastContainerViewController castContainerVC.miniMediaControlsItemEnabled = true window = UIWindow(frame: UIScreen.main.bounds) window?.rootViewController = castContainerVC window?.makeKeyAndVisible() ... }
  9. var isCastControlBarsEnabled: Bool { get { let castContainerVC = (window?.rootViewController

    as? GCKUICastContainerViewController) return castContainerVC!.miniMediaControlsItemEnabled } set(notificationsEnabled) { var castContainerVC: GCKUICastContainerViewController? castContainerVC = (window?.rootViewController as? GCKUICastContainerViewController) castContainerVC?.miniMediaControlsItemEnabled = notificationsEnabled } }
  10. override func viewDidLoad() { ... NotificationCenter.default.addObserver(self, selector: #selector(castDeviceDidChange), name: NSNotification.Name.gckCastStateDidChange,

    object: GCKCastContext.sharedInstance()) } @objc func castDeviceDidChange(_: Notification) { if GCKCastContext.sharedInstance().castState != .noDevicesAvailable { GCKCastContext.sharedInstance().presentCastInstructionsViewControllerOnce(with: castButton) } }
  11. Inside of didFinishLaunchingWithOptions in the AppDelegate:- GCKCastContext.sharedInstance().useDefaultExpandedMediaControls = true To

    launch the Expanded controller:- GCKCastContext.sharedInstance().presentDefaultExpandedMediaControls()