2011-09-23 4 views
0

약 2 분 (예 : 사용자가 전화를 끊을 때까지) 아무런 반응이 없으면 내 iPhone 앱에서 로그 아웃하고 싶습니다. 아무도 그런 문제가 있습니까? 이 기능을 구현하는 가장 좋은 방법은 무엇입니까? NSUserDefaults에 마지막 이벤트 날짜를 저장 한 다음 다음 이벤트에 먼저 현재 날짜를 확인합니다. 차이가 2 분보다 큰 경우 로그인 화면으로 이동하십시오. 그렇지 않으면 저장된 날짜를 새로 고칩니다. 하지만 어떻게 터치 이벤트를 일반적으로 얻을 수 있습니까? 응용 프로그램이 백그라운드 상태로 갈 때 그것은 또한 호출 할 것이다iPhone - 사용자 상호 작용 이벤트 및 자동 로그 아웃 받기

- (void)applicationWillResignActive:(UIApplication *)application 
{ 
/* 
Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 
Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 
*/ 
} 

참고 :

덕분에, 그것을위한 UIApplicationDelegate의 방법이있다

답변

1

을 madik. 그러면 앱이 비활성 상태가 될 때마다 데이터를 저장하는 데 도움이됩니다. 일정 시간이 경과했는지 확인하려면 NSTimer을 사용하고 마지막 터치 이벤트를 저장해야합니다. 모든 터치 이벤트를 가로 챌 수 없기 때문에이 작업을 수행 할 수 없다고 생각합니다 (시스템에 의해 관리되는 객체가 아닐 수도 있습니다. 상태 표시 줄이 그 예입니다). 시스템이 모든 활동/비활성 활동을 관리하고 필요할 때 데이터를 저장하도록하는 것이 좋습니다.

편집 : 난 당신이 처음에 무슨 뜻인지 이해하지 못했다. 이 accepted answer을 확인하면 필요한 것을 얻을 수 있습니다. 기본적으로 서브 클래스 UIApplicationsendEvent 메서드를 재정의해야합니다.

+0

내 질문을 이해하지 못한다고 생각합니다. 이 대리자 메서드를 알고 있지만 트리거 될 때까지 기다리지 않으려 고합니다. 사용자가 자동 ​​잠금을 1 시간으로 설정했다고 가정하지만 2 분 동안 사용하지 않으면 로그 아웃하지 않아도됩니다. 또는 자동 잠금은 1 분이라고 상상해보십시오. 1 분 후에 전화기가 잠기고이 방법이 실행됩니다. 그러나 사용자가 전화를 잠금 해제하고 마지막 터치 후 2 분이 경과하지 않으면 로그인 화면을 표시하고 싶지 않습니다. 제 질문은 탭 이벤트를 감지하는 방법입니다. UIGestureRecognizer 대리자를 알고 있지만이 방법이 가장 좋습니다. – madik

+0

그리고 내 응용 프로그램은 백그라운드에서 실행할 수 없습니다 ... – madik

+0

좋아, 이제 알았어. 내가 찾은 몇 가지 해결책을 보여주기 위해 내 대답을 업데이트하고 있습니다. – ender

0

'NSTimer'

당신이 "어떻게 내가 일반적으로 터치 이벤트를받을 수 있나요?", 당신은 사용자가 유휴 상태인지 아닌지 당신이 당신은 어떤 시스템을 설정해야합니다, 말할 수있는 방법을 의미하는 경우라고 앱의 상위 레벨에서 모든 터치 이벤트를 수집합니다. NSUserDefaults에서 언급 한 마지막 터치 시간을 업데이트 할 수 있지만 앱 실행 중에는 비효율적 일 수 있습니다. 따라서 터치 이벤트를 기본 앱 대리인에게 게시하고 마지막 터치 시간을 저장할 수 있습니다. 2 분짜리 타이머를 설정할 수있는 곳도 있습니다. 같은

뭔가 : 당신이 그 동작을 지원하는 경우 응용 프로그램이 배경 등을 갈 때

- (void) someAppDelegateMethodThatYouCallForAnyUserEvent 
{ 
    [self.idleTimer invalidate]; 
    self.lastEvent = [NSDate now]; 
    self.idleTimer = [NSTimer scheduledTimerWithTimeInterval:120 target:self selector:@selector(logoutAndGotoLogin) userInfo:nil repeats:NO]; 
... 
} 

은 또한 앱 위임 방법 몇 가지 정리를해야 할 것이다.

관련 문제