Created
November 14, 2017 12:57
-
-
Save exce11ent/976a74c8b328900d012ce9abd8fbe59f to your computer and use it in GitHub Desktop.
Part of AppDelegate.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey: Any]) -> Bool { | |
if let dynamiclink = DynamicLinks.dynamicLinks()?.dynamicLink(fromCustomSchemeURL: url) { | |
handleLink(link: dynamiclink) | |
return true | |
} | |
return false | |
} | |
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool { | |
guard let dynamicLinks = DynamicLinks.dynamicLinks(), | |
let incomingURL = userActivity.webpageURL else { | |
return false | |
} | |
AppRouter.presentSplashScreen() | |
let handled = dynamicLinks.handleUniversalLink(incomingURL) { [weak self] (dynamiclink, error) in | |
guard let strongSelf = self else { return } | |
if let dynamiclink = dynamiclink, let _ = dynamiclink.url { | |
strongSelf.handleLink(link: dynamiclink) | |
} else if let error = error { | |
print("DynamicLink error: \(error)") | |
Crashlytics.sharedInstance().recordError(error) | |
self?.window?.rootViewController?.alert(error: error) | |
} | |
} | |
return handled | |
} | |
private func handleLink(link: DynamicLink) { | |
let parser = InviteLinkParser(link: link) | |
let linkType = parser.parse() | |
// If dynamic link has unknown format - do not handle it | |
if case .unknown = linkType { | |
return | |
} | |
// If user was in a demo mode - try to sign out | |
if let currentUserId = Auth.auth().currentUser?.uid { | |
if currentUserId == Configuration.demoDietitian || currentUserId == Configuration.demoPatient { | |
do { | |
try Auth.auth().signOut() | |
AppState.shared.clear() | |
} catch { | |
Crashlytics.sharedInstance().recordError(MyError.signOutError) | |
} | |
} else { // Do not start onboarding, if invite link was opened by a user, that is already authorized in the app. | |
// just open default screen | |
startupResolver?.moveUser(with: currentUserId) | |
return | |
} | |
} | |
// Handle link depending on recognized pattern | |
switch linkType { | |
case .dietitian(let model): | |
AppRouter.startOnboarding(OnboardingBuilder { builder in | |
builder.role = model.role | |
builder.phone = model.phone | |
builder.dietitianId = model.dietitian | |
builder.firstName = model.firstName | |
builder.lastName = model.lastName | |
}) | |
case .patient(let model): | |
AppRouter.startOnboarding(OnboardingBuilder { builder in | |
builder.role = model.role | |
builder.phone = nil | |
builder.dietitianId = model.dietitian | |
builder.firstName = nil | |
builder.lastName = nil | |
}) | |
case .demo(let demoCode): | |
let manager = DemoManager() | |
manager.setupDemoWith(code: demoCode, completion: { (mode) in | |
switch mode { | |
case .fixedDietitian: | |
AppRouter.goToPatients() | |
AppState.shared.connectionMonitor = ConnectionStateHandler(sender: Configuration.demoDietitian) | |
AppAnalytics.setUserRole(role: .demo) | |
case .fixedPatient(let data): | |
guard let data = data else { break } | |
AppState.shared.connectionMonitor = ConnectionStateHandler(sender: Configuration.demoPatient) | |
AppRouter.goToConversation(ConversationBuilder { builder in | |
builder.role = .patient | |
builder.senderId = data.patientId | |
builder.receiverId = data.dietitianId | |
builder.conversationId = data.conversationId | |
}) | |
AppAnalytics.setUserRole(role: .demo) | |
case .unknown: | |
break | |
default: | |
break | |
} | |
}) | |
break | |
case .unknown: | |
break | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment