버그 잡이

iOS/Swift - background 진입 방법 구분하기 (Home 버튼, Lock 버튼) 본문

IOS

iOS/Swift - background 진입 방법 구분하기 (Home 버튼, Lock 버튼)

버그잡이 2021. 10. 29. 17:26

 

 

1. 앱 사용 중 Home 버튼을 누른 경우

2. 앱 사용 중 Lock 버튼을 누른 경우

 

 

위 두 경우 모두 앱의 Life-cycle은 background 상태입니다.

 

저는 Home 버튼을 눌러서 background에 진입한 경우에 특정 팝업을 띄워주길 원했기 때문에

위 두 가지 경우를 구분하고 싶었습니다. 

 

func applicationDidEnterBackground(_ application: UIApplication) {
    if (DidUserPressLockButton()) {
        print("User pressed lock button")
    } else {
        print("user pressed home button")
    }
}

private func DidUserPressLockButton() -> Bool {
    let oldBrightness = UIScreen.main.brightness
    UIScreen.main.brightness = oldBrightness + (oldBrightness <= 0.01 ? (0.01) : (-0.01))
    return oldBrightness != UIScreen.main.brightness
}

 

코드를 보면 background 상태를 감지하는 applicationDidEnterBackground() 메서드에서 
DidUserPressLockButton()을 통해서 사용자가 Lock 버튼을 눌렀는지 확인하고 있습니다.

 

DidUserPressLockButton() 내부 로직은 일종의 꼼수 인데요.

백그라운드로 진입했을때, 화면 밝기를 미세하게 변경해봅니다.

이때 화면 밝기가 변경된다면 화면이 켜져있다는 뜻이고

변경 되지 않는다면 화면이 켜져있기 때문에 Home 버튼 클릭으로 앱을 백그라운드로 보냈을 겁니다.

 

위 방법이 정확한 방법은 아니기 때문에 예외 케이스가 발생할 수도 있는데요.

추후 여러 테스트를 진행하면서 예외 케이스가 발생한다면 공유드리겠습니다.

(혹시 예외 케이스를 아시는 분은 댓글로 남겨주시면 감사하겠습니다.)

 

 

 

*참고

https://stackoverflow.com/questions/19595928/differentiate-between-screen-lock-and-home-button-press-on-ios7

 

 

반응형
Comments