위치 권한-항상 허용 프롬프트 커스텀 가이드
-
사용자가 위치 권한을 앱 사용 중으로 하더라도 위치 항상 허용을 설명을 통해 독려할 수 있습니다.
-
사용자가 위치 권한을 항상 허용으로 하지 않고 알림을 닫더라도 지속적인 위치 수집이 가능합니다.
-
심사에 필요한 UI를 쉽게 추가하는 API를 제공하며 상황에 맞게 위치 권한을 요청하는 프롬프트가 미리 구현되어 있습니다.
loplat SDK ‘위치권한-항상허용 프롬프트’ (아래 이미지)
이 가이드에서는 각 프롬프트에 대한 상세 설명과 커스터마이즈하는 방법을 안내합니다.
프롬프트 1. 백그라운드 위치 권한 액세스에 대한 알림

알림 커스텀은 기본 SDK 알림에 Icon, Title, Text만 바꾸는 방법과 자체 알림을 SDK가 사용하도록 세팅하는 방법이 있습니다.
기본 알림 커스텀 방법
Plengi.setDefaultNotificationInfo()에 Icon, Title, Text 리소스 id를 담아 호출해 주세요.
알림에 앱 이름은 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. 백그라운드 위치 권한 액세스에 대한 알림을 클릭했을 때

| 버튼 | 동작 |
|---|---|
| 위치 권한 변경 | 백그라운드 위치 정보 액세스 내용 공개를 위한 대화상자를 출력합니다. |
| 알림 설정 변경 | 알림을 OFF할 수 있고 OFF한 경우에도 위치 권한이 있다면 지속적인 위치 획득이 가능합니다. |
| 모든 혜택 중지 | 혜택을 받을 수 없다는 팝업이 뜬 후 위치 권한 설정을 위해 앱 설정 화면으로 이동합니다. |
알림 채널 설정과 대화상자의 안내 문구(guide_description)도 커스텀이 가능합니다.
- 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
)
}
프롬프트 3. 백그라운드 위치 정보 액세스 내용 공개를 위한 대화상자
기본 제공하는 대화상자가 아닌 Custom Layout을 사용할 수 있습니다.
커스텀은 "취소 / 확인" 버튼을 제외한 상단 Layout의 커스텀이 가능합니다.
| 기본 대화상자 | Custom Layout 대화상자 |
|---|---|
![]() | ![]() |
이미지는 필수가 아니며 자사 캐시플레이스 앱의 경우 가독성을 높이기 위하여 추가했습니다.
Application.onCreate()에서 Plengi.setBackgroundLocationAccessDialogLayout()을 아래와 같이 선언합니다.
- 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을 사용하는 경우
문구에는 아래과 같은 요소들이 포함되어야 합니다.
-
'위치' 라는 용어
-
'백그라운드'/'앱이 닫힐 때'/'항상 사용 중'/'앱이 사용되지 않을 때' 중 하나를 사용하여 사용의 성격이 백그라운드에 있다는 것을 표현
ex) "이 앱을 사용하고 있지 않을 때도"
-
백그라운드에서 위치를 사용하는 모든 기능 목록
ex) "주변 혜택을 사용자에게 알려주기 위해"
-
사용 허용 범위를 광고로 확장하는 경우 다음 문구를 포함해야 합니다. '이 데이터는 광고를 제공/광고 기능을 지원/광고를 지원하기 위해서도 사용됩니다.'
ex) "이 데이터는 광고를 제공하기 위해서도 사용 됩니다."
프롬프트 4. 백그라운드 위치 권한 요청


