同步操作将从 兰德网络O2OA平台软件/O2OA 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
//// Common.swift// o2app//// Created by 刘振兴 on 2017年8月18日.// Copyright © 2017年 zone. All rights reserved.//import UIKitimport SwiftValidatorimport SwiftyUserDefaultsimport CocoaLumberjackimport O2OA_Auth_SDKimport CoreTelephony// 屏幕宽度let kScreenH = UIScreen.main.bounds.height// 屏幕高度let kScreenW = UIScreen.main.bounds.widthpublic class DeviceUtil {static let shared: DeviceUtil = {return DeviceUtil()}()private init() {}//当前设备名称func getDeviceName() -> String {return UIDevice.current.name}//设备uuidfunc getDeviceUUId() -> String {return UIDevice.current.identifierForVendor?.uuidString ?? ""}//设备Modelfunc getDeviceModel() -> String {return UIDevice.current.model}// 当前系统版本func getSystemVersion() -> String {return UIDevice.current.systemVersion}//运营商信息func getCarrier() -> String {let net = CTTelephonyNetworkInfo()return net.subscriberCellularProvider?.carrierName ?? ""}//获取当前网络情况func getNetInfo(callback: @escaping (String)->Void ) {let reachability = Reachability.init(hostName: "www.o2oa.net")let status = reachability?.currentReachabilityStatus()if status != nil {switch status! {case ReachableViaWiFi:callback("wifi")case ReachableViaWWAN:callback(self.getNetType())default:callback("none")}}else {callback("none")}}func getDeviceInfoForJsApi(callback: @escaping (O2UtilPhoneInfo)->Void ) {var info = O2UtilPhoneInfo()info.screenWidth = "\(kScreenW)"info.screenHeight = "\(kScreenH)"info.brand = self.getDeviceName()info.model = self.getDeviceModel()info.version = self.getSystemVersion()info.operatorType = self.getCarrier()getNetInfo { (type) ininfo.netInfo = typecallback(info)}}private func getNetType() -> String {var netconnType = ""let info = CTTelephonyNetworkInfo()let status = info.currentRadioAccessTechnologyif (status == "CTRadioAccessTechnologyGPRS") {netconnType = "GPRS"}else if (status == "CTRadioAccessTechnologyEdge" ) {netconnType = "2.75G EDGE";}else if (status == "CTRadioAccessTechnologyWCDMA"){netconnType = "3G"}else if (status == "CTRadioAccessTechnologyHSDPA"){netconnType = "3.5G HSDPA"}else if (status == "CTRadioAccessTechnologyHSUPA"){netconnType = "3.5G HSUPA"}else if (status == "CTRadioAccessTechnologyCDMA1x"){netconnType = "2G"}else if (status == "CTRadioAccessTechnologyCDMAEVDORev0"){netconnType = "3G"}else if (status == "CTRadioAccessTechnologyCDMAEVDORevA"){netconnType = "3G"}else if (status == "CTRadioAccessTechnologyCDMAEVDORevB"){netconnType = "3G"}else if (status == "CTRadioAccessTechnologyeHRPD"){netconnType = "HRPD"}else if (status == "CTRadioAccessTechnologyLTE"){netconnType = "4G"}return netconnType}}// MARK:- 自定义手机号码检校规则public class MobileNumberRule: RegexRule {static let regex = "^\\d{11}$"convenience init(message : String = "Not a valid Mobile Number"){self.init(regex: MobileNumberRule.regex, message : message)}}// MARK:- 所有配置定义,使用SwiftyUserDefaults实现存储protocol AppConfigEnable {//是否第一次使用应用,显示引导页使用var isFirstTime:Bool? { get set }// IM是否已经登录var openIMLoginStatus:Bool? { get set }// 跳转用的 从那个页面过来的var taskIndex: Int {get set}var appBackType: Int {get set}var notificationGranted: Bool {get set}var firstGranted: Bool {get set}// 生物识别登录用户var bioAuthUser: String {get set}var firstLoad: Bool {get set}//服务器 移动端配置hash值 判断是否更新了var customStyleHash: String {get set}// 主题名称var themeName: String {get set}//demo服务器提示公告var demoAlertTag: Bool {get set}}// MARK:- 扩展定义的键extension DefaultsKeys {static let isFirstTime = DefaultsKey<Bool?>("isFirstTime")static let openIMLoginStatus = DefaultsKey<Bool?>("openIMLoginStatus")static let taskIndex = DefaultsKey<Int>("taskIndex")static let appBackType = DefaultsKey<Int>("appBackType")static let notificationGranted = DefaultsKey<Bool>("notificationGranted")static let firstGranted = DefaultsKey<Bool>("fristGranted")static let bioAuthUser = DefaultsKey<String>("bioAuthUser")static let firstLoad = DefaultsKey<Bool>("firstLoad")static let customStyleHash = DefaultsKey<String>("customStyleHash")static let themeName = DefaultsKey<String>("themeName")static let demoAlertTag = DefaultsKey<Bool>("demoAlertTag")}// MARK:- Default App Configpublic class AppConfigSettings: AppConfigEnable {var customStyleHash: String {get {return Defaults[.customStyleHash]}set {Defaults[.customStyleHash] = newValue}}var themeName: String {get {return Defaults[.themeName]}set {Defaults[.themeName] = newValue}}var openIMLoginStatus: Bool?{get {guard let openIMLoginStatus = Defaults[.openIMLoginStatus] else {return false}return openIMLoginStatus}set {Defaults[.openIMLoginStatus] = newValue}}var isFirstTime: Bool? {get {guard let firstTime = Defaults[.isFirstTime] else {return true}return firstTime}set {Defaults[.isFirstTime] = newValue}}var notificationGranted: Bool {get {return Defaults[.notificationGranted]}set {Defaults[.notificationGranted] = newValue}}var firstGranted: Bool {get {return Defaults[.firstGranted]}set {Defaults[.firstGranted] = newValue}}var bioAuthUser: String {get {return Defaults[.bioAuthUser]}set {Defaults[.bioAuthUser] = newValue}}var firstLoad: Bool {get {return Defaults[.firstLoad]}set {Defaults[.firstLoad] = newValue}}var taskIndex: Int {get {return Defaults[.taskIndex]}set {Defaults[.taskIndex] = newValue}}var appBackType: Int {get {return Defaults[.appBackType]}set {Defaults[.appBackType] = newValue}}var demoAlertTag: Bool {get {return Defaults[.demoAlertTag]}set {Defaults[.demoAlertTag] = newValue}}public func removeAllConfig() {Defaults.removeAll()}static let shared:AppConfigSettings = {return AppConfigSettings()}()}// MARK:- OOCustomImageManagerenum OOCustomImageKey:NSString {case launch_logo = "launch_logo"case login_avatar = "login_avatar"case index_bottom_menu_logo_blur = "index_bottom_menu_logo_blur"case index_bottom_menu_logo_focus = "index_bottom_menu_logo_focus"case people_avatar_default = "people_avatar_default"case process_default = "process_default"case setup_about_logo = "setup_about_logo"}class OOCustomImageManager {static let `default`:OOCustomImageManager = {return OOCustomImageManager()}()private var imageCache = NSCache<NSString,UIImage>()private init() {self.loadCache()}private func loadCache() {if let configInfo = O2AuthSDK.shared.customStyle() {configInfo.images?.forEach({ (ooImage) inlet value = ooImage.value!let data = Data(base64Encoded: value)let image = UIImage(data: data!)let scaleImage = image?.scaledImageFrom3x()imageCache.setObject(scaleImage!, forKey: ooImage.name! as NSString)})}}func loadImage(_ key:OOCustomImageKey) -> UIImage? {if let image = imageCache.object(forKey: key.rawValue) {return image}else {self.loadCache()if let image = imageCache.object(forKey: key.rawValue) {return image}else {return O2ThemeManager.image(for: "Icon.icon_zhuye_pre")}}}//异步获取图片func loadImageAsync(key:OOCustomImageKey, block:@escaping (UIImage?)->Void) {let item = DispatchWorkItem {if let configInfo = O2AuthSDK.shared.customStyle() {configInfo.images?.forEach({ (ooImage) inlet name = ooImage.name! as NSStringif name == key.rawValue {DDLogDebug("name:\(name)")let value = ooImage.value!let data = Data(base64Encoded: value)let image = UIImage(data: data!)block(image)}})}}DispatchQueue.main.async(execute: item)}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。