diff --git a/README.md b/README.md index 925a66b..b119d0a 100644 --- a/README.md +++ b/README.md @@ -6,17 +6,14 @@ Flutter Cast Framework is a POC of a flutter plugin that lets you use Chromecast ## Exposed APIs -Currently only the following APIs are integrated: +Currently only the following APIs are integrated (both Android and iOS): -* Android: - * Cast State - * Session state - * Send custom message - * Listen to received custom messages - * Cast Button - * Chromecast connection -* iOS: - * Not implemented yet +* Cast State +* Session state +* Send custom message +* Listen to received custom messages +* Cast Button +* Chromecast connection ## Setup @@ -45,7 +42,7 @@ import com.google.android.gms.cast.framework.SessionProvider class CastOptionsProvider : OptionsProvider { override fun getCastOptions(context: Context): CastOptions { return CastOptions.Builder() - .setReceiverApplicationId("4F8B3483") + .setReceiverApplicationId("4F8B3483") // Your receiver Application ID .build() } @@ -71,6 +68,68 @@ Add the following entry in the `AndroidManifest.xml` file under the ` *General* tab > *Deployment Info* > *Target*: set 9.0 or higher + +#### 2. Install iOS dependencies + +When Xcode is closed, open a terminal at the root folder of your project and run: + +```bash +cd ios && pod install +``` + +#### 3. Open project in Xcode + +To open your flutter project with Xcode from Android Studio: *Tools* > *Flutter* > *Open iOS module in Xcode* + +#### 4. Chromecast SDK setup + +Add the following lines to your `AppDelegate.swift`: + +```diff + import UIKit + import Flutter ++import GoogleCast + + @UIApplicationMain +-@objc class AppDelegate: FlutterAppDelegate { ++@objc class AppDelegate: FlutterAppDelegate, GCKLoggerDelegate { ++ let kReceiverAppID = "4F8B3483" // Your receiver Application ID ++ let kDebugLoggingEnabled = true ++ + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]? + ) -> Bool { ++ let criteria = GCKDiscoveryCriteria(applicationID: kReceiverAppID) ++ let options = GCKCastOptions(discoveryCriteria: criteria) ++ GCKCastContext.setSharedInstanceWith(options) ++ ++ // Enable logger. ++ GCKLogger.sharedInstance().delegate = self ++ + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } ++ ++ // MARK: - GCKLoggerDelegate ++ ++ func logMessage(_ message: String, ++ at level: GCKLoggerLevel, ++ fromFunction function: String, ++ location: String) { ++ if (kDebugLoggingEnabled) { ++ print(function + " - " + message) ++ } ++ } + } +``` + ## Tech notes I used this project to test the capabilities of the following technologies: diff --git a/example/ios/Runner/AppDelegate.swift b/example/ios/Runner/AppDelegate.swift index 11e78fb..10ed327 100644 --- a/example/ios/Runner/AppDelegate.swift +++ b/example/ios/Runner/AppDelegate.swift @@ -4,13 +4,14 @@ import GoogleCast @UIApplicationMain @objc class AppDelegate: FlutterAppDelegate, GCKLoggerDelegate { - let kReceiverAppID = kGCKDefaultMediaReceiverApplicationID + let kReceiverAppID = "4F8B3483" let kDebugLoggingEnabled = true override func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]? ) -> Bool { + // todo: find a way to init chromecast inside library let criteria = GCKDiscoveryCriteria(applicationID: kReceiverAppID) let options = GCKCastOptions(discoveryCriteria: criteria) GCKCastContext.setSharedInstanceWith(options)