aboutsummaryrefslogtreecommitdiffhomepage
path: root/Example/tvOSSample/tvOSSample/AuthViewController.swift
diff options
context:
space:
mode:
Diffstat (limited to 'Example/tvOSSample/tvOSSample/AuthViewController.swift')
-rw-r--r--Example/tvOSSample/tvOSSample/AuthViewController.swift86
1 files changed, 86 insertions, 0 deletions
diff --git a/Example/tvOSSample/tvOSSample/AuthViewController.swift b/Example/tvOSSample/tvOSSample/AuthViewController.swift
new file mode 100644
index 0000000..72351d3
--- /dev/null
+++ b/Example/tvOSSample/tvOSSample/AuthViewController.swift
@@ -0,0 +1,86 @@
+// Copyright 2017 Google
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+import UIKit
+import FirebaseAuth
+
+class AuthViewController: UIViewController {
+
+ // MARK: - User Interface
+
+ /// A stackview containing all of the buttons to providers (Email, OAuth, etc).
+ @IBOutlet weak var providers: UIStackView!
+
+ /// A stackview containing a signed in label and sign out button.
+ @IBOutlet weak var signedIn: UIStackView!
+
+ /// A label to display the status for the signed in user.
+ @IBOutlet weak var signInStatus: UILabel!
+
+ // MARK: - User Actions
+
+ @IBAction func signOutButtonHit(_ sender: UIButton) {
+ // Sign out via Auth and update the UI.
+ try? Auth.auth().signOut()
+
+ setUserSignedIn(nil)
+ }
+
+ // MARK: - View Controller Lifecycle
+
+ override func viewDidLoad() {
+ super.viewDidLoad()
+
+ // Update the UI based on the current user (if there is one).
+ setUserSignedIn(Auth.auth().currentUser)
+ }
+
+ override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
+ let destination = segue.destination
+ if let emailVC = destination as? EmailLoginViewController {
+ emailVC.delegate = self
+ }
+ }
+
+ // MARK: - Internal Helpers
+
+ private func setUserSignedIn(_ user: User?) {
+ if let user = user {
+ providers.isHidden = true
+ signedIn.isHidden = false
+
+ signInStatus.text = "User is signed in via \(user.providerID) and the UID \(user.uid)"
+ } else {
+ // User is signed out, hide the signed in state and show the providers.
+ providers.isHidden = false
+ signedIn.isHidden = true
+ }
+ }
+}
+
+// MARK: - EmailLoginDelegate conformance.
+
+extension AuthViewController: EmailLoginDelegate {
+ func emailLogin(_ controller: EmailLoginViewController, signedInAs user: User) {
+ setUserSignedIn(user)
+ dismiss(animated: true)
+ }
+
+ func emailLogin(_ controller: EmailLoginViewController, failedWithError error: Error) {
+ print("Fail..... \(error)")
+ DispatchQueue.main.async {
+ controller.presentError(with: "There was an issue logging in. Please try again.")
+ }
+ }
+}