Android는 사용자가 최신 혁신 기술을 활용할 수 있도록 돕는 동시에 보안과 개인 정보 보호를 최우선으로 합니다.
이 페이지에서 설명하는 권장사항 중 일부는 요약본에도 나와 있습니다.
권한에 주의하기
투명성을 유지하고 사용자가 앱 사용 환경을 직접 관리하도록 지원하여 사용자와 신뢰 관계를 구축하세요.
기능에 필요한 최소 권한을 요청합니다. 앱에 중요한 변경사항을 적용할 때마다 요청된 권한을 검토하여 앱의 기능에 여전히 권한이 필요한지 확인합니다.
- 최신 버전의 Android에서는 권한을 요구하지 않고도 개인 정보를 안전하게 보호하는 방식으로 데이터에 액세스하는 방법을 도입하는 경우가 많습니다. 자세한 내용은 앱에서 권한을 선언해야 하는지 평가하기를 참고하세요.
- 앱이 Google Play에 배포된 경우 Android vitals는 앱에서 권한을 거부하는 사용자의 비율을 알려줍니다. 이 데이터를 사용하여 필수 권한이 가장 많이 거부된 기능의 설계를 다시 평가합니다.
권장되는 흐름에 따라 앱의 기능에 권한이 필요한 이유를 설명합니다. 앱이 시작할 때보다는 권한이 필요할 때 이를 요청하여 사용자가 권한이 필요한 이유를 명확히 알 수 있도록 합니다.
사용자나 시스템은 권한을 여러 번 거부할 수 있습니다. Android는 사용자의 선택을 존중하기 위해 동일한 앱의 권한 요청을 무시합니다.
사용자가 권한을 거부하거나 취소하는 경우 단계적으로 성능을 저하합니다. 예를 들어 사용자가 마이크 사용 권한을 부여하지 않으면 앱의 음성 입력 기능을 사용 중지할 수 있습니다.
앱을 업데이트할 때 앱에 더 이상 필요하지 않은 런타임 권한에 대한 앱의 액세스를 삭제합니다.
위험 권한으로 보호되는 데이터에 액세스하는 SDK 또는 라이브러리를 사용하고 있다면 사용자는 앱에 문제가 있는 것으로 생각합니다. 따라서 SDK에 필요한 권한과 그 이유를 확실하게 이해해야 합니다.
- Android 11(API 수준 30)에서 앱을 테스트하는 경우 데이터 액세스 분석을 사용하여 코드 및 서드 파티 라이브러리 코드에서 비공개 데이터에 액세스하는 위치를 찾습니다.
위치 사용 최소화하기
어떠한 위치 데이터도 요청하지 않고 사용 사례를 지원할 수 있다면 위치 정보 액세스 권한을 요청하지 말아야 합니다. 앱에서 위치 액세스 권한을 요청하는 경우 사용자가 충분한 정보를 바탕으로 결정을 내릴 수 있게 도와야 합니다.
- 앱에서 위치 정보를 수집해야 하는 경우 사용자에게 특정 혜택을 제공하기 위해 앱이 이 정보를 어떻게 사용하는지 설명해야 합니다.
- 앱에서 블루투스 또는 Wi-Fi를 통해 사용자 기기를 근처 기기와 페어링해야 한다면 위치 정보 액세스 권한이 필요 없는 컴패니언 기기 관리도구를 사용합니다.
- 앱에 필요한 위치 세부사항의 수준을 검토합니다. 대부분의 위치 관련 사용 사례는 대략적인 위치 정보에 액세스하는 것으로 충분히 실행할 수 있습니다.
- 앱이 사용자에게 표시되는 동안 위치 데이터에 액세스합니다. 이렇게 하면 사용자가 앱에서 위치 정보를 요청하는 이유를 더 정확하게 이해할 수 있습니다.
- 지오펜싱을 구현할 때와 같이 앱에 백그라운드 위치 액세스가 필요하면 앱의 핵심 기능에 반드시 필요한지 확인하고 사용자에게 명확한 방식으로 실행되도록 해야 합니다. 백그라운드 위치 액세스 사용 고려사항에 관해 자세히 알아보세요.
- Android 10(API 수준 29) 이상에서는 앱 사용 중에 사용자가 앱의 위치 액세스를 제한할 수 있습니다. 앱에서 항상 위치 정보에 액세스할 수 있는 것이 아니라면 단계적으로 성능이 저하되도록 앱을 설계합니다.
- 사용자가 앱 UI에서 다른 앱으로 이동한 후에도 사용자가 시작한 진행 중인 작업을 위해 앱이 위치 정보에 계속 액세스해야 한다면, 앱이 백그라운드로 전환되기 전에 포그라운드 서비스를 시작합니다. 이 작업은
onPause()
와 같은 Android의 수명 주기 콜백에서 실행할 수 있습니다. - 백그라운드에서 포그라운드 서비스를 시작하면 안 됩니다. 대신, 알림에서 앱을 실행한 다음 앱의 UI가 표시될 때 위치 코드를 실행하는 것을 고려해보세요.
데이터를 안전하게 처리하기
참고: Google Play 개발자 정책 센터의 사용자 데이터 관련 도움말 페이지에서 민감한 정보로 간주되는 데이터에 관해 자세히 알아볼 수 있습니다.
민감한 정보를 처리하는 방식은 투명하고 안전해야 합니다.
- 앱에서 민감한 정보를 수집, 사용 또는 공유하는 시기와 이유를 사용자에게 알립니다.
- 가능하면 범위 지정 저장소 모델을 사용합니다. 앱의 사용 사례에 기반하여 범위 지정 저장소로 이전하는 방법 알아보기
- 항상 안전한 네트워크 연결을 사용합니다. 앱의 저장 데이터에는 Android에 내장된 사용자 인증 정보 암호화 방식을 사용합니다. 전송 중 데이터의 경우 민감도와 관계없이 모든 데이터 전송에 SSL의 후속 버전인 TLS를 사용합니다.
- 민감한 정보가 포함된 파일은 내부 저장소 내 앱 비공개 디렉터리에 배치합니다.
- Android 10(API 수준 29)에서는 앱과 관련된 파일만 외부 저장소의 앱별 디렉터리에 저장합니다. 범위 지정 저장소 자세히 알아보기
- 민감한 정보를 다른 앱으로 전달해야 한다면 명시적 인텐트를 사용합니다. 일회성 데이터 액세스 권한을 부여하여 다른 앱의 액세스를 더 엄격하게 제한합니다.
- 앱이 포그라운드에 있을 때도 마이크나 카메라를 사용하고 있다는 것을 실시간으로 표시합니다. Android 9(API 수준 28) 이상에서는 앱이 백그라운드에 있을 때 마이크 또는 카메라 액세스를 허용하지 않습니다.
- Logcat 메시지 또는 앱의 로그 파일에 민감한 정보를 포함하지 않습니다. 사용자 데이터를 처리하는 방법에 관해 자세히 알아보세요.
Jetpack에서는 앱 데이터를 더 안전하게 보호하기 위해 여러 라이브러리를 제공합니다. 가이드에서 Jetpack 보안 라이브러리와 Jetpack 환경설정 라이브러리의 사용 방법에 관해 자세히 알아보세요.
재설정할 수 있는 식별자 사용하기
사용자의 개인 정보를 존중하고, 재설정 가능한 식별자를 사용합니다. 자세한 내용은 고유 식별자 권장사항을 참고하세요.
- IMEI 및 기기 일련번호는 영구적인 식별자이므로 이러한 식별자에 액세스하지 않아야 합니다. Android 10(API 수준 29) 이상을 타겟팅하는 앱에서 이러한 식별자에 액세스하려고 하면
SecurityException
이 발생합니다. - 사용자 프로파일링 또는 광고 사용 사례에는 광고 ID만 사용합니다. 이는 Google Play에 게시하는 앱에 요구되는 필수사항입니다. 개인 맞춤설정을 위해 광고 추적에 관한 사용자 환경설정을 항상 존중합니다.
- 광고 이외의 사용 사례 대부분에는 비공개로 저장되는 전역 고유 ID(GUID)를 사용하며 이 ID는 앱 범위 ID입니다.
- 보안 설정 Android ID(SSAID)를 사용하여 사용자에게 계정 로그인을 요구하지 않고 개발자 소유 앱 간에 상태를 공유합니다. 앱 간에 로그아웃한 사용자의 환경설정을 추적하는 방법에 관해 자세히 알아보세요.