mirror of
https://github.com/Finb/Bark.git
synced 2025-12-08 21:36:01 +00:00
78 lines
2.5 KiB
Swift
78 lines
2.5 KiB
Swift
//
|
||
// Client.swift
|
||
// Bark
|
||
//
|
||
// Created by huangfeng on 2018/6/25.
|
||
// Copyright © 2018 Fin. All rights reserved.
|
||
//
|
||
|
||
import RxCocoa
|
||
import RxSwift
|
||
import UIKit
|
||
import UserNotifications
|
||
|
||
class Client: NSObject {
|
||
static let shared = Client()
|
||
override private init() {
|
||
super.init()
|
||
}
|
||
|
||
var currentNavigationController: UINavigationController? {
|
||
let controller = UIApplication.shared.delegate?.window??.rootViewController as? BarkSnackbarController
|
||
let nav = (controller?.rootViewController as? UITabBarController)?.selectedViewController as? UINavigationController
|
||
return nav
|
||
}
|
||
|
||
var currentTabBarController: StateStorageTabBarController? {
|
||
let controller = UIApplication.shared.delegate?.window??.rootViewController as? BarkSnackbarController
|
||
return controller?.rootViewController as? StateStorageTabBarController
|
||
}
|
||
|
||
let appVersion: String = {
|
||
var version = "0.0.0"
|
||
if let infoDict = Bundle.main.infoDictionary {
|
||
if let appVersion = infoDict["CFBundleVersion"] as? String {
|
||
version = appVersion
|
||
}
|
||
}
|
||
return version
|
||
}()
|
||
|
||
enum ClienState: Int, Codable {
|
||
case ok
|
||
case unRegister
|
||
case serverError
|
||
}
|
||
|
||
var deviceToken = BehaviorRelay<String?>(value: nil)
|
||
var state = BehaviorRelay<ClienState>(value: .ok)
|
||
|
||
func registerForRemoteNotifications() {
|
||
let center = UNUserNotificationCenter.current()
|
||
center.requestAuthorization(options: [.alert, .sound, .badge], completionHandler: { (_ granted: Bool, _: Error?) -> Void in
|
||
if granted {
|
||
dispatch_sync_safely_main_queue {
|
||
UIApplication.shared.registerForRemoteNotifications()
|
||
}
|
||
}
|
||
else {
|
||
print("没有打开推送")
|
||
}
|
||
})
|
||
}
|
||
|
||
func openUrl(url: URL) {
|
||
if ["http", "https"].contains(url.scheme?.lowercased() ?? "") {
|
||
UIApplication.shared.open(url, options: [UIApplication.OpenExternalURLOptionsKey.universalLinksOnly: true]) { success in
|
||
if !success {
|
||
// 打不开Universal Link时,则用内置 safari 打开
|
||
self.currentNavigationController?.present(BarkSFSafariViewController(url: url), animated: true, completion: nil)
|
||
}
|
||
}
|
||
}
|
||
else {
|
||
UIApplication.shared.open(url, options: [:], completionHandler: nil)
|
||
}
|
||
}
|
||
}
|