good place with phone auth worked with bhai's phone, but need loading screen for the whole time

This commit is contained in:
talksik
2021-12-17 22:40:50 -08:00
parent 85aa21be55
commit 66853e5ddc
7 changed files with 69 additions and 46 deletions
-17
View File
@@ -29,7 +29,6 @@
89288EC7276756DF00E962C4 /* FirebaseDatabase in Frameworks */ = {isa = PBXBuildFile; productRef = 89288EC6276756DF00E962C4 /* FirebaseDatabase */; };
89288EC9276756DF00E962C4 /* FirebaseStorage in Frameworks */ = {isa = PBXBuildFile; productRef = 89288EC8276756DF00E962C4 /* FirebaseStorage */; };
89288ECB27675B9F00E962C4 /* OnboardingTemplateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89288ECA27675B9F00E962C4 /* OnboardingTemplateView.swift */; };
89AD556F276D63E4001658E0 /* PopupView in Frameworks */ = {isa = PBXBuildFile; productRef = 89AD556E276D63E4001658E0 /* PopupView */; };
89B46E71276893E200B74255 /* AuthSessionStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89B46E70276893E200B74255 /* AuthSessionStore.swift */; };
89BCABE2276B3CB0009E9B10 /* NavigationStack in Frameworks */ = {isa = PBXBuildFile; productRef = 89BCABE1276B3CB0009E9B10 /* NavigationStack */; };
89BCABE5276B3D58009E9B10 /* InnerCircleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89BCABE4276B3D58009E9B10 /* InnerCircleView.swift */; };
@@ -97,7 +96,6 @@
buildActionMask = 2147483647;
files = (
89288EC3276756DF00E962C4 /* FirebaseAnalytics in Frameworks */,
89AD556F276D63E4001658E0 /* PopupView in Frameworks */,
89BCABE2276B3CB0009E9B10 /* NavigationStack in Frameworks */,
89288EC5276756DF00E962C4 /* FirebaseAuth in Frameworks */,
89288EC7276756DF00E962C4 /* FirebaseDatabase in Frameworks */,
@@ -319,7 +317,6 @@
89288EC8276756DF00E962C4 /* FirebaseStorage */,
89F1386F2767F55F006680ED /* GoogleSignIn */,
89BCABE1276B3CB0009E9B10 /* NavigationStack */,
89AD556E276D63E4001658E0 /* PopupView */,
);
productName = "nirvana-ios";
productReference = 891A15DD27653A7000B26659 /* nirvana-ios.app */;
@@ -353,7 +350,6 @@
89288EC1276756DF00E962C4 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */,
89F1386E2767F55F006680ED /* XCRemoteSwiftPackageReference "GoogleSignIn-iOS" */,
89BCABE0276B3CB0009E9B10 /* XCRemoteSwiftPackageReference "swiftui-navigation-stack" */,
89AD556D276D63E4001658E0 /* XCRemoteSwiftPackageReference "PopupView" */,
);
productRefGroup = 891A15DE27653A7000B26659 /* Products */;
projectDirPath = "";
@@ -634,14 +630,6 @@
minimumVersion = 8.0.0;
};
};
89AD556D276D63E4001658E0 /* XCRemoteSwiftPackageReference "PopupView" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/exyte/PopupView";
requirement = {
kind = upToNextMajorVersion;
minimumVersion = 1.0.0;
};
};
89BCABE0276B3CB0009E9B10 /* XCRemoteSwiftPackageReference "swiftui-navigation-stack" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/matteopuc/swiftui-navigation-stack.git";
@@ -681,11 +669,6 @@
package = 89288EC1276756DF00E962C4 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */;
productName = FirebaseStorage;
};
89AD556E276D63E4001658E0 /* PopupView */ = {
isa = XCSwiftPackageProductDependency;
package = 89AD556D276D63E4001658E0 /* XCRemoteSwiftPackageReference "PopupView" */;
productName = PopupView;
};
89BCABE1276B3CB0009E9B10 /* NavigationStack */ = {
isa = XCSwiftPackageProductDependency;
package = 89BCABE0276B3CB0009E9B10 /* XCRemoteSwiftPackageReference "swiftui-navigation-stack" */;
@@ -118,15 +118,6 @@
"version": "2.30908.0"
}
},
{
"package": "PopupView",
"repositoryURL": "https://github.com/exyte/PopupView",
"state": {
"branch": null,
"revision": "4cf8c01473282b3711e6780bd78ef81add97f6e2",
"version": "1.0.3"
}
},
{
"package": "Promises",
"repositoryURL": "https://github.com/google/promises.git",
+2
View File
@@ -19,5 +19,7 @@
<array>
<string>Satisfy-Regular.ttf</string>
</array>
<key>UIUserInterfaceStyle</key>
<string>Light</string>
</dict>
</plist>
+7 -3
View File
@@ -44,6 +44,7 @@ final class AuthSessionStore: ObservableObject, SessionStore {
self.setupAuthListen()
}
// MARK: OLD for google sign in with link
func signInOrCreateUser() {
if GIDSignIn.sharedInstance.currentUser == nil {
guard
@@ -76,6 +77,7 @@ final class AuthSessionStore: ObservableObject, SessionStore {
}
}
// MARK: OLD for google sign in with link
func firebaseAuth(withCredentials authCred: AuthCredential) {
Auth.auth().signIn(with: authCred) { result, error in
if error != nil {
@@ -113,12 +115,14 @@ final class AuthSessionStore: ObservableObject, SessionStore {
self.handler = Auth.auth().addStateDidChangeListener { (auth, user) in
print("auth listener activated")
// get the user from the auth table in firebase auth
if let user = user {
// if we have a user, create a new user model
print("Got user: \(user.displayName!)")
self.user = User(
_uid: user.uid, _email: user.email, _displayName: user.displayName, _profilePic: user.photoURL, _phoneNumber: user.phoneNumber)
print("Got user: \(user.uid)")
print("phone number: \(user.phoneNumber!)")
// TODO: go to firestore and get full user document for the current authenticated user
// and have this in environment for all pages to access without having to fetch all the time
self.sessionState = .isAuthenticated
} else {
// if we don't have a user, set our session to nil
@@ -216,7 +216,6 @@ struct InnerCircleView: View {
}
.scaleEffect(scale)
.padding(scale * 5)
} // geometry reader
.offset(
x: honeycombOffSetX(value),
@@ -8,8 +8,6 @@
import SwiftUI
import NavigationStack
import Combine
// TODO: maybe this is useless and just do my own toasts and alerts
import PopupView
import Firebase
import FirebaseAuth
@@ -169,7 +167,7 @@ struct PhoneVerificationCodeView: View {
print("verify code")
// do auth stuff
// get it from the previous screen but from storage
let verificationID = UserDefaults.standard.string(forKey: "authVerificationID")
@@ -191,14 +189,21 @@ struct PhoneVerificationCodeView: View {
return
}
//setting in key storage
UserDefaults.standard.set(true, forKey: "authVerificationID")
//TODO: is the auth listener going to find that this person signed in? idk test it
// firebase either created a new user or is giving back an existing user's id
let userId = res?.user.uid
let userPhoneNumber = res?.user.phoneNumber
print("user id that was authenticated is: \(userId)")
print("user id that was authenticated is: \(userPhoneNumber)")
// then sending to next page
self.navigationStack.push(PhoneVerificationCodeView()) // verify code page
}
// then async send to next page
self.navigationStack.push(PhoneVerificationCodeView()) // verify code page
} label: {
Text("Send Verification")
.bold()
+47 -8
View File
@@ -13,22 +13,61 @@ import GoogleSignIn
struct nirvana_iosApp: App {
@StateObject var authSessionStore: AuthSessionStore = AuthSessionStore()
@UIApplicationDelegateAdaptor private var appDelegate: AppDelegate
@UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
var body: some Scene {
WindowGroup {
ContentView().environmentObject(authSessionStore)
ContentView()
.environmentObject(authSessionStore)
.onOpenURL { url in
print("Received URL: \(url)")
Auth.auth().canHandle(url) // <- just for information purposes
}
}
}
}
class AppDelegate: NSObject, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
FirebaseApp.configure()
return true
}
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
FirebaseApp.configure()
return true
}
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
print("\(#function)")
Auth.auth().setAPNSToken(deviceToken, type: .sandbox)
}
func application(_ application: UIApplication, didReceiveRemoteNotification notification: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
print("\(#function)")
if Auth.auth().canHandleNotification(notification) {
completionHandler(.noData)
return
}
}
// For iOS 9+
func application(_ application: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any]) -> Bool {
return GIDSignIn.sharedInstance.handle(url)
// MARK: turned off google sign in link in for phone below
// return GIDSignIn.sharedInstance.handle(url)
// if the user can be handled by google auth, then it will do so
if Auth.auth().canHandle(url) {
return true
}
// URL not auth related, developer should handle it.
return true
}
// For iOS 8-
func application(_ application: UIApplication,
open url: URL,
sourceApplication: String?,
annotation: Any) -> Bool {
if Auth.auth().canHandle(url) {
return true
}
// URL not auth related, developer should handle it.
return true
}
}