이 가이드는 푸시 알림에 대한 스타일을 설정하고 푸시 수신시 동작하는 사용자 리시버를 등록하는 등 SDK에 대한 전반적인 사용법을 보여줍니다. 가이드에 예시로 첨부된 스크린샷은 Android 9.0
이 탑재된 Samsung SM-950N
기기에서 캡쳐되었습니다.
간단 가이드
를 아직 완료하지 않았다면 먼저 이 가이드를 적용하기 전에 완료하십시오.
4.1
이상1.4
이상16.0.5
이상17.3.4
이상26.1.0
이상1.1.1
이상10
이하4KB
페이로드 형태
변수 | 형태 | 설명 |
---|---|---|
msgId | JSONString | 푸시 알림에 해당하는 ID |
notiTitle | JSONString | 푸시 알림 제목 |
notiMsg | JSONString | 푸시 알림 내용 |
notiImg | JSONString | 이미지 URL |
message | JSONString | 인앱 메시지 내용 |
sound | JSONString | |
msgType | JSONString | 푸시 알림 형태 |
popupFlag | JSONString | 안드로이드 팝업 여부 |
data | JSONObject | 기타 데이터 |
notificationId | int | 알림 ID |
l
: 앱 링크 URL 페이로드 예시
{
"i" : "435245",
"notiTitle" : "테스트 제목",
"notiMsg" : "테스트 내용.",
"notiImg" : " http://img.naver.net/static/www/u/2013/0731/nmms_224940510.jpg",
"message" : "테스트 팝업",
"sound" : "default",
"t" : "T",
"d" : "{"l" : "http://www.naver.com"}"
}
48x48px
, .jpg .png
72x72px
, .jpg .png
600x300px
, .jpg .png
.ogg .wav .m4a .mp3
변수 | 형태 | 설명 |
id | String | DB의 row id |
userMsgId | String | (서버에서의) 메시지의 unique한 ID |
msgGrpName | String | 메시지의 그룹명 |
appLink | String | appLink(추가데이터) |
iconName | String | iconName(추가데이터) |
msgId | String | 메시지 ID |
pushTitle | String | push 타이틀 |
pushMsg | String | push 메시지 |
msgText | String | 메시지 텍스트 |
map1 | String | 추가매핑정보1 |
map2 | String | 추가매핑정보2 |
map3 | String | 추가매핑정보3 |
msgType | String | 메시지 유형 |
readYn | String | 읽음여부 |
delYn | String | 삭제여부 |
expireDate | String | 메시지 유효 날짜 |
regDate | String | 메시지 등록 날짜 |
msgGrpCd | String | 메시지 그룹 코드 |
변수 | 형태 | 설명 |
---|---|---|
id | String | DB의 row id |
userMsgId | String | (서버에서의) 메시지 그룹의 unique한 ID |
msgGrpNm | String | |
msgText | String | |
msgGrpCd | String | 메시지 그룹 코드 |
msgId | String | |
msgType | String | 메시지 그룹 타입 |
newMsgCnt | String | |
regDate | String | 메시지 그룹 등록 날짜 |
기존 SDK에서 설정하던 방식은 AndroidManifest#metaData
와 Properties
그리고 소스코드 상에서 설정하는 방식으로 설정 값을 확인하기가 힘든 단점이 있었습니다. 이런 단점을 보완하기 위해 Builder
패턴을 활용한 설정이 도입되었고 SDK의 모든 설정은 한군데에서 설정이 됩니다. 물론 기존 방식으로 설정된 값은 신규 설정 방법과 상관없이 호환되며 변경없이 사용이 가능합니다.
빌더 파라미터로 설정하는 Context
값은 반드시 ApplicationContext 값으로 설정해주시기 바랍니다.
APMS sdk = new APMS.Builder()
.setDebugEnabled(true)
.setDebugTag("SDK")
.setPrivateEnabled(false)
.setPrivateServerUrl("tcp://private.pushpia.com:1883","ssl://private.pushpia.com:443")
.setFirebaseSenderId("997255891024")
.setServerAppKey("402f4c2a26364e10492")
.setServerUrl("https://api.pushpia.com:444/")
.setNotificationConfig(
new NotificationConfig.Builder()
.setColor(ContextCompat.getColor(activity, R.color.colorAccent))
.setExpandable(true, "두손가락을 이용해 아래로 당겨주세요.")
.setRing(true)
.setVibrate(true)
.setGroupable(true)
.setStackable(true)
.setWakeLockScreen(true)
.setSmallIcon(R.drawable.ic_notifications_black_24dp)
.setLargeIcon(R.drawable.ic_android)
.setSound(IAPMSConsts.NOTIFICATION_DEFAULT_SOUND)
.setClickListener("clickAction", NotificationClickReceiver.class)
.setEventListener("eventAction", NotificationEventReceiver.class)
.setChannelName("Channel Example")
.setChannelDescription("")
.setCanModifyChannelByUser(true)
.setPopupActivity(DefaultDialog.class)
.setShowPopupActivity(true, true)
.create()
)
.setBadgeConfig(
new BadgeConfig.Builder()
.setLauncherBadgeEnabled(false)
.setLauncherBadgeAutoUpdateEnabled(true)
.setNotificationBadgeEnabled(false)
.create()
)
.setDefaultDialogConfig(
new DefaultDialogConfig.Builder()
.setHasTransition(true)
.setHasShadow(false)
.setLeftButtonText("left")
.setRightButtonText("right")
.setTitleTextColor(Color.RED)
.setContentTextColor("#ffffff")
.setBackgroundColor(Color.BLACK)
.setShowOnLockScreen(true)
.setLeftButtonTextColor(Color.GREEN)
.setLeftButtonBackgroundColor(Color.MAGENTA)
.setRightButtonTextColor(Color.WHITE)
.setRightButtonBackgroundColor(Color.GREEN)
.setLeftButtonClickListener("leftButtonAction", NotificationEventReceiver.class)
.setRightButtonClickListener("rightButtonAction", NotificationClickReceiver.class)
.create()
)
.build(getApplicationContext());
기본적으로는 SDK의 공통요소를 바로 설정할 수 있으며 특정 범주에 해당하는 설정 값은 별도의 Builder
를 입력받아 설정할 수 있습니다. 특정 범주에 해당하는 설정 Builder
는 다음과 같습니다.
설정 하위 요소 Builder 대한 설명은 각각의 섹션에서 자세히 다루기로 하고 이 섹션에서는 SDK 자체 설정 항목에 대해서 설명하도록 하겠습니다.
FCM 콘솔의 발신자 ID를 설정하며 이는 필수 항목입니다. 기존 SDK에서는 Properties
파일에서 gcm_project_id
라는 항목으로 설정을 지원하였습니다. 이 값은 푸시 알림 수신시 설정한 FCM 프로젝트에서 발송한 것인지 체크하고 푸시 토큰을 발급받는 용도로 사용됩니다.
APMS sdk = new APMS.Builder()
...
.setFirebaseSenderId("997255892867")
.build(Context);
해당 값을 입력하기 위해 먼저 FCM 콘솔로 이동하여 주시기 바랍니다.
프로젝트를 클릭하여 이동한 다음 왼쪽 상단에 설정 아이콘을 클릭하여 팝업을 띄워주시기 바랍니다.
팝업에서 프로젝트 설정을 클릭한 다음 클라우드 메시징을 클릭하여 주시기 바랍니다.
하단에 보이는 발신자 ID
값을 입력해주시면 됩니다.
MSG-API 서버의 어플리케이션 키 값을 설정하며 이는 필수 항목입니다. 기존 SDK에서는 Properties
파일에서 app_key
라는 항목으로 설정을 지원하였습니다. 해당 값은 푸시 발송 관리자 웹페이지에서 조회가 가능합니다. 내 정보 혹은 앱 관리에서 Android 앱키
값을 입력해주시기 바랍니다.
APMS sdk = new APMS.Builder()
...
.setServerAppKey("a134f1")
.build(Context);
MSG-API 서버의 URL 값을 입력하며 이는 필수 항목 입니다. 기존 SDK에서는 Properties
파일에서 api_server_url
라는 항목으로 설정을 지원하였습니다. MSG-API 서버가 설치된 URL 주소를 입력해야 하며 타스를 사용하실 경우 타스 서버의 MSG-API URL 값을 입력해주시면 됩니다.
APMS sdk = new APMS.Builder()
...
.setServerUrl("https://api.pushpia.com:444/")
.build(Context);
https://api.pushpia.com:444/
SDK에서 로그의 표시유무 설정합니다. 기본값은 true
입니다. 기존 SDK에서는 Properties
파일에서 debug_flag
라는 항목으로 설정을 지원하였습니다.
true
: 로그 표시false
: 로그 미표시APMS sdk = new APMS.Builder()
...
.setDebugEnabled(true)
.build(Context);
SDK에서 로그의 TAG 값을 설정합니다. 기본값은 APMS
입니다. 기존 SDK에서는 Properties
파일에서 debug_tag
라는 항목으로 설정을 지원하였습니다.
APMS sdk = new APMS.Builder()
...
.setDebugTag("SDK")
.build(Context);
SDK에서 Private 서비스 활성화 유무를 선택합니다. 기본값은 false
입니다. 자세한 내용은 Private 서비스 활성화시키기 항목을 참고하여 주시기 바랍니다. 기존 SDK에서는 Properties
파일에서 mqtt_flag
라는 항목으로 설정을 지원하였습니다.
true
: Private 서비스 활성화false
: Private 서비스 비활성화APMS sdk = new APMS.Builder()
...
.setPrivateEnabled(false)
.build(Context);
SDK에서 Private 서비스에서 활용되는 URL을 설정합니다. URL은 프로토콜에 따라 TCP와 SSL 두가지 전부 입력하게 되어 있습니다. 프로토콜에 맞는 URL이 없을 경우 ""
값을 입력해주시기 바랍니다. 자세한 내용은 Private 서비스 활성화시키기 항목을 참고하여 주시기 바랍니다. 기존 SDK에서는 Properties
파일에서 mqtt_server_url_ssl
, mqtt_server_url_tcp
라는 항목으로 설정을 지원하였습니다.
APMS sdk = new APMS.Builder()
...
.setPrivateServerUrl("tcp://private.pushpia.com:80","ssl://private.pushpia.com:443")
.build(Context);
푸시 알림 표시에서 사용되는 모든 항목을 설정합니다. NotificationConfig
를 사용하여 설정하며 푸시 알림 설정하기를 참고하여 설정해 주시기 바랍니다.
APMS sdk = new APMS.Builder()
...
.setNotificationConfig(
new NotificationConfig.Builder()
.create()
)
.build(Context);
SDK에서 사용되는 네트워크 관련 항목을 설정합니다. NetworkConfig
를 사용하여 설정하며 네트워크 설정하기를 참고하여 설정해 주시기 바랍니다.
APMS sdk = new APMS.Builder()
...
.setNetworkConfig(
new NetworkConfig.Builder()
.create()
)
.build(Context);
앱 아이콘 뱃지에서 사용되는 모든 항목을 설정합니다. BadgeConfig
를 사용하여 설정하며 앱 아이콘 뱃지 설정하기를 참고하여 설정해 주시기 바랍니다.
APMS sdk = new APMS.Builder()
...
.setBadgeConfig(
new BadgeConfig.Builder()
.create()
)
.build(Context);
기본 팝업에서 사용되는 모든 항목을 설정합니다. DefaultDialogConfig
를 사용하여 설정하며 기본 팝업 설정하기를 참고하여 설정해 주시기 바랍니다.
APMS sdk = new APMS.Builder()
...
.setDefaultDialogConfig(
new DefaultDialog.Builder()
.create()
)
.build(Context);
푸시 수신시 알림음 재생 유무를 설정합니다. 기본값은 true
입니다. 기존 SDK에서는 setRingMode()
라는 메소드로 설정을 지원하였습니다.
true
: 푸시를 수신했을때 알림음을 재생함false
: 푸시를 수신했을때 알림음을 재생하지 않음APMS sdk = new APMS.Builder()
...
.setNotificationConfig(
new NotificationConfig.Builder()
...
.setRing(true)
.create()
)
.build(Context);
푸시 수신시 어떤 음원을 재생할지 선택합니다. 기본 알림음으로 재생하려면 IAPMSConsts.NOTIFICATION_DEFAULT_SOUND
값을 입력하여 주시기 바랍니다. 기존 SDK에서는 AndroidManifest
파일에서 APMS_SET_NOTI_SOUND
항목으로 설정을 지원하였습니다. 확장자는 mp3
, m4a
,wav
,ogg
를 지원합니다.
R.raw.{sound}
: 사용자 지정 알림음 재생IAPMSConsts.NOTIFICATION_DEFAULT_SOUND
: 푸시를 수신했을때 디바이스 기본 알림음 재생APMS sdk = new APMS.Builder()
...
.setNotificationConfig(
new NotificationConfig.Builder()
...
.setSound(R.raw.h1)
.create()
)
.build(Context);
APMS sdk = new APMS.Builder()
...
.setNotificationConfig(
new NotificationConfig.Builder()
...
.setSound(IAPMSConsts.NOTIFICATION_DEFAULT_SOUND)
.create()
)
.build(Context);
푸시 수신시 진동 재생 유무를 선택합니다. 기본값은 true
입니다. 기존 SDK에서는 setVibeMode()
라는 메소드로 설정을 지원하였습니다.
true
: 푸시를 수신했을때 진동을 재생함false
: 푸시를 수신했을때 진동을 재생하지 않음APMS sdk = new APMS.Builder()
...
.setNotificationConfig(
new NotificationConfig.Builder()
...
.setVibrate(true)
.create()
)
.build(Context);
화면이 꺼져있는 도중 푸시 수신시 화면을 깨울지 말지를 선택합니다. 기본값은 true
입니다.
true
: 푸시를 수신했을때 화면이 꺼져있을 경우 화면을 깨움false
: 푸시를 수신했을때 화면이 꺼져있을 경우 화면을 깨우지 않음APMS sdk = new APMS.Builder()
...
.setNotificationConfig(
new NotificationConfig.Builder()
...
.setWakeLockScreen(true)
.create()
)
.build(Context);
푸시 수신시 적재 유무를 설정합니다. 기본값은 true
입니다. 기존 SDK에서는 Properties
파일에서 noti_group_flag
라는 항목으로 설정을 지원하였습니다.
true
: 여러개의 푸시를 수신받았을때 푸시를 적재하여 표시함false
: 여러개의 푸시를 수신받았을때 가장 최근에 수신된 단 하나의 푸시만을 표시함APMS sdk = new APMS.Builder()
...
.setNotificationConfig(
new NotificationConfig.Builder()
...
.setStackable(true)
.create()
)
.build(Context);
적재하지 않도록 설정 | 적재하여 표시하도록 설정 |
---|---|
![]() |
![]() |
푸시 수신시 그룹화 적용 유무를 설정합니다. 그룹화란 여러개의 푸시를 수신받았을때 이를 그룹으로 뭉쳐서 보여주는 기능입니다. 기본값은 true
입니다. 푸시가 적재 되어야 그룹화가 가능하므로 적재 기능을 사용하지 않을 경우 의미가 없습니다. Android 7.0
부터 지원합니다.
true
: 여러개의 푸시를 수신받았을때 푸시를 그룹화하여 표시함false
: 여러개의 푸시를 수신받았을때 푸시를 그룹화하여 표시하지 않음APMS sdk = new APMS.Builder()
...
.setNotificationConfig(
new NotificationConfig.Builder()
...
.setStackable(true)
.create()
)
.build(Context);
이미지가 포함되지 않은 푸시 수신시 확장 유무를 설정합니다. 기본값은 false
입니다. 기존 SDK에서는 Properties
파일에서 big_text_mode
라는 항목으로 설정을 지원하였습니다. Android 4.1
버전부터 지원합니다.
true
: 이미지가 포함되지 않은 푸시를 수신했을때 확장 가능 함false
: 이미지가 포함되지 않은 푸시를 수신했을때 확장 가능 하지 않음APMS sdk = new APMS.Builder()
...
.setNotificationConfig(
new NotificationConfig.Builder()
...
.setExpandable(false)
.create()
)
.build(Context);
확장하기 전 | 확장한 후 |
---|---|
![]() |
![]() |
이미지가 포함되지 않은 푸시 수신시 확장 유무를 설정함과 동시에 사용자에게 확장을 지시할 문구를 설정합니다. 만약 지시 문구를 표시하지 않을 경우 ""
를 입력해주시기 바랍니다. Android 4.1
버전부터 지원합니다.
true
: 이미지가 포함되지 않은 푸시를 수신했을때 확장 가능 함false
: 이미지가 포함되지 않은 푸시를 수신했을때 확장 가능 하지 않음APMS sdk = new APMS.Builder()
...
.setNotificationConfig(
new NotificationConfig.Builder()
...
.setExpandable(true, "두손가락을 이용해 아래로 당겨주세요.")
.create()
)
.build(Context);
확장 지시 문구 미적용 | 확장 지시 문구 적용 |
---|---|
![]() |
![]() |
푸시 알림의 색상을 설정합니다. 디바이스 마다 표시되는 모습이 다를 수 있습니다. Android 5.0
이상부터 지원합니다.
APMS sdk = new APMS.Builder()
...
.setNotificationConfig(
new NotificationConfig.Builder()
...
.setColor(Color.BLACK)
.create()
)
.build(Context);
APMS sdk = new APMS.Builder()
...
.setNotificationConfig(
new NotificationConfig.Builder()
...
.setColor(ContextCompat.getColor(activity, R.color.colorAccent))
.create()
)
.build(Context);
Color.Black 적용 | accentColor 적용 |
---|---|
![]() |
![]() |
푸시 알림의 색상을 설정합니다. 디바이스 마다 표시되는 모습이 다를 수 있습니다. Android 5.0
이상부터 지원합니다. setColor(int color)
과 동일한 기능이며 색상의 HexString 값을 입력받습니다.
APMS sdk = new APMS.Builder()
...
.setNotificationConfig(
new NotificationConfig.Builder()
...
.setColor("#e3e3e3")
.create()
)
.build(Context);
푸시 알림의 Small Icon을 설정하며 필수 사항입니다. 디바이스 마다 표시되는 모습이 다를 수 있습니다. Android에서는 Small Icond을 Status Bar Icon로 인식하기 때문에 이미지는 반드시 벡터 이미지가 아니어야 하며 투명한 배경에 단색으로 구성되어 있어야 합니다.
APMS sdk = new APMS.Builder()
...
.setNotificationConfig(
new NotificationConfig.Builder()
...
.setSmallIcon(R.drawable.ic_notifications_black_24dp)
.create()
)
.build(Context);
푸시 알림의 Large Icon을 설정합니다. 설정하고 싶지 않을 경우 IAPMSConsts.NOTIFICATION_NO_LARGE_ICON
값을 설정해주시기 바랍니다. Large Icon을 설정할 경우 해당 아이콘이 표시되는 영역만큼 가리게 되어 글자가 더 적게 표시됩니다. Large Icon은 백터 이미지가 아니여야 합니다.
R.drawable.{largeIcon}
: Large Icon 사용자 지정 이미지 표시IAPMSConsts.NOTIFICATION_NO_LARGE_ICON
: Large Icon 표시하지 않음APMS sdk = new APMS.Builder()
...
.setNotificationConfig(
new NotificationConfig.Builder()
...
.setLargeIcon(R.drawable.ic_android)
.create()
)
.build(Context);
APMS sdk = new APMS.Builder()
...
.setNotificationConfig(
new NotificationConfig.Builder()
...
.setLargeIcon(null)
.setLargeIcon(IAPMSConsts.NOTIFICATION_NO_LARGE_ICON)
.create()
)
.build(Context);
Large Icon 미적용 | Large Icon 적용 |
---|---|
![]() |
![]() |
푸시 알림의 Large Icon을 설정합니다. Large Icon을 설정할 경우 해당 아이콘이 표시되는 영역만큼 가리게 되어 글자가 더 적게 표시됩니다. Large Icon은 백터 이미지가 아니여야 합니다. 해당 메소드를 사용하여 Bitmap을 파라미터로 입력했을 경우 resource Id를 입력하는 방법보다 우선적으로 적용됩니다. Bitmap이 아닌 resource Id로 설정하고 싶을 경우 setLargeIcon에 null을 입력하여 주시고 setLargeIcon(int resId)를 다시 한번 호출하여 주시기 바랍니다.
APMS sdk = new APMS.Builder()
...
.setNotificationConfig(
new NotificationConfig.Builder()
...
.setLargeIcon(bitmap)
.create()
)
.build(Context);
APMS sdk = new APMS.Builder()
...
.setNotificationConfig(
new NotificationConfig.Builder()
...
.setLargeIcon(null)
.setLargeIcon(R.drawable.ic_android)
.create()
)
.build(Context);
APMS sdk = new APMS.Builder()
...
.setNotificationConfig(
new NotificationConfig.Builder()
...
.setLargeIcon(null)
.setLargeIcon(IAPMSConsts.NOTIFICATION_NO_LARGE_ICON)
.create()
)
.build(Context);
푸시 알림의 알림 채널 이름을 설정합니다. Android 8.0
부터 푸시 수신시 필수적으로 알림채널을 필요로 합니다. 이름을 설정하지 않거나 ""
값으로 설정할 경우 앱 이름으로 설정됩니다.
APMS sdk = new APMS.Builder()
...
.setNotificationConfig(
new NotificationConfig.Builder()
...
.setChannelName("Channel Example")
.create()
)
.build(Context);
Channel Name 미적용 | Channel Name 적용 |
---|---|
![]() |
![]() |
푸시 알림의 알림 채널 설명을 설정합니다. Android 8.0
부터 푸시 수신시 필수적으로 알림채널을 필요로 합니다. 설명을 사용하지 않을 경우 ""
를 입력하여 주시기 바랍니다.
APMS sdk = new APMS.Builder()
...
.setNotificationConfig(
new NotificationConfig.Builder()
...
.setChannelDescription("channel description")
.create()
)
.build(Context);
Channel Description 미적용 | Channel Description 적용 |
---|---|
![]() |
![]() |
애니메이션 푸시, 슬라이드 푸시에 사용되는 알림 채널 이름을 설정합니다. Android 8.0
부터 푸시 수신시 필수적으로 알림채널을 필요로 합니다. 이름을 설정하지 않거나 ""
값으로 설정할 경우 "무음 알림"
으로 설정됩니다.
APMS sdk = new APMS.Builder()
...
.setNotificationConfig(
new NotificationConfig.Builder()
...
.setMutedChannelName("Channel Example")
.create()
)
.build(Context);
애니메이션 푸시, 슬라이드 푸시에 사용되는 알림 채널 설명을 설정합니다. Android 8.0
부터 푸시 수신시 필수적으로 알림채널을 필요로 합니다. 설명을 사용하지 않을 경우 ""
를 입력하여 주시기 바랍니다.
APMS sdk = new APMS.Builder()
...
.setNotificationConfig(
new NotificationConfig.Builder()
...
.setMutedChannelDescription("channel description")
.create()
)
.build(Context);
푸시 알림의 알림 채널을 사용자가 변경 가능 유무를 설정합니다. 알림 채널은 기본적으로 사용자가 설정을 바꿀 수 있으며 사용자가 설정할 수 있는 항목은 기본값은 true
입니다. 만약 사용자가 알림 채널을 변경할 수 없도록 false
로 설정한 상태에서 알림 채널에 설정된 사항들이 SDK에서 설정한 사항들과 서로 다를 경우 SDK에서 설정한 사항을 적용하기 위해서 기존 생성된 알림 채널을 삭제하고 재생성합니다. 알림 채널에 대한 설정은 삭제하지 않을 경우 변경사항이 적용되지 않기 때문입니다. 또한 이렇게 알림 채널을 삭제할 경우 사용자에게는 ~개의 카테고리 삭제됨
이라는 문구가 표시되게 됩니다.
true
: 사용자가 알림 채널 설정을 변경할 수 있음, 설정에 따라 알림이 표시되지 않을 수 있음false
: 사용자가 알림 채널 설정을 변경할 수 없음, SDK 설정과 다를 경우 채널이 삭제되고 재생성됨APMS sdk = new APMS.Builder()
...
.setNotificationConfig(
new NotificationConfig.Builder()
...
.setCanModifyChannelByUser(false)
.create()
)
.build(Context);
푸시 알림을 클릭했을때 동작할 BroadcastReceiver를 설정합니다. 자세한 내용은 푸시 알림 클릭 이벤트 등록하기 항목을 참고하여 주시기 바랍니다. 기존 SDK에서는 Properties
파일에서 noti_receiver
라는 항목으로 설정을 지원하였습니다.
Intent에 할당될 인텐트 액션을 설정합니다.
BroadcastReceiver의 클래스를 설정합니다.
APMS sdk = new APMS.Builder()
...
.setNotificationConfig(
new NotificationConfig.Builder()
...
.setClickListener("com.humuson.click", NotificationClickReceiver.class)
.create()
)
.build(Context);
푸시 알림을 수신 받았을때 동작할 BroadcastReceiver를 설정합니다. 자세한 내용은 푸시 알림 수신 이벤트 등록하기 항목을 참고하여 주시기 바랍니다. 기존 SDK에서는 Properties
파일에서 push_receiver_class
라는 항목으로 설정을 지원하였습니다.
Intent에 할당될 인텐트 액션을 설정합니다.
BroadcastReceiver의 클래스를 설정합니다.
APMS sdk = new APMS.Builder()
...
.setNotificationConfig(
new NotificationConfig.Builder()
...
.setEventListener("com.humuson.event", NotificationEventReceiver.class)
.create()
)
.build(Context);
푸시 알림을 수신 받았을때 팝업 액티비티를 표시할지 설정합니다. 기본 팝업을 사용하려면 기본 팝업 설정하기 항목을 참고하여 주시기 바랍니다. Android 10.0
부터는 showWhenForegroundState의 값을 false
로 하여 앱 상태가 백그라운드시 표시하도록 하더라도 백그라운드 활동 시작 제한사항에 적용되어 표시되지 않습니다.
true
: 푸시를 수신했을때 팝업 액티비티를 표시함false
: 푸시를 수신했을때 팝업 액티비티를 표시하지 않음true
: 푸시를 수신했을때 앱이 전면에 있는 상태일때만 팝업 액티비티를 표시함false
: 푸시를 수신했을때 앱 상태에 상관없이 팝업 액티비티를 표시함APMS sdk = new APMS.Builder()
...
.setNotificationConfig(
new NotificationConfig.Builder()
...
.setShowPopupActivity(true, true)
.create()
)
.build(Context);
푸시 알림을 수신 받았을때 표시할 팝업 액티비티를 설정합니다. 기본 팝업을 사용하려면 기본 팝업 설정하기 항목을 참고하여 주시기 바랍니다.
APMS sdk = new APMS.Builder()
...
.setNotificationConfig(
new NotificationConfig.Builder()
...
.setPopupActivity(CustomPopupActivity.class)
.create()
)
.build(Context);
APMS sdk = new APMS.Builder()
...
.setNotificationConfig(
new NotificationConfig.Builder()
...
.setPopupActivity(DefaultDialog.class)
.create()
)
.build(Context);
푸시 알림을 가로채기 위한 Interceptor를 설정합니다. 설정하는 것은 클릭 리시버와 동일하게 BroadcastReceiver를 설정하시면 됩니다. 설정한 리시버는 NotificationInterceptor 클래스를 상속 받아야 합니다. 자세한 내용은 푸시 알림 가로채기 섹션을 참고하여 주시기 바랍니다.
Intent에 할당될 인텐트 액션을 설정합니다.
BroadcastReceiver의 클래스를 설정합니다.
APMS sdk = new APMS.Builder()
...
.setNotificationConfig(
new NotificationConfig.Builder()
...
.setInterceptor("com.humuson.intercept", NotificationInterceptReceiver.class)
.create()
)
.build(Context);
네트워크 통신시 보다 세밀한 설정을 필요로 하는 경우에 사용됩니다. 기존 SDK에는 제공되어지지 않았던 사항이며 추가되었습니다.
네트워크 통신 실패시 Timeout 값을 설정합니다. 기본값은 2500
입니다.
APMS sdk = new APMS.Builder()
...
.setNetworkConfig(
new NetworkConfig.Builder()
.setTimeout(2500)
.create()
)
.build(Context);
네트워크 통신 실패시 재시도 횟 수를 설정합니다. 기본값은 1
입니다.
APMS sdk = new APMS.Builder()
...
.setNetworkConfig(
new NetworkConfig.Builder()
.setRetryCount(1)
.create()
)
.build(Context);
네트워크 통신 실패로 인한 재시도시 timeout 배수를 설정합니다. 기본값은 1f
입니다.
APMS sdk = new APMS.Builder()
...
.setNetworkConfig(
new NetworkConfig.Builder()
.setBackoffMultiplier(1f)
.create()
)
.build(Context);
기존에도 제공하던 팝업 액티비티가 있었으나 설정 적용이 어려운 점 매테리얼 디자인 가이드에 적합하지 않은 점 등의 이유로 기본 팝업
이라는 새로운 모듈로 새로 개편되었습니다. 팝업에서 필요한 부분만을 추려내어 제공하도록 변경되었고 기존 팝업 액티비티의 적용의 어려웠던 점을 개선하여 SDK와 동일하게 Builder 형식으로 설정하도록 변경되었습니다.
SDK 기본 설정과 마찬가지로 별도의 설정을 하지 않을 경우 기존에 설정된 사항에 따라 동작하므로 SDK를 변경했다고 해서 코드를 변경할 필요는 없습니다.
이미지가 포함되지 않은 푸시 알림 수신시 | 이미지가 포함된 푸시 알림 수신시 |
---|---|
![]() |
![]() |
기본 팝업 실행 및 종료시 전환 애니메이션 사용유무를 설정합니다. 기본값은 true
입니다.
true
: 팝업 액티비티 실행 및 종료시 전환 애니메이션 사용false
: 팝업 액티비티 실행 및 종료시 전환 애니메이션 사용하지 않음APMS sdk = new APMS.Builder()
...
.setDefaultDialogConfig(
new DefaultDialogConfig.Builder()
...
setHasTransition(false)
.create()
)
.build(Context);
기본 팝업 화면 밖의 영역을 클릭했을때 기본 팝업을 종료할지를 선택합니다. 기본값은 true
입니다.
true
: 기본 팝업 실행 화면 밖의 영역을 클릭했을때 기본 팝업을 종료함false
: 기본 팝업 실행 화면 밖의 영역을 클릭했을때 기본 팝업을 종료하지 않음APMS sdk = new APMS.Builder()
...
.setDefaultDialogConfig(
new DefaultDialogConfig.Builder()
...
.setCancellable(true)
.create()
)
.build(Context);
기본 팝업 화면 밖의 영역을 어둡게 처리할지 설정합니다. 기본값은 true
입니다.
true
: 기본 팝업 실행 화면 밖의 영역을 어둡게 처리함false
: 기본 팝업 실행 화면 밖의 영역을 어둡게 처리하지 않음APMS sdk = new APMS.Builder()
...
.setDefaultDialogConfig(
new DefaultDialogConfig.Builder()
...
.setDimOnOutside(true)
.create()
)
.build(Context);
Dim 미적용 | Dim 적용 |
---|---|
![]() |
![]() |
기본 팝업 화면에 그림자 적용유무를 설정합니다. 기본값은 true
입니다.
true
: 기본 팝업 화면에 그림자를 표시함false
: 기본 팝업 화면에 그림자를 표시하지 않음APMS sdk = new APMS.Builder()
...
.setDefaultDialogConfig(
new DefaultDialogConfig.Builder()
...
setHasShadow(true)
.create()
)
.build(Context);
Shadow 미적용 | Shadow 적용 |
---|---|
![]() |
![]() |
기본 팝업 실행시 잠금화면을 무시하고 표시할지 설정합니다. 기본값은 false
입니다.
true
: 기본 팝업 실행시 잠금 화면을 위에 기본 팝업을 표시false
: 기본 팝업 실행시 잠금 화면을 해제해야 기본 팝업을 표시APMS sdk = new APMS.Builder()
...
.setDefaultDialogConfig(
new DefaultDialogConfig.Builder()
...
.setShowOnLockScreen(false)
.create()
)
.build(Context);
잠금화면 무시하고 표시하지 않음 | 잠금화면 무시하고 표시 |
---|---|
![]() |
![]() |
기본 팝업의 배경 색상을 설정합니다. 기본값은 Color.WHITE
입니다.
APMS sdk = new APMS.Builder()
...
.setDefaultDialogConfig(
new DefaultDialogConfig.Builder()
...
.setBackgroundColor(Color.RED)
.create()
)
.build(Context);
기본 팝업의 배경 색상을 설정합니다. 기본값은 Color.WHITE
입니다.
APMS sdk = new APMS.Builder()
...
.setDefaultDialogConfig(
new DefaultDialogConfig.Builder()
...
.setBackgroundColor("#3e3e3e")
.create()
)
.build(Context);
기본 팝업의 제목 폰트 크기를 설정합니다. 기본값은 20
입니다.
APMS sdk = new APMS.Builder()
...
.setDefaultDialogConfig(
new DefaultDialogConfig.Builder()
...
.setTitleTextSize(20)
.create()
)
.build(Context);
기본 팝업의 제목 폰트 색상을 설정합니다. 기본값은 Color.BLACK
입니다.
APMS sdk = new APMS.Builder()
...
.setDefaultDialogConfig(
new DefaultDialogConfig.Builder()
...
.setTitleTextColor(Color.RED)
.create()
)
.build(Context);
기본 팝업의 제목 폰트 색상을 설정합니다. 기본값은 Color.BLACK
입니다.
APMS sdk = new APMS.Builder()
...
.setDefaultDialogConfig(
new DefaultDialogConfig.Builder()
...
.setTitleTextColor("#3e3e3e")
.create()
)
.build(Context);
기본 팝업의 내용 폰트 크기를 설정합니다. 기본값은 16
입니다.
APMS sdk = new APMS.Builder()
...
.setDefaultDialogConfig(
new DefaultDialogConfig.Builder()
...
setContentTextSize(16)
.create()
)
.build(Context);
기본 팝업의 내용 폰트 색상을 설정합니다. 기본값은 Color.BLACK
입니다.
APMS sdk = new APMS.Builder()
...
.setDefaultDialogConfig(
new DefaultDialogConfig.Builder()
...
.setContentTextColor(Color.RED)
.create()
)
.build(Context);
기본 팝업의 내용 폰트 색상을 설정합니다. 기본값은 Color.BLACK
입니다.
APMS sdk = new APMS.Builder()
...
.setDefaultDialogConfig(
new DefaultDialogConfig.Builder()
...
.setContentTextColor("#3e3e3e")
.create()
)
.build(Context);
기본 팝업의 왼쪽 버튼 문구를 설정합니다. 기본값은 LEFT
입니다.
APMS sdk = new APMS.Builder()
...
.setDefaultDialogConfig(
new DefaultDialogConfig.Builder()
...
.setLeftButtonText("LEFT")
.create()
)
.build(Context);
기본 팝업의 왼쪽 버튼 문구의 폰트 크기를 설정합니다. 기본값은 16
입니다.
APMS sdk = new APMS.Builder()
...
.setDefaultDialogConfig(
new DefaultDialogConfig.Builder()
...
.setLeftButtonTextSize(16)
.create()
)
.build(Context);
기본 팝업의 왼쪽 버튼 문구의 폰트 색상을 설정합니다. 기본값은 Color.BLACK
입니다.
APMS sdk = new APMS.Builder()
...
.setDefaultDialogConfig(
new DefaultDialogConfig.Builder()
...
.setLeftButtonTextColor(Color.BLACK)
.create()
)
.build(Context);
기본 팝업의 왼쪽 버튼 문구의 폰트 색상을 설정합니다. 기본값은 Color.BLACK
입니다.
APMS sdk = new APMS.Builder()
...
.setDefaultDialogConfig(
new DefaultDialogConfig.Builder()
...
.setLeftButtonTextColor("#000000")
.create()
)
.build(Context);
기본 팝업의 왼쪽 버튼의 배경 색상을 설정합니다. 기본값은 Color.GRAY
입니다.
APMS sdk = new APMS.Builder()
...
.setDefaultDialogConfig(
new DefaultDialogConfig.Builder()
...
.setLeftButtonBackgroundColor(Color.GRAY)
.create()
)
.build(Context);
기본 팝업의 왼쪽 버튼의 배경 색상을 설정합니다. 기본값은 Color.GRAY
입니다.
APMS sdk = new APMS.Builder()
...
.setDefaultDialogConfig(
new DefaultDialogConfig.Builder()
...
.setLeftButtonBackgroundColor("#3e3e3e")
.create()
)
.build(Context);
기본 팝업의 왼쪽 버튼을 클릭했을때 동작할 BroadcastReceiver를 설정합니다.
Intent에 할당될 인텐트 액션을 설정합니다.
BroadcastReceiver의 클래스를 설정합니다.
APMS sdk = new APMS.Builder()
...
.setDefaultDialogConfig(
new DefaultDialogConfig.Builder()
...
.setLeftButtonClickListener("leftButtonClick", LeftButtonClickReceiver.Class)
.create()
)
.build(Context);
기본 팝업의 오른쪽 버튼 문구를 설정합니다. 기본값은 RIGHT
입니다.
APMS sdk = new APMS.Builder()
...
.setDefaultDialogConfig(
new DefaultDialogConfig.Builder()
...
.setRightButtonText("RIGHT")
.create()
)
.build(Context);
기본 팝업의 오른쪽 버튼 문구의 폰트 크기를 설정합니다. 기본값은 16
입니다.
APMS sdk = new APMS.Builder()
...
.setDefaultDialogConfig(
new DefaultDialogConfig.Builder()
...
.setRightButtonTextSize(16)
.create()
)
.build(Context);
기본 팝업의 오른쪽 버튼 문구의 폰트 색상을 설정합니다. 기본값은 Color.BLACK
입니다.
APMS sdk = new APMS.Builder()
...
.setDefaultDialogConfig(
new DefaultDialogConfig.Builder()
...
.setRightButtonTextColor(Color.BLACK)
.create()
)
.build(Context);
기본 팝업의 오른쪽 버튼 문구의 폰트 색상을 설정합니다. 기본값은 Color.BLACK
입니다.
APMS sdk = new APMS.Builder()
...
.setDefaultDialogConfig(
new DefaultDialogConfig.Builder()
...
.setRightButtonTextColor("#000000")
.create()
)
.build(Context);
기본 팝업의 오른쪽 버튼의 배경 색상을 설정합니다. 기본값은 Color.GRAY
입니다.
APMS sdk = new APMS.Builder()
...
.setDefaultDialogConfig(
new DefaultDialogConfig.Builder()
...
.setRightButtonBackgroundColor(Color.GRAY)
.create()
)
.build(Context);
기본 팝업의 오른쪽 버튼의 배경 색상을 설정합니다. 기본값은 Color.GRAY
입니다.
APMS sdk = new APMS.Builder()
...
.setDefaultDialogConfig(
new DefaultDialogConfig.Builder()
...
.setRightButtonBackgroundColor("#3e3e3e")
.create()
)
.build(Context);
기본 팝업의 오른쪽 버튼을 클릭했을때 동작할 BroadcastReceiver를 설정합니다.
Intent에 할당될 인텐트 액션을 설정합니다.
BroadcastReceiver의 클래스를 설정합니다.
APMS sdk = new APMS.Builder()
...
.setDefaultDialogConfig(
new DefaultDialogConfig.Builder()
...
.setRightButtonClickListener("rightButtonClick", RightButtonClickReceiver.Class)
.create()
)
.build(Context);
푸시 알림 클릭 이벤트란 사용자가 푸시 알림을 클릭하였을때 어떤 동작을 할지 설정하는 것을 의미합니다. SDK에서 자체적으로 제공하는 NotificationReceiver 클래스를 사용하여 이벤트를 수신받으며 Android으 기본 요소인 BroadcastReceiver의 사용법과 같이 생성 후 AndroidManifest의 등록과 SDK의 등록을 해야합니다.
생성하고 싶은 패키지 디렉토리에서 오른쪽 클릭을 눌러 New/Java Class
를 선택합니다.
Superclass로 NotificationReceiver
를 선택한 다음 원하는 클래스 이름을 설정 후 .java
파일을 생성합니다.
BroadcastReceiver의 onReceive()
메소드를 오버라이드 합니다.
푸시 알림 클릭에 대한 클래스가 완성되었습니다. 이벤트가 수신될 경우 onReceive()
메소드 내의 구현부가 동작합니다.
public class NotificationClickReceiver extends NotificationReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
super.onReceive(context, intent); //이 라인은 반드시 입력해야합니다.
}
}
SDK는 등록한 리시버에 이벤트를 전달할때 푸시 알림에 실려있는 데이터를 Bundle
에 담아 전부 전달하며 활용하기 쉽게 하기 위해서 getPushMsg()
메소드를 사용하여 PushMsg
객체를 파싱하여 가져올 수 있습니다. 해당 객체를 사용해서 푸시 알림 페이로드의 데이터를 접근하고 사용할 수 있습니다. 푸시 알림 페이로드에 관한 명세는 SDK 규격 정보를 참고해주시기 바랍니다.
@Override
public void onReceive(final Context context, Intent intent)
{
super.onReceive(context, intent);
PushMsg pushMsg = getPushMsg();
int notificationId = pushMsg.notificationId;
}
푸시 페이로드 데이터를 활용했던 것과 같이 getAppLink()
메소드를 활용하여 푸시 발송시 설정하였던 앱 링크의 값을 가져올 수 있습니다.
@Override
public void onReceive(final Context context, Intent intent)
{
super.onReceive(context, intent);
String appLinkUrl = getAppLink();
}
수신 받은 푸시 데이터에는 해당 푸시의 msgId
값이 담겨 있습니다. requestReadMsg(APIManager.APICallback callback)
메소드를 활용하면 해당 값을 사용하여 서버에 메시지를 읽음 처리할 수 있습니다. 이 방법은 푸시 페이로드를 파싱하여 얻어낸 msgId 값으로 직접 ReadMsg
API를 호출하는 방법과 동일합니다.
@Override
public void onReceive(final Context context, Intent intent)
{
super.onReceive(context, intent);
requestReadMsg(new APIManager.APICallback() {
@Override
public void response(String code, JSONObject jsonObject)
{
CLog.i("response "+code+" / "+jsonObject.toString());
}
});
}
위에 서술된 방법은 SDK에서 편의상 제공하는 메소드를 활용하는 방법입니다. 아래와 같이 직접 데이터를 파싱하여 사용하는 방법도 가능합니다.
@Override
public void onReceive(final Context context, Intent intent)
{
//푸시 알림 페이로드의 메시지 ID 값을 활용하여 ReadMsg 처리하기
super.onReceive(context, intent);
PushMsg receivedMessage = new PushMsg(intent.getExtras());
new AsyncTask<Void, Void, Void>()
{
@Override
protected Void doInBackground(Void... voids)
{
ReadMsg api = new ReadMsg(context);
new ReadMsg(context).request(receivedMessage.msgId, new APIManager.APICallback() {
@Override
public void response(String code, JSONObject jsonObject)
{
CLog.d("code is "+code+" response is "+jsonObject.toString());
}
});
return null;
}
}.execute();
}
@Override
public void onReceive(final Context context, Intent intent)
{
//푸시 알림 페이로드의 앱 링크 값을 사용하여 웹 페이지로 이동하기
super.onReceive(context, intent);
PushMsg receivedMessage = new PushMsg(intent.getExtras());
try
{
JSONObject object = new JSONObject(receivedMessage.data);
String appLinkUrl = object.getString("l").toString();
Intent i = new Intent(Intent.ACTION_VIEW);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setData(Uri.parse(appLinkUrl));
context.startActivity(i);
}
catch (JSONException e)
{
CLog.e(e.toString());
}
}
어플리케이션 AndroidManifest에 브로드캐스트 리시버를 등록합니다. 인텐트 필터를 등록하지 않을 경우 앱내에서만 이벤트를 수신받게 됩니다.
<application
...
<receiver android:name="com.humuson.pushdemo.receiver.NotificationClickReceiver"/>
</application>
만약 다른 앱에서 이벤트를 수신 받고 싶거나 시스템 이벤트를 수신받기 위해선 인텐트 필터를 등록해야 합니다.
SDK 초기화 설정하기에 이미 설명되어 있던 것처럼 Builder 패턴을 사용하여 등록합니다. action 값은 BroadcastReceiver에서 onReceive() 메소드로 이벤트를 수신할때 구분하기 위한 값으로 고유한 문자열을 등록해주시기 바랍니다.
APMS sdk = new APMS.Builder()
...
.setNotificationConfig(
new NotificationConfig.Builder()
...
.setClickListener("com.humuson.click", NotificationClickReceiver.class)
.create()
)
.build(Context);
푸시 알림 수신 이벤트란 사용자가 푸시 알림을 수신받았을때 어떤 동작을 할지 설정하는 것을 의미합니다. 푸시 알림 클릭 이벤트와는 다르게 푸시를 수신 받을때마다 동작하므로 동작하는 빈도수가 높기 때문에 무리한 동작은 사용자에게 좋지 않은 경험을 제공할 수 있습니다. 푸시 알림 클릭 이벤트와 마찬가지로 Android에서 제공하는 BroadcastReceiver 컴포넌트를 사용하여 이벤트를 수신받으며 BroadcastReceiver를 상속받은 클래스를 생성 후 AndroidManifest의 등록과 SDK의 등록을 해야합니다.
푸시 알림 클릭 이벤트 등록하기의 소스코드 생성을 참고하여 주시기 바랍니다.
푸시 알림 클릭 이벤트 등록하기의 푸시 페이로드 데이터 활용하기을 참고하여 주시기 바랍니다.
어플리케이션 AndroidManifest에 브로드캐스트 리시버를 등록합니다. 인텐트 필터를 등록하지 않을 경우 앱내에서만 이벤트를 수신받게 됩니다.
<application
...
<receiver android:name="com.humuson.pushdemo.receiver.NotificationEventReceiver"/>
</application>
만약 다른 앱에서 이벤트를 수신 받고 싶거나 시스템 이벤트를 수신받기 위해선 인텐트 필터를 등록해야 합니다.
SDK 초기화 설정하기에 이미 설명되어 있던 것처럼 Builder 패턴을 사용하여 등록합니다. action 값은 BroadcastReceiver에서 onReceive() 메소드로 이벤트를 수신할때 구분하기 위한 값으로 고유한 문자열을 등록해주시기 바랍니다.
APMS sdk = new APMS.Builder()
...
.setNotificationConfig(
new NotificationConfig.Builder()
...
.setEventListener("com.humuson.event", NotificationEventReceiver.class)
.create()
)
.build(Context);
푸시 알림 가로채기란 SDK에서 푸시 알림을 표시하기 전에 데이터를 미리 가져오는 것을 의미합니다. 해당 이벤트는 푸시 알림을 띄우기 바로 직전 시점에 동작하기 때문에 푸시 알림의 설정을 각 알림 별로 적용하기에 적합합니다.
푸시 알림 가로채기 기능 설정과 별개로 SDK는 푸시 알림이 오면 알림을 띄웁니다. 푸시 알림을 표시하기 전에 이벤트를 Broadcast 하도록 되어 있지만 브로드캐스트 리시버 특성상 순서는 보장되지 않습니다.
이 기능은 다음의 사용자에게 적합합니다.
생성하고 싶은 패키지 디렉토리에서 오른쪽 클릭을 눌러 New/Java Class
를 선택합니다.
Superclass로 NotificationInterceptor
를 선택한 다음 원하는 클래스 이름을 설정 후 .java
파일을 생성합니다.
BroadcastReceiver의 onReceive()
메소드를 오버라이드 합니다.
푸시 알림 가로채기에 대한 클래스가 완성되었습니다. 이벤트가 수신될 경우 onReceive()
메소드 내의 구현부가 동작합니다.
public class NotificationInterceptReceiver extends NotificationInterceptor
{
@Override
public void onReceive(Context context, Intent intent)
{
super.onReceive(context, intent); //이 라인은 반드시 입력해야합니다.
RemoteMessage remoteMessage = getRemoteMessage(); //RemoteMessage 사용하기
PushMsg pushMsg = getPushMsg(); //PushMsg 사용하기
}
}
어플리케이션 AndroidManifest에 브로드캐스트 리시버를 등록합니다. 인텐트 필터를 등록하지 않을 경우 앱내에서만 이벤트를 수신받게 됩니다.
<application
...
<receiver android:name="com.humuson.pushdemo.receiver.NotificationInterceptReceiver"/>
</application>
만약 다른 앱에서 이벤트를 수신 받고 싶거나 시스템 이벤트를 수신받기 위해선 인텐트 필터를 등록해야 합니다.
SDK 초기화 설정하기에 이미 설명되어 있던 것처럼 Builder 패턴을 사용하여 등록합니다. action 값은 BroadcastReceiver에서 onReceive() 메소드로 이벤트를 수신할때 구분하기 위한 값으로 고유한 문자열을 등록해주시기 바랍니다.
TMS sdk = new TMS.Builder()
...
.setNotificationConfig(
new NotificationConfig.Builder()
...
.setInterceptor("com.humuson.intercept", NotificationInterceptReceiver.class)
.create()
)
.build(Context);
getRemoteMessage()
메소드를 활용하여 FCM에서 푸시 수신시 전달된 RemoteMessage를 사용할 수 있습니다.
@Override
public void onReceive(final Context context, Intent intent)
{
super.onReceive(context, intent); //이 라인은 반드시 입력해야합니다.
RemoteMessage remoteMessage = getRemoteMessage();
}
getRemoteMessage()
메소드를 활용하여 FCM을 통하여 수신 된 메시지를 파싱한 객체인 PushMsg를 사용할 수 있습니다.
@Override
public void onReceive(final Context context, Intent intent)
{
super.onReceive(context, intent); //이 라인은 반드시 입력해야합니다.
PushMsg pushMsg = getPushMsg(); //PushMsg 사용하기
}
앱 아이콘 뱃지란 디바이스 홈 화면에서 앱 아이콘에 숫자로 표시되는 UI입니다. Android는 8.0
버전 전까지 앱 아이콘 뱃지를 공식적으로 지원하지 않았기 때문에 개인 혹은 제조사가 개발한 Launcher에서 독자적인 방법으로 표시하였습니다. 하지만 Android 8.0
부터 OS에서 앱 아이콘 뱃지를 정식으로 지원하게 되었고 그 두 가지 방식이 각각 다른 방식으로 동작하게 되면서 앱 아이콘 뱃지를 설정하는 방법이 보다 복잡하게 되었습니다.
이 두 가지 방법을 서로 구분하기 위해서 Android 8.0
부터 OS에서 정식으로 제공하는 뱃지 형태는 NotificationBadge
그리고 Launcher에서 각자의 방식으로 동작하는 뱃지 형태는 LauncherBadge
로 표기하였습니다.
Android 8.0
에서 지원하는 뱃지입니다. 뱃지에 대한 설정은 설정/알림
에서 전체 알림에 대한 뱃지 설정과 설정/알림/앱/어플리케이션 알림
에서의 앱에 대한 뱃지 설정 그리고 설정/알림/앱/어플리케이션 알림/알림 채널
에서 알림 채널에 대한 뱃지 설정 총 3가지 방법으로 설정이 가능합니다. 복잡하지만 결론적으로 봤을때 NotificationBadge는 알림과 알림채널의 설정에 귀속되어 있다고 생각하면 됩니다. 알림 센터의 경우 사용자가 설정 값을 임의로 변경할 수 있으므로 이를 고려하여 알림 채널에 대한 설정을 해야합니다.
알림 설정 | 알림 채널 설정 |
---|---|
![]() |
![]() |
NotificationBadge는 OS에서 값을 계산하며 개발자가 수동으로 값을 입력할 경우 문제가 있기 때문에 사실상 OS에서 설정해주는 값을 사용하는 방법밖에 없습니다. OS는 알림센터에 적재된 알림의 갯수를 값으로 설정하며 알림센터에 알림이 하나라도 남아있을 경우 뱃지의 값이 사라지지 않습니다.
Android 8.0
이상의 모든 디바이스에서 NotificationBadge가 안정적으로 표시되지 않습니다. 이는 Launcher에서 지원하지 않는 경우이며 Launcher에서 지원하지 않는 한 값은 표시되지 않습니다.
개인 혹은 제조사가 개발한 Launcher에서 지원하는 뱃지입니다. Launcher에서 지원하는 것이기 때문에 Android 버전과 관계없이 동작하며 값을 업데이트하는 방법도 Launcher 마다 제각각입니다. SDK에서는 주요 국내 제조사(LG, 삼성)의 Launcher에서 동작하도록 구현되어 있습니다.
LauncherBadge는 NotificationBadge처럼 알림채널에 귀속되어 있지 않지만 표시하는 영역이 동일하기 때문에 NotificationBadge의 설정이 사용하지 않음으로 되어 있을 경우 표시되지 않습니다. 그러므로 LauncherBadge를 사용하기 위해선 NotificationBadge도 반드시 사용해야합니다.
LauncherBadge의 값은 직접 Integer
값을 넣어 설정하는 방식이며 Launcher가 어플리케이션 삭제 혹은 설치 이벤트를 잡지 못하기 때문에 0
값을 넣어 초기화하지 않는 이상 앱을 삭제하고 재설치하더라도 앱 아이콘 뱃지 값이 사라지지 않습니다.
자신이 입력한 값으로 표시되는 LauncherBadge와 달리 NotificationBadge의 값은 OS에서 설정되는 값밖에 쓰지 못하므로 일치시키기 위해서 setLauncherBadgeAutoUpdateEnabled(boolean enabled)
메소드를 사용하여 LauncherBadge 자동 설정 기능을 제공합니다. 이 기능은 NotificationBadge와 유사하게 푸시 알림 수신시 값을 증가시키고 알림이 취소되었을때 값을 차감시키고 해당 값으로 LauncherBadge 값을 설정하는 기능입니다. 하지만 디바이스에서 간혹 푸시 알림 수신 및 취소 이벤트가 수신되지 않는 경우가 있기 때문에 NotificationBadge와 달리 값이 완벽하게 맞지 않는 경우가 있습니다. 그렇게 때문에 자동 설정 기능을 사용할 경우 반드시 LauncherBadge 초기화를 하셔야합니다. SDK에서는 초기화 기능으로 setLauncherBadgeAutoClearEnabled(boolean enabled)
메소드와 clearLauncherBadgeValue(Context context, boolean clearAllOfNotification)
기능을 제공하고 있습니다. 초기화 이벤트는 앱 실행 혹은 알림창 진입시에 호출하는것을 권장드립니다.
NotificationBadge의 사용 유무를 설정합니다. 기본값은 false
입니다. NotificationBadge는 Android 8.0
부터 사용가능하며 Launcher의 NotificationBadge 지원유무에 따라 표시가 되지 않을 수 있습니다. 또한 Android 8.0
이상 디바이스에서 NotificationBadge를 사용하지 않음으로 설정했을 경우 LaucherBadge 또한 표시가 되지 않으며 NotificationBadge에 대한 표시 유무는 사용자가 알림 센터 설정 화면에서 직접 변경할 수 있습니다.
true
: NotificationBadge 사용false
: NotificationBadge 사용하지 않음APMS sdk = new APMS.Builder()
...
.setBadgeConfig(
new BadgeConfig.Builder()
...
.setNotificationBadgeEnabled(false)
.create()
)
.build(Context);
LauncherBadge의 사용 유무를 설정합니다. 기본값은 false
입니다. LauncherBadge는 Launcher의 LauncherBadge 지원유무에 따라 표시가 되지 않을 수 있습니다. 또한 Android 8.0
이상 디바이스에서 NotificationBadge를 사용하지 않음으로 설정했을 경우 LaucherBadge 또한 표시가 되지 않으며 NotificationBadge에 대한 표시 유무는 사용자가 알림 센터 설정 화면에서 직접 변경할 수 있습니다.
LauncherBadge에 대한 동작이 Android 8.0
이상부턴 동작하지 않을 수 있으며 해당 내용에 대한 삼성 측의 공지사항이 발표된바 있습니다.
true
: LauncherBadge 사용false
: LauncherBadge 사용하지 않음APMS sdk = new APMS.Builder()
...
.setBadgeConfig(
new BadgeConfig.Builder()
...
.setLauncherBadgeEnabled(false)
.create()
)
.build(Context);
LauncherBadge의 값 자동 설정 유무를 설정합니다. 기본값은 false
입니다. 자동 설정이란 푸시 알림 수신시 기존 값을 증가하고 푸시 알림 취소시 차감하여 해당 값을 LauncherBadge에 업데이트시킵니다. LauncherBadgeAutoUpdateEnabled
를 true
로 하여 사용하실 경우 LauncherBadgeAutoClearEnabled
기능을 사용하여 SDK에서 자동으로 뱃지 값을 초기화시키거나 clearLauncherBadgeValue
메소드를 사용하여 값을 반드시 초기화하셔야 합니다. 디바이스의 상태에 따라 푸시 알림 수신 및 삭제 이벤트가 불리지 않는 경우가 있어 값이 맞지 않는 경우가 있기 때문이며 LauncherBadge 특성상 앱을 삭제해도 남아있으므로 반드시 초기화 작업이 필요합니다.
true
: LauncherBadge의 값을 SDK에서 자동으로 설정false
: LauncherBadge의 값을 수동으로 설정APMS sdk = new APMS.Builder()
...
.setBadgeConfig(
new BadgeConfig.Builder()
...
.setLauncherBadgeAutoUpdateEnabled(false)
.create()
)
.build(Context);
LauncherBadge의 값을 SDK에서 자동으로 초기화하도록 설정합니다. 기본값은 true
입니다. 사용하도록 설정했을 경우 SDK에서는 DeviceCert API 호출 시점에서 clearLauncherBadgeValue(context, false)
메소드를 호출합니다.
true
: LauncherBadge의 값을 SDK에서 자동으로 초기화함false
: LauncherBadge의 값을 SDK에서 자동으로 초기화하지 않음APMS sdk = new APMS.Builder()
...
.setBadgeConfig(
new BadgeConfig.Builder()
...
.setLauncherBadgeAutoClearEnabled(true)
.create()
)
.build(Context);
호출당 시 SDK에서 관리되고 있는 LauncherBadge의 값을 반환합니다. 일반적인 경우 사용될 일이 없지만 LauncherBadgeAutoUpdateEnabled
기능을 true
로 설정할 경우 SDK에서 LauncherBadge의 값을 자동으로 관리하게 되기 때문에 LauncherBadge의 값이 필요할 경우 사용됩니다.
int launcherBadgeValue = APMS.getInstance(context).getLauncherBadgeValue();
LauncherBadge의 값을 직접 입력하여 반영합니다. LauncherBadgeAutoUpdateEnabled
기능을 true
로 설정할 경우 값을 설정하는 곳이 중복되기 때문에 false
로 설정하고 사용하는 것을 권장합니다.
APMS.getInstance(context).setLauncherBadgeValue(3);
LauncherBadge의 값을 초기화하여 앱 아이콘 뱃지를 표시 하지 않도록 합니다. clearAllOfNotification
을 true
로 설정할 경우 메소드 호출시 알림센터에 적재된 모든 알림을 삭제합니다. 페이스북 어플리케이션과 동일한 방식이며 페이스북의 경우 알림창의 모든 알림을 읽음 처리할 경우 적재된 모든 알림을 삭제합니다.
true
: 메소드 호출시 알림 센터에 적재된 모든 알림 삭제false
: 메소드 호출시 알림 센터에 적재된 모든 알림 삭제하지 않음APMS.getInstance(context).clearLauncherBadgeValue(true);
SDK는 네트워크 환경 등의 문제로 푸시가 수신되지 않을 수 있기 때문에 푸시 알림이 수신되었다고 해서 따로 저장하지 않습니다. 대신 NewMsg
라는 API로 MSG-API 서버에서 발송한 메시지 데이터를 가져오도록 할 수 있으며 이때 전달받는 데이터는 SDK 내부 DB에 적재됩니다. 이 섹션은 SDK 내부 DB내 적재된 메시지를 활용하는 방법에 대해서 다룹니다. NewMsg
API를 사용하는 방법은 API 사용가이드
문서를 참고하여 주시기 바라며, 앱내메시지에 대한 규격은 SDK 규격 정보를 참고바랍니다.
NewMsg API를 호출하여 메시지를 서버 기준으로 최신화한 뒤 메시지를 SDK 내부에 적재된 메시지를 가져옵니다.
//NewMsg API를 호출하여 서버 기준으로 앱내 메시지를 최신화합니다
new NewMsg(context).request("P", "-1", "-1", "1", "100", new APIManager.APICallback()
{
@Override
public void response(String code, JSONObject json)
{
//SDK의 앱내 메시지 활용 메소드를 사용하여 메시지를 가져옵니다
Cursor cursor = sdk.selectAllOfMsg();
//Cursor로 사용하실 경우 바로 사용하시면 됩니다.
//List로 사용하시려면 다음과 같이 변환해주시면 됩니다
List<Msg> list = new ArrayList<>();
if (cursor != null)
{
if (cursor.moveToFirst())
{
do
{
//Msg 객체를 cursor를 입력하여 생성하시면 됩니다
Msg msg = new Msg(cursor);
list.add(msg);
}
while (cursor.moveToNext());
}
}
//Cursor는 close 해줍니다.
cursor.close();
}
});
SDK 내부에 적재된 모든 메시지를 반환합니다.
Cursor cursor = APMS.getInstance(context).selectAllOfMsg();
SDK 내부에 적재된 메시지 중 입력한 MsgGrpCode와 일치하는 메시지를 반환합니다.
Cursor cursor = APMS.getInstance(context).selectAllOfMsgByMsgGrpCode("C000");
SDK 내부에 적재된 메시지 중 모든 메시지 그룹을 반환합니다.
Cursor cursor = APMS.getInstance(context).selectAllOfMsgGrp();
SDK 내부에 적재된 메시지 중 가장 최근 메시지의 UserMsgId 값을 반환합니다. NewMsg API 호출시에 사용됩니다.
String maxUserMsgId = APMS.getInstance(context).getMaxUserMsgId();
SDK 내부에 적재된 메시지 중 안읽은 메시지의 갯수를 Integer
로 반환합니다.
int allOfUnreadCount = APMS.getInstance(context).getAllOfUnreadCount();
SDK 내부에 적재된 메시지 중 입력한 MsgGrpCode와 일치하는 메시지들의 안읽은 메시지 갯수를 Integer
로 반환합니다.
int unreadCount = APMS.getInstance(context).getUnreadCountByMsgGrpCode("C000");
SDK 내부에 적재된 메시지 중 입력한 msgId와 일치하는 메시지를 반환합니다.
Msg msg = APMS.getInstance(context).selectMsgWhereMsgId("fe13s")
SDK 내부에 적재된 메시지 중 입력한 UserMsgId와 일치하는 메시지를 반환합니다.
Msg msg = APMS.getInstance(context).selectMsgWhereUserMsgId("dsf12121")
Private 서비스란 Google의 FCM을 사용하여 푸시를 수신받지 않고 서버와 일대일로 MQTT 프로토콜을 사용하여 푸시를 수신받는 것을 의미합니다. 사용하기 위해선 서버에서 Private을 사용하도록 설정되어야 하며 추가적인 계약이 필요합니다.
SDK 초기화 설정하기에 이미 설명되어 있던 것처럼 Builder 패턴을 사용하여 등록합니다. Private 서버 URL의 경우 담당자에게 문의하여 주시기 바랍니다.
APMS sdk = new APMS.Builder()
...
.setPrivateEnabled(true)
.setPrivateServerUrl("tcp://private.pushpia.com:1883","ssl://private.pushpia.com:443")
.build(Context);
어플리케이션 AndroidManifest에 Private 서비스를 활성화하는데 필요한 브로드캐스트 리시버를 등록합니다. 인텐트 필터를 등록하지 않을 경우 앱내에서만 이벤트를 수신받게 됩니다.
<receiver android:name="com.apms.sdk.push.mqtt.RestartReceiver"
android:exported="false">
<intent-filter>
<action android:name="MQTT.START" />
<action android:name="MQTT.FORCE_START" />
</intent-filter>
</receiver>
배포된 SDK 파일에 포함된 org.eclipse.paho.client.mqttv3-1.2.0(mlog).jar
파일을 어플리케이션에 포함시킵니다. AndroidStudio에서 보기 형식을 Project
로 변경한 다음 libs 폴더에 org.eclipse.paho.client.mqttv3-1.2.0(mlog).jar
파일을 넣어 주시기 바랍니다.
해당 섹션은 SDK 내부에 저장된 설정 값들을 가져오는 방법에 대해서 서술합니다. 기본적으로 설정 값을 가져오기 위해선 SDK의 인스턴스를 활용하며 다음과 같이 인스턴스를 호출 할 수 있습니다.
APMS.getInstance(context)
SDK에 저장되어 있는 CustId를 반환합니다.
String custId = APMS.getInstance(context).getCustId();
SDK에 저장되어 있는 MSG_FLAG
를 반환합니다.
String msgFlag = APMS.getInstance(context).getMsgFlag();
SDK에 저장되어 있는 NOTI_FLAG
를 반환합니다. NOTI_FLAG는 사용자의 푸시 노출 동의 여부를 의미합니다.
String notiFlag = APMS.getInstance(context).getNotiFlag();
SDK에 저장되어 있는 MKT_FLAG
를 반환합니다. MKT_FLAG는 사용자의 광고성 푸시 수신동의 여부를 의미합니다.
String mktFlag = APMS.getInstance(context).getMktFlag();
SDK에 저장되어 있는 UUID
를 반환합니다.
String uuid = APMS.getInstance(context).getUUID();
SDK에 저장되어 있는 PushToken
를 반환합니다. 해당 값은 FCM에서 발급한 인스턴스 ID 값입니다.
String pushToken = APMS.getInstance(context).getPushToken();
SDK에 대한 설정은 기본적으로 빌더 패턴을 사용한 설정 방법을 권장드리고 있습니다. 하지만 푸시 알림 가로채기을 사용하시거나 앱의 시나리오에 따라 유동적으로 설정을 변경할 필요가 있을 경우 빌더 패턴을 계속해서 호출하는 것은 번거로운 일이기 때문에 SDK의 인스턴스를 호출하여 설정하는 방법을 별도로 제공드리고 있습니다. 동작은 빌더 패턴을 사용하는 방법과 동일하며 인스턴스가 싱글톤으로 작성이 되어 있기 때문에 여러번 호출해도 문제가 없습니다.
다음과 같이 인스턴스를 호출 할 수 있습니다.
APMS.getInstance(context)
Login API 그리고 DeviceCert API에 사용되는 CustId를 등록합니다.
APMS.getInstance(context).setCustId("custId");
FCM 콘솔의 발신자 ID를 설정합니다. 기존 SDK에서는 Properties
파일에서 gcm_project_id
라는 항목으로 설정을 지원하였습니다. 이 값은 푸시 알림 수신시 설정한 FCM 프로젝트에서 발송한 것인지 체크하고 푸시 토큰을 발급받는 용도로 사용됩니다.
APMS.getInstance(context).setFirebaseSenderId("99725865");
MSG-API 서버의 어플리케이션 키 값을 설정합니다.. 기존 SDK에서는 Properties
파일에서 app_key
라는 항목으로 설정을 지원하였습니다. 해당 값은 발송 관리자 페이지의 생성된 Application 리스트 페이지에서 조회가 가능합니다. APP 수정/플랫폼 설정/Android
에서 App Key
값에 해당하는 값을 입력해주시기 바랍니다.
APMS.getInstance(context).setServerAppKey("a124124");
MSG-API 서버의 URL 값을 설정합니다. 기존 SDK에서는 Properties
파일에서 api_server_url
라는 항목으로 설정을 지원하였습니다. MSG-API 서버가 설치된 URL 주소를 입력해야 하며 해당 정보가 없을 경우 서버 담당자에게 요청하여 주시기 바랍니다.
APMS.getInstance(context).setServerUrl("https://msg-api.co.kr");
SDK에서 로그의 표시유무 설정합니다. 기본값은 true
입니다. 기존 SDK에서는 Properties
파일에서 debug_flag
라는 항목으로 설정을 지원하였습니다.
true
: 로그 표시false
: 로그 미표시APMS.getInstance(context).setDebugEnabled(true);
SDK에서 로그의 TAG 값을 설정합니다. 기본값은 APMS
입니다. 기존 SDK에서는 Properties
파일에서 debug_tag
라는 항목으로 설정을 지원하였습니다.
APMS.getInstance(context).setDebugTag("TAG");
SDK에서 Private 서비스 활성화 유무를 선택합니다. 기본값은 false
입니다. 자세한 내용은 Private 서비스 활성화시키기 항목을 참고하여 주시기 바랍니다. 기존 SDK에서는 Properties
파일에서 mqtt_flag
라는 항목으로 설정을 지원하였습니다.
true
: Private 서비스 활성화false
: Private 서비스 비활성화APMS.getInstance(context).setPrivateEnabled(false);
SDK에서 Private 서비스에서 활용되는 URL을 설정합니다. URL은 프로토콜에 따라 TCP와 SSL 두가지 전부 입력하게 되어 있습니다. 프로토콜에 맞는 URL이 없을 경우 ""
값을 입력해주시기 바랍니다. 자세한 내용은 Private 서비스 활성화시키기 항목을 참고하여 주시기 바랍니다. 기존 SDK에서는 Properties
파일에서 mqtt_server_url_ssl
, mqtt_server_url_tcp
라는 항목으로 설정을 지원하였습니다.
APMS.getInstance(context).setPrivateServerUrl("tcp://","ssl://");
푸시 알림 표시에서 사용되는 모든 항목을 설정합니다. NotificationConfig
를 사용하여 설정하며 푸시 알림 설정하기를 참고하여 설정해 주시기 바랍니다.
APMS.getInstance(context).setNotificationConfig(
new NotificationConfig.Builder()
.create()
);
앱 아이콘 뱃지에서 사용되는 모든 항목을 설정합니다. BadgeConfig
를 사용하여 설정하며 앱 아이콘 뱃지 설정하기를 참고하여 설정해 주시기 바랍니다.
APMS.getInstance(context).setBadgeConfig(
new BadgeConfig.Builder()
.create()
);
기본 팝업에서 사용되는 모든 항목을 설정합니다. DefaultDialogConfig
를 사용하여 설정하며 기본 팝업 설정하기를 참고하여 설정해 주시기 바랍니다.
APMS.getInstance(context).setDefaultDialogConfig(
new DefaultDialog.Builder()
.create()
);
SDK에서 사용되는 네트워크 관련 항목을 설정합니다. NetworkConfig
를 사용하여 설정하며 네트워크 설정하기를 참고하여 설정해 주시기 바랍니다.
APMS.getInstance(context).setNetworkConfig(
new NetworkConfig.Builder()
.create()
);
애니메이션 푸시, 슬라이드 푸시는 2.6.7
버전부터 지원되며 다음과 같은 유의사항이 있습니다.
Android OS 버전 5.0
미만 기기는 지원하지 않습니다!
지원하지 않는 단말의 경우 일반적인 이미지가 포함된 알림으로 표시되게 됩니다. 이 경우 첫번째 이미지만 표시됩니다.
큰 아이콘(Large Icon) 표시가 되지 않습니다!
기종 간 일관적인 레이아웃을 표시하기 위해 Large Icon은 보여지지 않습니다.
진동음 재생이 되지 않습니다!
애니메이션 푸시, 슬라이드 푸시는 진동음 재생이 되지 않습니다.
알림음 재생이 되지 않습니다!
애니메이션 푸시, 슬라이드 푸시는 알림음 재생이 되지 않습니다.
진동음 재생이 되지 않습니다!
애니메이션 푸시, 슬라이드 푸시는 진동음 재생이 되지 않습니다.
디바이스 화면이 잠겨 있을시 화면을 깨우지 않습니다!
애니메이션 푸시, 슬라이드 푸시는 화면이 잠겨 있을때 알림 센터에 적재될 뿐 화면을 깨우지 않습니다.
애니메이션 푸시, 슬라이드 푸시는 밀어서 알림 제거가 되지 않습니다!
마찬가지로 알림 모두 지우기로도 제거가 되지 않습니다. 애니메이션 푸시, 슬라이드 푸시는 사용자가 X 버튼을 터치하거나 알림을 클릭하여 클릭 이벤트를 발생시켰을때만 사라집니다.
전용 알림 채널을 사용합니다!
해당 알림 채널에 대한 설정은
setMutedChannel...()
메소드를 사용하여 설정 가능합니다.
가이드대로 적용이 되었을 때만 사용이 가능합니다!
아래 적혀진 가이드 대로 적용해주시기 바랍니다.
AndroidManifest.xml에 NotificationAnimatedService
와 NotificationSlideService
를 추가합니다.
<service android:name="com.apms.sdk.push.NotificationAnimatedService"/>
<service android:name="com.apms.sdk.push.NotificationSlideService"/>
푸시 클릭 리시버는 반드시 NotificationReciever를 상속받아야 합니다. NotificationReceiver를 상속 받는 방법은 푸시 알림 클릭 이벤트 등록하기 섹션에 작성되어 있습니다. onReceive()
메소드 내 super.onReceive(context, intent);
코드는 반드시 들어가야 합니다.
애니메이션 푸시, 슬라이드 푸시는 알림음과 진동음이 재생되지 않도록 설정된 전용 알림 채널을 사용합니다. NotificationConfig의 setMutedChannel...()
메소드를 사용하여 채널에 대한 이름과 설명을 설정할 수 있습니다.
발송 시 이미지 표현 방식에서 선택 후 발송을 해야 수신 받을 수 있습니다. 슬라이드, 애니메이션을 선택 후에 발송해주시기 바랍니다.
AndroidStudio를 최신 버전을 사용하고 com.android.tools.build:gradle
을 3.3.0
버전 이상 사용할 경우 AndroidStudio는 강제적으로 Android Support Library에 대한 의존성을 Android X로의 이전을 요구합니다.
Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91
is also present at [androidx.core:core:1.0.0] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory).
Suggestion: add 'tools:replace="android:appComponentFactory"' to <application> element at AndroidManifest.xml:18:5-100:19 to override.
해당 사항은 어플리케이션 단에만 영향을 주는 것이 아니며 SDK에도 영향을 주므로 Android X로의 이전 작업을 진행할 경우 Android X 대응 SDK를 사용해야 합니다. 하지만 19년 7월 16일 기준 구글 플레이는 대상 SDK 버전 28
만을 요구하고 있기 때문에 Android X 전환은 필수 사항이 아니므로 Android X 대응 여부를 선택하여 진행하여 주시기 바랍니다.
Android X 전환 대응을 하지 않도록 설정할 경우
build.gradle
에서 Support Library를 28.0.0
으로 설정implementation 'com.android.support:appcompat-v7:28.0.0'
...
build.gradle
에서 FirebaseCloudMessaging Library를 다음과 같이 설정implementation 'com.google.firebase:firebase-core:16.0.5'
implementation 'com.google.firebase:firebase-messaging:17.3.4'
...
build.gradle
에서 의존성을 다음과 같이 설정dependencies {
classpath 'com.android.tools.build:gradle:3.2.1'
classpath 'com.google.gms:google-services:4.2.0'
...
}
gradle.properties
를 다음과 같이 설정distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
File/Invalidate Cashes / Restart...
를 클릭하여 재시작Android X 전환 대응을 할 경우
APMSX
를 사용Proguard를 SDK에 적용하시려면 다음과 같이 작성하여 주시기 바랍니다.
-dontwarn com.apms.sdk.**
-keep class com.apms.sdk.** { *; }
Code | 설명 |
901 | 암호화키 누락 |
902 | 네트워크 타임아웃, MsgApi 주소 확인 필요 |
903 | Respones 값이 없을 경우 |
904 | MsgApi 주소 누락 |
905 | 파라미터 누락 |
Code | 설명 |
000 | 통신성공 |
100 | 파라미터 오류, 필수 파라미터 누락 |
101 | 파라미터 오류, 잘못된 파라미터 크기 |
102 | 파라미터 오류, 유효하지 않은 파라미터 |
103 | 복호화 오류 |
104 | JSON형식 오류 |
105 | 잘못된 세션(타임아웃 등) |
106 | 암호화 오류 |
109 | 사용할 수 없는 msgApi |
120 | 기타오류 |
200 | 기타오류 (msgApi) |
201 | 기타오류 (확인되지 않음) |
510 | 유효하지 않은 앱키 |
SDK 2.x 버전 -> SDK 2.5.x 버전
SDK 버전 2.5.0
이상부터는 설정 부분이 Builder
패턴으로 변경되었습니다. 새로운 설정 방법을 사용할 것인지 기존 방법을 유지할 것인지 선택이 가능하며 본 섹션에서는 두가지 방법에 대한 내용을 다룹니다.
기존 설정된 항목 (Properties, AndroidManifest)등을 유지하되 최신 SDK를 사용하는 방법입니다. 이 경우 Builder
를 사용하시면 안됩니다. Builder
가 호출됨으로 인해서 설정의 우선순위가 기존 설정에서 Builder
설정의 초기값으로 변경됩니다.
.jar
형식으로 적용된 기존 SDK를 삭제하고 간단 가이드
문서를 참고하여 .aar
파일로 작성된 SDK를 적용합니다.
다음 항목들은 SDK에서 불필요하는 권한을 제거하는 가이드입니다. 어플리케이션에서 따로 필요로 하는 권한이 있는지 확인하고 삭제하여 주시기 바랍니다.
다음 항목들은 GCM 사용시 요구하였던 항목이므로 모두 제거합니다.
<permission android:name="<your-package-name>.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="<your-package-name>.permission.C2D_MESSAGE" />
<uses-permission android:name="android.permission.USE_CREDENTIALS"/>
<service android:name="com.apms.sdk.push.RegistrationIntentService"
android:exported="false"/>
<service android:name="com.apms.sdk.push.GCMPushService"
android:exported="false">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE"/>
</intent-filter>
</service>
다음 항목들은 SDK에서 더이상 사용하지 않는 항목이므로 모두 제거합니다.
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<activity
android:name="com.apms.sdk.push.mqtt.MQTTStarter"
android:configChanges="orientation"
android:excludeFromRecents="true"
android:exported="false"
android:screenOrientation="unspecified"
android:theme="@style/push_popup_theme" />
<service android:name="com.apms.sdk.push.GetGCMInstanceID"
android:exported="false">
<intent-filter>
<action android:name="com.google.android.gms.iid.InstanceID"/>
</intent-filter>
</service>
<service
android:name="com.apms.sdk.push.mqtt.MQTTService"
android:enabled="true"
android:exported="true"
android:label="PushService"
android:process="com.apms.sdk.pushservice"/>
<service
android:name="com.apms.sdk.push.mqtt.MQTTJobService"
android:enabled="true"
android:exported="true"
android:label="PushService"
android:process="com.apms.sdk.pushservice"/>
<activity
android:name="com.apms.sdk.push.mqtt.MQTTStarter"/>
<receiver
android:name=".push.MqttTimeOut"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.apms.sdk.push.mqtt.polling"/>
</intent-filter>
</receiver>
<activity
android:name="AvoidSmartManagerActivity"
android:excludeFromRecents="true"
android:taskAffinity=":avoidSmartManager"
android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
<receiver
android:name="AvoidSmartManagerReceiver"
android:enabled="true"/>
적용이 완료되었습니다. SDK는 이미 작성된 항목에서 설정 값을 가져옵니다.
.jar
형식으로 적용된 기존 SDK를 삭제하고 간단 가이드
문서를 참고하여 .aar
파일로 작성된 SDK를 적용합니다.
다음 항목들은 SDK에서 불필요하는 권한을 제거하는 가이드입니다. 어플리케이션에서 따로 필요로 하는 권한이 있는지 확인하고 삭제하여 주시기 바랍니다.
다음 항목들은 GCM 사용시 요구하였던 항목이므로 모두 제거합니다.
<permission android:name="<your-package-name>.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="<your-package-name>.permission.C2D_MESSAGE" />
<uses-permission android:name="android.permission.USE_CREDENTIALS"/>
<service android:name="com.apms.sdk.push.RegistrationIntentService"
android:exported="false"/>
<service android:name="com.apms.sdk.push.GCMPushService"
android:exported="false">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE"/>
</intent-filter>
</service>
다음 항목들은 SDK에서 더이상 사용하지 않는 항목이므로 모두 제거합니다.
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<activity
android:name="com.apms.sdk.push.mqtt.MQTTStarter"
android:configChanges="orientation"
android:excludeFromRecents="true"
android:exported="false"
android:screenOrientation="unspecified"
android:theme="@style/push_popup_theme" />
<service android:name="com.apms.sdk.push.GetGCMInstanceID"
android:exported="false">
<intent-filter>
<action android:name="com.google.android.gms.iid.InstanceID"/>
</intent-filter>
</service>
<service
android:name="com.apms.sdk.push.GetFCMInstanceID"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
<service
android:name="com.apms.sdk.push.mqtt.MQTTService"
android:enabled="true"
android:exported="true"
android:label="PushService"
android:process="com.apms.sdk.pushservice"/>
<service
android:name="com.apms.sdk.push.mqtt.MQTTJobService"
android:enabled="true"
android:exported="true"
android:label="PushService"
android:process="com.apms.sdk.pushservice"/>
<activity
android:name="com.apms.sdk.push.mqtt.MQTTStarter"/>
<receiver
android:name=".push.MqttTimeOut"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.apms.sdk.push.mqtt.polling"/>
</intent-filter>
</receiver>
<activity
android:name="AvoidSmartManagerActivity"
android:excludeFromRecents="true"
android:taskAffinity=":avoidSmartManager"
android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
<receiver
android:name="AvoidSmartManagerReceiver"
android:enabled="true"/>
APMS가 앞에 Prefix된 사항들을 모두 제거합니다.
<meta-data android:name="APMS_NOTI_CONTENT" android:value="@string/finger_event"/>
<meta-data android:name="APMS_SET_ICON" android:resource="@drawable/noti_icon"/>
<meta-data android:name="APMS_SET_LARGE_ICON" android:resource="@drawable/icon"/>
<meta-data android:name="APMS_NOTI_BACK" android:value="\#220022"/>
<meta-data android:name="APMS_SET_NOTI_SOUND" android:resource="@raw/ring"/>
다음 권한만이 필수적으로 필요한 권한입니다.
<uses-permission android:name="android.permission.GET_TASKS"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
프로젝트 src/main/assets
폴더 내의 apms.properties 파일을 제거합니다
sdk의 앞에 set
이 붙은 메소드가 설정 메소드이므로 제거하면 됩니다.
new DeviceCert(context)
이런식으로 작성되어 있는 것은 설정 메소드가 아닌 API 호출 메소드이므로 제거하면 안됩니다.
setPopupSetting()
setIsPopupActivity()
setNotiOrPopup()
setRingMode()
setVibeMode()
setPopupNoti()
setCustId()
설정은 다음과 같이 대체 됩니다. 기존 항목 중 없는 것은 불필요 항목입니다.
기존 | 변경 |
---|---|
gcm_project_id |
setFirebaseSenderId() |
app_key |
setServerAppKey() |
api_server_url |
setServerUrl() |
mqtt_flag |
setPrivateEnabled() |
mqtt_server_url_ssl mqtt_server_url_tcp |
setPrivateServerUrl() |
debug_tag |
setDebugTag() |
debug_flag |
setDebugEnabled() |
big_text_mode |
setExpandable() |
screen_wakeup_flag |
setWakeLockScreen() |
noti_receiver noti_receiver_class |
setClickListener() |
push_receiver_class |
setEventListener() |
push_popup_showing_flag |
setShowPopupActivity() |
push_popup_activity |
setPopupActivity() |
noti_group_flag |
setStackable() |
noti_o_badge |
setNotificationBadgeEnabled() |
기존 | 변경 |
---|---|
APMS_SET_ICON |
setSmallIcon() |
APMS_SET_LARGE_ICON |
setLargeIcon() |
APMS_NOTI_BACK |
setColor() |
APMS_SET_NOTI_SOUND |
setSound() |
APMS_NOTI_CONTENT |
setExpandable() |
기존 | 변경 |
---|---|
setRingMode() |
setRing() |
setVibeMode() |
setVibrate() |
setPopupSetting() |
setShowPopupActivity() |
setIsPopupActivity() |
setShowPopupActivity() |
setPopupNoti() |
setShowPopupActivity() |
적용이 완료되었습니다. SDK는 신규로 설정된 항목에서 설정 값을 가져옵니다.
기존에 제공되던 가이드는 여기에서 다운 받으실 수 있습니다.
2.4.8
20190605