-
Notifications
You must be signed in to change notification settings - Fork 1.5k
/
AppDelegate.swift
122 lines (107 loc) · 4.37 KB
/
AppDelegate.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
//
// Copyright (c) 2016 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
// [START auth_import]
import Firebase
// [END auth_import]
// [START google_import]
import GoogleSignIn
// [END google_import]
import FBSDKCoreKit
@UIApplicationMain
// [START signin_delegate]
class AppDelegate: UIResponder, UIApplicationDelegate, GIDSignInDelegate {
// [END signin_delegate]
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions
launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// [START firebase_configure]
// Use Firebase library to configure APIs
FirebaseApp.configure()
// [END firebase_configure]
// [START setup_gidsignin]
GIDSignIn.sharedInstance().clientID = FirebaseApp.app()?.options.clientID
GIDSignIn.sharedInstance().delegate = self
// [END setup_gidsignin]
ApplicationDelegate.shared.application(application,
didFinishLaunchingWithOptions:launchOptions)
return true
}
// [START new_delegate]
@available(iOS 9.0, *)
func application(_ application: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any])
-> Bool {
// [END new_delegate]
return self.application(application,
open: url,
// [START new_options]
sourceApplication:options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String,
annotation: [:])
}
// [END new_options]
// [START old_delegate]
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
// [END old_delegate]
if handlePasswordlessSignIn(withURL: url) {
return true
}
if GIDSignIn.sharedInstance().handle(url) {
return true
}
return ApplicationDelegate.shared.application(application,
open: url,
// [START old_options]
sourceApplication: sourceApplication,
annotation: annotation)
}
// [END old_options]
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
return userActivity.webpageURL.flatMap(handlePasswordlessSignIn)!
}
func handlePasswordlessSignIn(withURL url: URL) -> Bool {
let link = url.absoluteString
// [START is_signin_link]
if Auth.auth().isSignIn(withEmailLink: link) {
// [END is_signin_link]
UserDefaults.standard.set(link, forKey: "Link")
(window?.rootViewController as? UINavigationController)?.popToRootViewController(animated: false)
window?.rootViewController?.children[0].performSegue(withIdentifier: "passwordless", sender: nil)
return true
}
return false
}
// [START headless_google_auth]
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error?) {
// [START_EXCLUDE]
guard let controller = GIDSignIn.sharedInstance().presentingViewController as? MainViewController else { return }
// [END_EXCLUDE]
if let error = error {
// [START_EXCLUDE]
controller.showMessagePrompt(error.localizedDescription)
// [END_EXCLUDE]
return
}
// [START google_credential]
guard let authentication = user.authentication else { return }
let credential = GoogleAuthProvider.credential(withIDToken: authentication.idToken,
accessToken: authentication.accessToken)
// [END google_credential]
// [START_EXCLUDE]
controller.firebaseLogin(credential)
// [END_EXCLUDE]
}
// [END headless_google_auth]
}