안드로이드 백그라운드 위치 권한 요청 심사 관련 개발 상세 가이드
앞서 설명한 내용들의 세부 설명으로 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(설정 변경 안내), 버튼(위치 권한 변경, 알림 설정 변경) 들은 변경이 불가능 합니다."