안드로이드 백그라운드 위치 권한 요청 심사 관련 개발 상세 가이드
앞서 설명한 내용들의 세부 설명으로 loplat SDK (v2.1.1.6.4 이상) 탑재 시 알아야할 개발 사항들과 기타 주의사항들이 포함되어 있습니다.
1. 앱 안에서 사용자에게 고지해야 하는 사항
"아래의 모든 Plengi 설정 api 들은 반드시 Application.onCreate()에서 호출해야 합니다."
-
백그라운드 위치 정보 액세스 내용 공개 :
- (방안1) 앱 자체적으로 ‘위치권한- 항상 허용' 을 받는 기능을 구현할 수 있습니다.
자체 구현할 경우 아래의 내용을 모두 구현해야 합니다.
- 심사를 위한 UI와 현재 위치 권한 레벨에 맞는 추가 권한 요청 로직을 방안2의 내용을 참고하여 직접 구현해야 합니다.
자세한 내용은 안드로이드 개발자 사이트를 확인 부탁드립니다. https://developer.android.com/training/location/permissions - 로플랫이 제공하는 항상허용 프롬프트를 사용하지 않도록 아래와 같이 Application.onCreate()에서
Plengi.disableFeatureBgLocationReviewUX(true)
를 선언 해야 합니다.
- (방안1) 앱 자체적으로 ‘위치권한- 항상 허용' 을 받는 기능을 구현할 수 있습니다.
- Java
- Kotlin
// Plengi 설정 api들(커스텀 알림 설정,PlengiListener)은 반드시 Application.onCreate()에서 호출해야 합니다.
Plengi plengi = Plengi.getInstance(context);
plengi.disableFeatureBgLocationReviewUX(true);
// Plengi 설정 api들(커스텀 알림 설정,PlengiListener)은 반드시 Application.onCreate()에서 호출해야 합니다.
val plengi = Plengi.getInstance(context)
plengi.disableFeatureBgLocationReviewUX(true)
- (방안2) loplat SDK에서 제공되는 '위치권한-항상 허용 프롬프트'를 사용하여 '위치권한-항상 허용' 을 받을 수 있습니다.
"방안2의 장점"
방안2는 Android11에서도 지속적인 위치 수집에 대한 대응이 포함되어 있습니다. 사용자가 위치 권한을 앱 사용중으로 하더라도 위치 항상허용을 설명을 통해 독려할 수 있고 사용자가 위치 권한을 항상 허용으로 하지 않고 알림을 닫더라도 지속적인 위치 수집이 가능합니다. 또한 심사에 필요한 UI를 쉽게 추가하는 API를 제공하며 상황에 맞게 위치 권한을 요청하는 프롬프트가 미리 구현되어 있습니다.
loplat SDK ‘위치권한-항상허용 프롬프트’ (아래 이미지)
방안2 적용 시 각 프롬프트 상세 및 커스터마이즈 방법 설명
프롬프트 1. loplat SDK가 백그라운드 위치 권한 액세스에 대한 알림을 아래와 같 이 출력합니다.
- 알림의 Icon, Title (주변 혜택 찾기 서비스 알림), Text (눌러서 알림 설정 > 알림 OFF 하기) 를 변경하려면
Plengi.setDefaultNotificationInfo
를 호출해야 합니다. 알림의 앱 이름은 loplat이 아닌 loplat SDK가 탑재될 앱의 이름으로 출력됩니다.
- Java
- Kotlin
// Plengi 설정 api들(커스텀 알림 설정,PlengiListener)은 반드시 Application.onCreate()에서 호출해야 합니다.
Plengi plengi = Plengi.getInstance(context);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
plengi.setDefaultNotificationInfo(
R.drawable.noti_small_icon,
R.string.noti_title,
R.string.noti_text
);
}
// Plengi 설정 api들(커스텀 알림 설정,PlengiListener)은 반드시 Application.onCreate()에서 호출해야 합니다.
val plengi = Plengi.getInstance(context)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
plengi.setDefaultNotificationInfo(
R.drawable.noti_small_icon,
R.string.noti_title,
R.string.noti_text
)
}
- 해당 알림자체를 Custom 하려면 사용할 알림을 생성한 뒤
Plengi.setDefaultNotificationInfo()
를 호출해야합니다.
- Java
- Kotlin
// Plengi 설정 api들(커스텀 알림 설정,PlengiListener)은 반드시 Application.onCreate()에서 호출해야 합니다.
// 알림부터 시작되는 전체 플로우를 customizing
Intent intent = new Intent(context, 알림 클릭 시 보여줄 액티비티.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_MUTABLE);
Plengi plengi = Plengi.getInstance(context);
/* NotificationCompat.Builder의 두 번째 param 값은 반드시
Plengi.getDefaultNotificationChannelId() 를 사용해 주세요. */
Notification notification = new NotificationCompat.Builder(this, plengi.getDefaultNotificationChannelId())
.setContentTitle("알림 제목")
.setContentText("알림 내용")
.setContentIntent(contentIntent)
...
.build();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
plengi.setDefaultNotificationInfo(notification);
}
// Plengi 설정 api들(커스텀 알림 설정,PlengiListener)은 반드시 Application.onCreate()에서 호출해야 합니다.
// 알림부터 시작되는 전체 플로우를 customizing
val intent = Intent(context: Context, 알림 클릭 시 보여줄 액티비티.class)
val contentIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_MUTABLE)
val plengi = Plengi.getInstance(context)
/* NotificationCompat.Builder의 두 번째 param 값은 반드시
Plengi.getDefaultNotificationChannelId() 를 사용해 주세요 */
val notification = NotificationCompat.Builder(this, plengi.getDefaultNotificationChannelId())
.setContentTitle("알림 제목")
.setContentText("알림 내용")
.setContentIntent(contentIntent)
...
.build()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
plengi.setDefaultNotificationInfo(notification)
}
프롬프트 2. loplat SDK생성한 백그라운드 위치 권한 액세스에 대한 알림을 클릭하면 아래와 같은 화면을 출력합니다.
- ‘위치 권한 변경’ 버튼을 클릭하면 백그라운드 위치 정보 액세스 내용 공개를 위한 대화상자를 출력합니다.
- '알림 설정변경' 버튼을 통해 알림을 OFF할 수 있고 OFF한 경우에도 위치 권한이 있다면 지속적인 위치 획득이 가능합니다.
- 대화상자의 안내 문구 (안드로이드 정책에 따른 위치 기반 ... … 설정에서 알림을 해제할 수 있습니다.) 를 변경하려면
Plengi.setDefaultNotificationChannel()
를 호출해야 합니다.
- Java
- Kotlin
// Plengi 설정 api들(커스텀 알림 설정,PlengiListener)은 반드시 Application.onCreate()에서 호출해야 합니다.
Plengi plengi = Plengi.getInstance(context);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
plengi.setDefaultNotificationChannel(
// Loplat SDK의 기본 값을 사용하려면 0
R.string.channel_name,
// Loplat SDK의 기본 값을 사용하려면 0
R.string.channel_description,
// Loplat SDK의 기본 값을 사용하려면 0
R.string.guide_description
);
}
// Plengi 설정 api들(커스텀 알림 설정,PlengiListener)은 반드시 Application.onCreate()에서 호출해야 합니다.
val plengi = Plengi.getInstance(context)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
plengi.setDefaultNotificationChannel(
// Loplat SDK의 기본 값을 사용하려면 0
R.string.channel_name,
// Loplat SDK의 기본 값을 사용하려면 0
R.string.channel_description,
// Loplat SDK의 기본 값을 사용하려면 0
R.string.guide_description
)
}
"대화상자의 Title(설정 변경 안내), 버튼(위치 권한 변경, 알림 설정 변경) 들은 변경이 불가능 합니다."
프롬프트 3. 백그라운드 위치 정보 액세스 내용 공개를 위한 대화상자를 아래와 같이 출력합니다.
기본 대화상자 | Custom Layout 대화상자 |
---|---|
- loplat SDK가 기본적으로 제공하는 대화상자가 아닌
Custom Layout
을 사용하길 원한다면Plengi.setBackgroundLocationAccessDialogLayout()
을 아래와 같이 Application.onCreate()에서 선언해야 합니다.
- Java
- Kotlin
// Plengi 설정 api들(커스텀 알림 설정,PlengiListener)은 반드시 Application.onCreate()에서 호출해야 합니다.
Plengi plengi = Plengi.getInstance(context);
// 백그라운드 위치 심사를 위한 Prompt dialog layout
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
plengi.setBackgroundLocationAccessDialogLayout(R.layout.custom_dialog)
}
// Plengi 설정 api들(커스텀 알림 설정,PlengiListener)은 반드시 Application.onCreate()에서 호출해야 합니다.
val plengi = Plengi.getInstance(context)
// 백그라운드 위치 심사를 위한 Prompt dialog layout
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
plengi.setBackgroundLocationAccessDialogLayout(R.layout.custom_dialog)
}
Custom Layout
을 사용할 경우 위Custom Layout
대화상자 이미지와 같이 출력됩니다. "취소 / 확인" 버튼을 제외한Layout
을set
해주시면 됩니다. 이미지는 필수가 아니며 자사 캐시플레이스 앱의 경우 가독성을 높이기 위하여 추가했습니다.Custom Layout
을 사용할 경우 문구에는 아래과 같은 요소들이 포함되어야 합니다.
- '위치' 라는 용어
- '백그라운드'/'앱이 닫힐 때'/'항상 사용 중'/'앱이 사용되지 않을 때' 중 하나를 사용하여 사용의 성격이 백그라운드에 있다는 것을 표현 ex) "이 앱을 사용하고 있지 않을 때도"
- 백그라운드에서 위치를 사용하는 모든 기능 목록 ex) "주변 혜택을 사용자에게 알려주기 위해"
- 사용 허용 범위를 광고로 확장하는 경우 다음 문구를 포함해야 합니다. '이 데이터는 광고를 제공/광고 기능을 지원/광고를 지원하기 위해서도 사용됩니다.' ex) "이 데이터는 광고를 제공하기 위해서도 사용 됩니다."
프롬프트 4. 백그라운드 위치 권한을 요청합니다.
2. 구글 플레이 스토어에서 설명해야 하는 사항
구글 플레이 스토어 앱 정보에서 백그라운드 위치 정보 액세스 내용 표기 :
- 앱 설명에 백그라운드 위치 정보 액세스를 명확히 표시해야 합니다.
ex) 캐시플레이스는 사용자의 현재 위치를 기반으로 매장 정보 수집 안내 및 혜택 알림을 제공하기 위해 앱이 닫혀있을 때나 사용되지 않을 때도 위치 데이터를 수집합니다. 또한 이 데이터는 광고를 지원하기 위해서도 사용됩니다.
- 휴대전화 스크린샷에 백그라운드 위치 정보 액세스 관련 앱 스크린샷을 추가해야 합니다.