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 */; }; 89288EC7276756DF00E962C4 /* FirebaseDatabase in Frameworks */ = {isa = PBXBuildFile; productRef = 89288EC6276756DF00E962C4 /* FirebaseDatabase */; };
89288EC9276756DF00E962C4 /* FirebaseStorage in Frameworks */ = {isa = PBXBuildFile; productRef = 89288EC8276756DF00E962C4 /* FirebaseStorage */; }; 89288EC9276756DF00E962C4 /* FirebaseStorage in Frameworks */ = {isa = PBXBuildFile; productRef = 89288EC8276756DF00E962C4 /* FirebaseStorage */; };
89288ECB27675B9F00E962C4 /* OnboardingTemplateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89288ECA27675B9F00E962C4 /* OnboardingTemplateView.swift */; }; 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 */; }; 89B46E71276893E200B74255 /* AuthSessionStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89B46E70276893E200B74255 /* AuthSessionStore.swift */; };
89BCABE2276B3CB0009E9B10 /* NavigationStack in Frameworks */ = {isa = PBXBuildFile; productRef = 89BCABE1276B3CB0009E9B10 /* NavigationStack */; }; 89BCABE2276B3CB0009E9B10 /* NavigationStack in Frameworks */ = {isa = PBXBuildFile; productRef = 89BCABE1276B3CB0009E9B10 /* NavigationStack */; };
89BCABE5276B3D58009E9B10 /* InnerCircleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89BCABE4276B3D58009E9B10 /* InnerCircleView.swift */; }; 89BCABE5276B3D58009E9B10 /* InnerCircleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89BCABE4276B3D58009E9B10 /* InnerCircleView.swift */; };
@@ -97,7 +96,6 @@
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
89288EC3276756DF00E962C4 /* FirebaseAnalytics in Frameworks */, 89288EC3276756DF00E962C4 /* FirebaseAnalytics in Frameworks */,
89AD556F276D63E4001658E0 /* PopupView in Frameworks */,
89BCABE2276B3CB0009E9B10 /* NavigationStack in Frameworks */, 89BCABE2276B3CB0009E9B10 /* NavigationStack in Frameworks */,
89288EC5276756DF00E962C4 /* FirebaseAuth in Frameworks */, 89288EC5276756DF00E962C4 /* FirebaseAuth in Frameworks */,
89288EC7276756DF00E962C4 /* FirebaseDatabase in Frameworks */, 89288EC7276756DF00E962C4 /* FirebaseDatabase in Frameworks */,
@@ -319,7 +317,6 @@
89288EC8276756DF00E962C4 /* FirebaseStorage */, 89288EC8276756DF00E962C4 /* FirebaseStorage */,
89F1386F2767F55F006680ED /* GoogleSignIn */, 89F1386F2767F55F006680ED /* GoogleSignIn */,
89BCABE1276B3CB0009E9B10 /* NavigationStack */, 89BCABE1276B3CB0009E9B10 /* NavigationStack */,
89AD556E276D63E4001658E0 /* PopupView */,
); );
productName = "nirvana-ios"; productName = "nirvana-ios";
productReference = 891A15DD27653A7000B26659 /* nirvana-ios.app */; productReference = 891A15DD27653A7000B26659 /* nirvana-ios.app */;
@@ -353,7 +350,6 @@
89288EC1276756DF00E962C4 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */, 89288EC1276756DF00E962C4 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */,
89F1386E2767F55F006680ED /* XCRemoteSwiftPackageReference "GoogleSignIn-iOS" */, 89F1386E2767F55F006680ED /* XCRemoteSwiftPackageReference "GoogleSignIn-iOS" */,
89BCABE0276B3CB0009E9B10 /* XCRemoteSwiftPackageReference "swiftui-navigation-stack" */, 89BCABE0276B3CB0009E9B10 /* XCRemoteSwiftPackageReference "swiftui-navigation-stack" */,
89AD556D276D63E4001658E0 /* XCRemoteSwiftPackageReference "PopupView" */,
); );
productRefGroup = 891A15DE27653A7000B26659 /* Products */; productRefGroup = 891A15DE27653A7000B26659 /* Products */;
projectDirPath = ""; projectDirPath = "";
@@ -634,14 +630,6 @@
minimumVersion = 8.0.0; 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" */ = { 89BCABE0276B3CB0009E9B10 /* XCRemoteSwiftPackageReference "swiftui-navigation-stack" */ = {
isa = XCRemoteSwiftPackageReference; isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/matteopuc/swiftui-navigation-stack.git"; repositoryURL = "https://github.com/matteopuc/swiftui-navigation-stack.git";
@@ -681,11 +669,6 @@
package = 89288EC1276756DF00E962C4 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; package = 89288EC1276756DF00E962C4 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */;
productName = FirebaseStorage; productName = FirebaseStorage;
}; };
89AD556E276D63E4001658E0 /* PopupView */ = {
isa = XCSwiftPackageProductDependency;
package = 89AD556D276D63E4001658E0 /* XCRemoteSwiftPackageReference "PopupView" */;
productName = PopupView;
};
89BCABE1276B3CB0009E9B10 /* NavigationStack */ = { 89BCABE1276B3CB0009E9B10 /* NavigationStack */ = {
isa = XCSwiftPackageProductDependency; isa = XCSwiftPackageProductDependency;
package = 89BCABE0276B3CB0009E9B10 /* XCRemoteSwiftPackageReference "swiftui-navigation-stack" */; package = 89BCABE0276B3CB0009E9B10 /* XCRemoteSwiftPackageReference "swiftui-navigation-stack" */;
@@ -118,15 +118,6 @@
"version": "2.30908.0" "version": "2.30908.0"
} }
}, },
{
"package": "PopupView",
"repositoryURL": "https://github.com/exyte/PopupView",
"state": {
"branch": null,
"revision": "4cf8c01473282b3711e6780bd78ef81add97f6e2",
"version": "1.0.3"
}
},
{ {
"package": "Promises", "package": "Promises",
"repositoryURL": "https://github.com/google/promises.git", "repositoryURL": "https://github.com/google/promises.git",
+2
View File
@@ -19,5 +19,7 @@
<array> <array>
<string>Satisfy-Regular.ttf</string> <string>Satisfy-Regular.ttf</string>
</array> </array>
<key>UIUserInterfaceStyle</key>
<string>Light</string>
</dict> </dict>
</plist> </plist>
+7 -3
View File
@@ -44,6 +44,7 @@ final class AuthSessionStore: ObservableObject, SessionStore {
self.setupAuthListen() self.setupAuthListen()
} }
// MARK: OLD for google sign in with link
func signInOrCreateUser() { func signInOrCreateUser() {
if GIDSignIn.sharedInstance.currentUser == nil { if GIDSignIn.sharedInstance.currentUser == nil {
guard guard
@@ -76,6 +77,7 @@ final class AuthSessionStore: ObservableObject, SessionStore {
} }
} }
// MARK: OLD for google sign in with link
func firebaseAuth(withCredentials authCred: AuthCredential) { func firebaseAuth(withCredentials authCred: AuthCredential) {
Auth.auth().signIn(with: authCred) { result, error in Auth.auth().signIn(with: authCred) { result, error in
if error != nil { if error != nil {
@@ -113,12 +115,14 @@ final class AuthSessionStore: ObservableObject, SessionStore {
self.handler = Auth.auth().addStateDidChangeListener { (auth, user) in self.handler = Auth.auth().addStateDidChangeListener { (auth, user) in
print("auth listener activated") print("auth listener activated")
// get the user from the auth table in firebase auth
if let user = user { if let user = user {
// if we have a user, create a new user model // if we have a user, create a new user model
print("Got user: \(user.displayName!)") print("Got user: \(user.uid)")
self.user = User( print("phone number: \(user.phoneNumber!)")
_uid: user.uid, _email: user.email, _displayName: user.displayName, _profilePic: user.photoURL, _phoneNumber: 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 self.sessionState = .isAuthenticated
} else { } else {
// if we don't have a user, set our session to nil // if we don't have a user, set our session to nil
@@ -216,7 +216,6 @@ struct InnerCircleView: View {
} }
.scaleEffect(scale) .scaleEffect(scale)
.padding(scale * 5) .padding(scale * 5)
} // geometry reader } // geometry reader
.offset( .offset(
x: honeycombOffSetX(value), x: honeycombOffSetX(value),
@@ -8,8 +8,6 @@
import SwiftUI import SwiftUI
import NavigationStack import NavigationStack
import Combine import Combine
// TODO: maybe this is useless and just do my own toasts and alerts
import PopupView
import Firebase import Firebase
import FirebaseAuth import FirebaseAuth
@@ -169,7 +167,7 @@ struct PhoneVerificationCodeView: View {
print("verify code") print("verify code")
// do auth stuff // do auth stuff
// get it from the previous screen but from storage // get it from the previous screen but from storage
let verificationID = UserDefaults.standard.string(forKey: "authVerificationID") let verificationID = UserDefaults.standard.string(forKey: "authVerificationID")
@@ -191,14 +189,21 @@ struct PhoneVerificationCodeView: View {
return return
} }
//setting in key storage
UserDefaults.standard.set(true, forKey: "authVerificationID") 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: { } label: {
Text("Send Verification") Text("Send Verification")
.bold() .bold()
+47 -8
View File
@@ -13,22 +13,61 @@ import GoogleSignIn
struct nirvana_iosApp: App { struct nirvana_iosApp: App {
@StateObject var authSessionStore: AuthSessionStore = AuthSessionStore() @StateObject var authSessionStore: AuthSessionStore = AuthSessionStore()
@UIApplicationDelegateAdaptor private var appDelegate: AppDelegate @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
var body: some Scene { var body: some Scene {
WindowGroup { 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 { class AppDelegate: NSObject, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
FirebaseApp.configure() FirebaseApp.configure()
return true 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 { 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
} }
} }