129 lines
4.1 KiB
Swift

//
// Copyright (c) Google Inc.
//
// 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 FirebaseInvites
import GoogleSignIn
import Firebase
// Match the ObjC symbol name inside Main.storyboard.
@objc(ViewController)
// [START viewcontroller_interfaces]
class ViewController: UIViewController, GIDSignInDelegate, GIDSignInUIDelegate, FIRInviteDelegate {
// [END viewcontroller_interfaces]
// [START viewcontroller_vars]
@IBOutlet weak var signOutButton: UIButton!
@IBOutlet weak var disconnectButton: UIButton!
@IBOutlet weak var inviteButton: UIButton!
@IBOutlet weak var statusText: UILabel!
// [END viewcontroller_vars]
// [START viewdidload]
override func viewWillAppear(animated: Bool) {
GIDSignIn.sharedInstance().delegate = self
GIDSignIn.sharedInstance().uiDelegate = self
GIDSignIn.sharedInstance().signInSilently()
toggleAuthUI()
}
// [END viewdidload]
// [START signin_handler]
func signIn(signIn: GIDSignIn!, didSignInForUser user: GIDGoogleUser!, withError error: NSError!) {
if (error == nil) {
// User Successfully signed in.
statusText.text = "Signed in as \(user.profile.name)"
toggleAuthUI()
} else {
print("\(error.localizedDescription)")
toggleAuthUI()
}
}
// [END signin_handler]
// [START signout_tapped]
@IBAction func signOutTapped(sender: AnyObject) {
GIDSignIn.sharedInstance().signOut()
statusText.text = "Signed out"
toggleAuthUI()
}
// [END signout_tapped]
// [START disconnect_tapped]
@IBAction func disconnectTapped(sender: AnyObject) {
GIDSignIn.sharedInstance().disconnect()
statusText.text = "Disconnected"
toggleAuthUI()
}
func signIn(signIn: GIDSignIn!, didDisconnectWithUser user: GIDGoogleUser!, withError error: NSError!) {
toggleAuthUI()
}
// [END disconnect_tapped]
// [START invite_tapped]
@IBAction func inviteTapped(sender: AnyObject) {
if let invite = FIRInvites.inviteDialog() {
invite.setInviteDelegate(self)
// NOTE: You must have the App Store ID set in your developer console project
// in order for invitations to successfully be sent.
// A message hint for the dialog. Note this manifests differently depending on the
// received invation type. For example, in an email invite this appears as the subject.
invite.setMessage("Try this out!\n -\(GIDSignIn.sharedInstance().currentUser.profile.name)")
// Title for the dialog, this is what the user sees before sending the invites.
invite.setTitle("Invites Example")
invite.setDeepLink("app_url")
invite.setCallToActionText("Install!")
invite.setCustomImage("https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png")
invite.open()
}
}
// [END invite_tapped]
// [START toggle_auth]
func toggleAuthUI() {
if (GIDSignIn.sharedInstance().hasAuthInKeychain()) {
// Signed in
signOutButton.enabled = true
disconnectButton.enabled = true
inviteButton.enabled = true
} else {
signOutButton.enabled = false
disconnectButton.enabled = false
inviteButton.enabled = false
self.performSegueWithIdentifier("SignedOutScreen", sender:self)
}
}
// [END toggle_auth]
// [START invite_finished]
func inviteFinishedWithInvitations(invitationIds: [AnyObject], error: NSError?) {
if (error != nil) {
print("Failed: " + error!.localizedDescription)
} else {
print("Invitations sent")
}
}
// [END invite_finished]
// Sets the status bar to white.
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent
}
}