предпосылка моего приложения заключается в том, что при открытии приложения отображается экран, который требует от пользователя ввода пин-кода, а когда пользователь входит в приложение, отображается приложение обмена сообщениями. Я смог с легкостью закодировать экран входа в систему, но плохо понимал, как выполнять обмен сообщениями, поэтому нашел приложение для обмена сообщениями с открытым исходным кодом, которое я поместил в свой проект (https://github.com/relatedcode/Messenger). Проблема, с которой я сталкиваюсь, состоит в том, что приложение для обмена сообщениями создано с использованием XIB вместо раскадровок, и кажется, что оно сделано в AppDelegate, и я не могу вызвать его вне AppDelegate.
Вот код для загруженной нагрузки с параметрами в делегате приложения (в настоящее время у меня есть контроллер представления пин-кода в качестве контроллера root, который называется ViewController)
//-----------------------------------------------------------------------------------------------------------------------------------------
// Firebase initialization
//-----------------------------------------------------------------------------------------------------------------------------------------
FirebaseApp.configure()
Database.database().isPersistenceEnabled = false
FirebaseConfiguration().setLoggerLevel(.error)
//-----------------------------------------------------------------------------------------------------------------------------------------
// Push notification initialization
//-----------------------------------------------------------------------------------------------------------------------------------------
let authorizationOptions: UNAuthorizationOptions = [.sound, .alert, .badge]
UNUserNotificationCenter.current().requestAuthorization(options: authorizationOptions, completionHandler: { granted, error in
if (error == nil) {
DispatchQueue.main.async {
UIApplication.shared.registerForRemoteNotifications()
}
}
})
//-----------------------------------------------------------------------------------------------------------------------------------------
// OneSignal initialization
//-----------------------------------------------------------------------------------------------------------------------------------------
OneSignal.initWithLaunchOptions(launchOptions, appId: ONESIGNAL_APPID, handleNotificationReceived: nil, handleNotificationAction: nil, settings: [kOSSettingsKeyAutoPrompt: false])
OneSignal.setLogLevel(ONE_S_LOG_LEVEL.LL_NONE, visualLevel: ONE_S_LOG_LEVEL.LL_NONE)
OneSignal.inFocusDisplayType = OSNotificationDisplayType.none
//-----------------------------------------------------------------------------------------------------------------------------------------
// Firebase auth issue fix
//-----------------------------------------------------------------------------------------------------------------------------------------
if (UserDefaults.bool(key: "Initialized") == false) {
UserDefaults.setObject(value: true, key: "Initialized")
FUser.logOut()
}
//-----------------------------------------------------------------------------------------------------------------------------------------
// Shortcut items initialization
//-----------------------------------------------------------------------------------------------------------------------------------------
Shortcut.create()
//-----------------------------------------------------------------------------------------------------------------------------------------
// Manager initialization
//-----------------------------------------------------------------------------------------------------------------------------------------
_ = Connectivity.shared
_ = LocationManager.shared
_ = RelayManager.shared
//-----------------------------------------------------------------------------------------------------------------------------------------
// Backend observer initialization
//-----------------------------------------------------------------------------------------------------------------------------------------
_ = Blockeds.shared
_ = Blockers.shared
_ = Chats.shared
_ = Friends.shared
_ = Groups.shared
_ = Messages.shared
_ = Users.shared
//-----------------------------------------------------------------------------------------------------------------------------------------
// UI initialization
//-----------------------------------------------------------------------------------------------------------------------------------------
window = UIWindow(frame: UIScreen.main.bounds)
chatsView = ChatsView(nibName: "ChatsView", bundle: nil)
peopleView = PeopleView(nibName: "PeopleView", bundle: nil)
groupsView = GroupsView(nibName: "GroupsView", bundle: nil)
settingsView = SettingsView(nibName: "SettingsView", bundle: nil)
let navController1 = NavigationController(rootViewController: chatsView)
let navController2 = NavigationController(rootViewController: peopleView)
let navController3 = NavigationController(rootViewController: groupsView)
let navController4 = NavigationController(rootViewController: settingsView)
tabBarController = UITabBarController()
tabBarController.viewControllers = [navController1, navController2, navController3, navController4]
tabBarController.tabBar.isTranslucent = false
_ = chatsView.view
_ = peopleView.view
_ = groupsView.view
_ = settingsView.view
let storyboard = UIStoryboard(name: "Main", bundle: nil)
// instantiate your desired ViewController
let rootController = storyboard.instantiateViewController(withIdentifier: "tutorialViewController")
window?.rootViewController = rootController
window?.makeKeyAndVisible()
//-----------------------------------------------------------------------------------------------------------------------------------------
// Sinch initialization
//-----------------------------------------------------------------------------------------------------------------------------------------
let config = SinchService.config(withApplicationKey: SINCH_KEY, applicationSecret: SINCH_SECRET, environmentHost: SINCH_HOST).pushNotifications(with: SINAPSEnvironment.development).disableMessaging()
sinchService = SinchService.service(with: config)
sinchService?.delegate = self
sinchService?.callClient().delegate = self
sinchService?.push().setDesiredPushType(SINPushTypeVoIP)
NotificationCenter.addObserver(target: self, selector: #selector(sinchLogInUser), name: NOTIFICATION_APP_STARTED)
NotificationCenter.addObserver(target: self, selector: #selector(sinchLogInUser), name: NOTIFICATION_USER_LOGGED_IN)
NotificationCenter.addObserver(target: self, selector: #selector(sinchLogOutUser), name: NOTIFICATION_USER_LOGGED_OUT)
return true
И вот кнопка, что, когда это действие вызывается, мне нужно приложение обмена сообщениями для быть показано.
@IBAction func enterApp(_ sender: UIButton) {
}