Runtime Permissions in Android 6.0 Marshmallow (Android Development Patterns Ep 3)

안녕하세요, 여러분 저는 조애나 스미스입니다 여기는 안드로이드 개발 패턴이며 여러분에게 안드로이드 마쉬멜로우의 새로운 런타임 승인 모델에 대해서 보여드릴 것입니다

그럼 살펴보도록 하죠 14개의 다른 승인을 요청하는 앱을 설치하는 것은 꽤 겁이날 수 있습니다 하지만 여러분의 앱이 안드로이드 마쉬멜로우를 목표로 삼고 있다면 설치시점 대신에 런타임시점에서 승인을 하도록 사용자를 유도할 수 있습니다 이제는 다행히도 이렇게 무서운 설치 다이얼로그를 피할 수 있습니다 왜냐하면 런타임 승인은 마쉬멜로우를 목표로 하는 모든 앱에 요구되기 때문이죠

따라서 여러분이 끔찍한 런타임 예외를 피할 수 있도록 도와주는 몇 가지 추가적인 단계가 존재합니다 이건 모두에게 일어날 수 있는 일이니까요 먼저, 플랫폼을 확인하세요 런타임 승인은 본래의 설치 시점 요청으로 복귀함으로써 이전 SDK들과 호환이 됩니다 그러니 사용자가 이전 SDK를 사용하고 있다면 앱이 설치될 때 승인이 주어진다는 걸 알 수 있습니다

하지만 사용자가 마쉬멜로우 사용자라면 여러분은 확신하기 힘들 것입니다 그래서 두 번째 단계를 진행해야 합니다 승인 상태를 확인하는 겁니다 여러분이 관심을 갖는 승인을 위해 checkSelfPermission을 간단히 호출하는 것은 여러분이 그 승인이 부여되었는지 알도록 해 줄 것입니다 승인이 되었다면 계속 진행하면 됩니다

하지만 승인되지 않았다면 요청을 해야 할 겁니다 사용자는 이제 승인을 취소할 수 있으므로 이걸 매번 확인해야 한다는 것을 기억하시길 바랍니다 이는 궁극적으로 개발자들에게 매우 좋은 일입니다 해야 할 일이 늘어난다고 해도 말이죠 왜냐하면 사용자들에게 타당한 이유와 이득을 제공하는 문구로 승인에 대한 요청을 사용자들이 받기 때문입니다 그리고 이것은 사용자들에게 신뢰감을 형성합니다

사용자들이 특정한 부분을 거절할 수 있도록 하면서 여러분을 더욱 좋아하게 만들 수도 있습니다 그 다음 단계로 진행해보겠습니다 아직 승인을 얻지 못했다면 그러한 승인이 필요한 이유에 대해서 설명해야 할 수 있습니다 그 리소스에 대한 접근을 허용해준다면 이 기능이 얼마나 좋을지 사용자에게 납득시키는 것입니다 이를 돕기 위해서 shouldShowReques tPermissionRationale 메소드가 있습니다 이것은 여러분이 설명할 필요가 있는지 알 수 있도록 여러분을 도와줄 것입니다

만약 사용자가 더 이상 묻지 않기를 요청하거나 장치에서 승인이 비활성화가 되면 메소드는 false를 반환합니다 만약 사용자가 이전에 승인을 거절했지만 이제는 접근을 할 수 있도록 허용한다면 메소드는 true를 반환할 것입니다 이것은 앱의 행위에 대해 사용자가 혼란을 느낄 수 있다는 신호이기 때문에 확실하게 해야 합니다 이것으로 여러분은 승인을 요청할 준비가 된 것입니다 requestPermissions 메소드는 여러분이 관심을 갖는 승인 목록과 요청 코드를 필요로 합니다

이 비동기식 호출은 사용자에게 다이얼로그를 띄우고 사용자의 응답은 여러분의 콜백함수를 실행시킵니다 그래서 여러분이 명시한 요청 코드가 중요한 것입니다 이것은 앱상에서 사용자가 어디에 있는지 그리고 앱의 행위를 고르는 방법을 확인하도록 도와줍니다 마지막 단계를 보겠습니다 승인 결과를 처리하는 것입니다 onRequestPermissionsResult에서 여러분은 호출의 결과를 확인할 수 있습니다

그래서 승인이 되면 API 호출을 만들고 사용자를 위한 마법과도 같은 순간을 생성하는 것으로 돌아올 수 있도록 요청 코드를 사용할 수 있습니다 하지만 승인되지 않았으면 우아하게 실패해야겠죠 가장 쉬운 해결책은 분명한 시각적 신호로 이 기능을 비활성화하는 것입니다 이것이 승인의 이유이기 때문이죠 그래서 여러분은 다이얼로그를 표시하거나 UI 텍스트를 업데이트 할 수 있습니다

하지만 여러분은 아마도 UI 레이아웃을 실용적으로 유지하고 싶으실 겁니다 사용자가 마음을 바꿀 수도 있으니까요 그러므로 버튼을 비활성화 하지 마시길 바랍니다 사용자들이 필요할 때 이 단계로 돌아올 수 있도록 말입니다 이것이 바로 여러분이 마쉬멜로우에서 런타임 승인을 다루도록 여러분의 앱을 업데이트 하는 방법입니다

마지막 조언은 이러한 변경을 테스트하는 것에 관한 것입니다 여러분의 앱과 설정 앱 사이를 계속해서 왔다 갔다 하는 것은 재미가 없기 때문이죠 PackageManager의 부여 명령을 확인하시기 바랍니다 여러분의 장치에서 프로그램에 따라서 승인을 부여하고 취소하도록 말이죠 그리고 늘 그렇듯이 시작 문서를 확인하시길 바랍니다

그리고 이런 변화가 사용자들이 앱의 행동에 대한 이해를 돕도록 의도되었음을 명심하시기 바랍니다 그리고 한번에 여러가지 승인을 요구함으로써 사용자들을 어쩔 줄 모르게 하지 마십시요 이러한 요청을 문구에 넣으시고 더 좋은 앱을 만드세요 [음악 재생]