Swift 无操作时自动登出
main.swift中代码:
import Foundation
import UIKit
UIApplicationMain(
CommandLine.argc,
UnsafeMutableRawPointer(CommandLine.unsafeArgv)
.bindMemory(
to: UnsafeMutablePointer<Int8>.self,
capacity: Int(CommandLine.argc)),
NSStringFromClass(MyApplication.self),
NSStringFromClass(AppDelegate.self)
)
UIApplication.swift
import Foundation
import UIKit
@objc(MyApplication)
class MyApplication: UIApplication {
override init(){
super.init();
if(_timer == nil){
_timer = Timer.scheduledTimer(
timeInterval: TimeInterval(_idleSecondsTriggerLogout), target: self, selector: #selector(MyApplication.dosomething), userInfo: nil, repeats: true)
}
}
let _idleSecondsTriggerLogout:Int = 8 * 60; // 8 mins, same with android
var _timer:Timer? = nil;
override func sendEvent(_ event: UIEvent) {
// Ignore .Motion and .RemoteControl event simply everything else then .Touches
if event.type != .touches {
super.sendEvent(event)
return
}
// .Touches only
var restartTimer = true
if let touches = event.allTouches {
// At least one touch in progress? Do not restart timer, just invalidate it
for touch in touches.enumerated() {
if touch.element.phase != .cancelled && touch.element.phase != .ended {
restartTimer = false
break
}
}
}
if restartTimer {
// Touches ended || cancelled, restart timer
resetTimer()
} else {
// Touches in progress - !ended, !cancelled, just invalidate it
//print("Touches in progress. Invalidate timer")
}
super.sendEvent(event)
}
func resetTimer() {
_timer?.invalidate()
_timer = Timer.scheduledTimer(
timeInterval: TimeInterval(_idleSecondsTriggerLogout), target: self, selector: #selector(MyApplication.dosomething), userInfo: nil, repeats: true)
}
func dosomething(){
print("time up, logout and clear session 1");
ServiceProxy.HttpMeta.RefreshToken = "";
ServiceProxy.HttpMeta.Token = "";
ServiceProxy.HttpMeta.UserName = "";
print("time up, logout and clear session 2");
let topVC = topViewController()
print("time up, logout and clear session 3");
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
print("time up, logout and clear session 4");
let nextViewController = storyBoard.instantiateViewController(withIdentifier: "LoginVC") as! LoginVC
print("time up, logout and clear session 5");
topVC?.present(nextViewController, animated:true, completion:nil)
print("time up, logout and clear session 6");
}
func topViewController(controller: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
if let navigationController = controller as? UINavigationController {
return topViewController(controller: navigationController.visibleViewController)
}
if let tabController = controller as? UITabBarController {
if let selected = tabController.selectedViewController {
return topViewController(controller: selected)
}
}
if let presented = controller?.presentedViewController {
return topViewController(controller: presented)
}
return controller
}
}
AppDelegate.swift中代码(注释掉UIApplicationMain)
//@UIApplicationMain
info.plist中代码:
<key>Principal class</key>
<string>MyApplication</string>
Swift 无操作时自动登出的更多相关文章
- secureCRT无操作自动登出时间修改(亲测可用)
转自:http://blog.sina.com.cn/s/blog_6bcf42010102vlt9.html secureCRT连接机器经常会因为一段时间无操作就退出了,提示timed out wa ...
- Andriod一段时间未操作页面,系统自动登出
功能描述: APP在公共的设备上运行,出于安全考虑,当登录的用户在超过一定时间内没有做任何操作, 则系统自动登出,用户如需重新操作APP,则需要重新登录 . 第一步:创建一个BaseActivity ...
- 两种方法实现Linux不活动用户登录超时后自动登出
在平常的工作中,windows系统使用的比较多一些,身边的很多同事都会对自己的电脑进行一些个性化设置,比如离开一段时间后自动锁屏.自动关闭屏幕.自动注销当前登录等.在windows下可以这样操作,那么 ...
- Linux下实现不活动用户登录超时后自动登出
方法一:通过修改.bashrc或.bash_profile文件来实现 通过修改home目录下的.bashrc或.bash_profile文件来实现.这两个文件选择其中一个在末尾加入如下一行,具体操作 ...
- Vue 页面15分钟无操作时返回首页
这种需求手机端和pc端一般是不存在的,因为都是可以手动操作刷新的. 最近在做一个户外社区大屏的项目,因为大屏是全屏显示,没法手动刷新,不可能在页面专门做一个刷新按钮,也不好看,那这样的需求就显得格外重 ...
- WPF 窗体中获取键盘和鼠标无操作时的超时提示
原文:WPF 窗体中获取键盘和鼠标无操作时的超时提示 通过调用Windows API中的GetLastInputInfo来获取最后一次输入的时间 , , ); timer.Tic ...
- ssh修改超时自动登出时间的方法
echo $TMOUT 查看当前服务器登出时间,如果没有输出表示不会登出 1.修改:vim ~/.bash_profile 2.设置TMOUT值 TMOUT=600 #表示10分钟之后自动登出 TMO ...
- 在 Linux 上实现一段时间后自动登出非活动用户
参考 编辑 ~/.bashrc 或 ~/.bash_profile 文件: $ vi ~/.bashrc 或, $ vi ~/.bash_profile 将下面行加入其中: TMOUT=100 这会让 ...
- ssh一段时间无操作后自动断开连接(假死)问题
平时使用ssh远程服务器的时候(注:远程虚拟机一般不会有这个问题),一段时间没有操作,ssh连接就会处于假死状态,以至于需要重新进行ssh连接,不管你用的什么远程工具都会出现这个问题,那么通过心跳检测 ...
随机推荐
- 20145333 《Java程序设计》第7周学习总结
20145333 <Java程序设计>第7周学习总结 教材学习内容总结 时间的度量 1.格林威治标准时间(GMT):常被不严谨地当成是UTC时间,现已不作为标准时间使用. 2.世界时(UT ...
- Fiddler4工具配置及调试手机和PC端浏览器
Fiddler最大的用处: 模拟请求.修改请求.手机应用调试 Fiddler最新版本 下载地址: http://www.telerik.com/download/fiddler Fiddler 想要监 ...
- eclipse 工程没有build path
项目的.project文件添加: <buildSpec><buildCommand><name>org.eclipse.jdt.core.javabuilder&l ...
- 【ACM】求高精度幂
题目来源:http://poj.org/problem?id=1001&lang=zh-CN 求高精度幂 Time Limit: 500MS Memory Limit: 10000K To ...
- jQuery获取属性值的方法
1.利用绑定事件: $(".callback").on("click","#knbh",function(){ ***** ...
- Spring Boot JPA 使用 Sql Service 与 不使用默认驼峰策略
引入 数据源 <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>s ...
- python 使用getopt 获取配置参数
在工程中特别是稍微大一点的项目基本上都会用到配置,就会涉及到配置文件的读取,配置参数的读取. 常用的解析配置文件的是configParser,解析命令行参数的则为getopt. getopt的参数可以 ...
- Maven 一段时间知识小结
二种打包命令生成后的jar包比较 1.clean install -P dev 2.clean package -Dmaven.test.skip=true -P dev //clean packa ...
- Java 练习题摘录
2018-01-21 23:23:08 1.finally与return同时出现的情况 finally中有return语句则会使try...catch中的return语句失效 public stati ...
- JAVA之Map使用
参考: http://blog.csdn.net/laixiaobailing/article/details/41644327