그로스 액션 (Growth Action) 연동하기 [Android]
팔로우
시작하기
디파이너리 그로스액션은 고객사의 인게이지먼트 마케팅 활동을 돕기 위한 기능을 제공합니다.
[그로스액션 (Growth Action) 서비스 알아보기]
디파이너리가 제공하는 기능을 이용하여 오디언스 그룹을 생성하고 각 오디언스를 타겟으로 하는 개인화된 마케팅을 진행할 수 있습니다.
[[인용:안내:보통]] 그로스액션을 이용하기 위해서는 디파이너리 유료플랜 이용이 필요합니다. [이용 문의하기]
푸시 서비스 기본 설정
필수 사항
디파이너리 그로스 액션 기능을 연동하기 위해서는 디파이너리(애드브릭스) 기본 SDK와 Firebase Cloud Messaging SDK (이하 FCM) 연동이 필요합니다.
adbrix 기본 연동 단계까지 완료해야 그로스액션 연동이 가능합니다.
- 디파이너리(애드브릭스) 기본 SDK - 디파이너리 연동하기 [Android]
- FCM SDK - Android에서 Firebase 클라우드 메시징 클라이언트 앱 설정
Firebase Server Key, Sender ID 등록
디파이너리 그로스 액션 이용을 위해서는 디파이너리 콘솔에 Firebase Server Key / Sender ID 를 등록해야 합니다.
Firebase Server Key / Server ID 는 Firebase 콘솔 -> 설정 -> 클라우드 메시징 에서 확인하실 수 있습니다.
a. Firebase 콘솔에서 Firebase Server Key, Sender ID 를 확인합니다.
b. adbrix 콘솔의 Growth Action - Settings 메뉴에 확인한 키값을 입력합니다.
푸시 수신 설정
AndroidManifest.xml 에 아래 리시버를 등록합니다.
<receiver android:name="com.igaworks.v2.core.push.notification.AbxPushReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND"> <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE"/> <action android:name="com.igaworks.v2.core.pushServiceImplement.CLIENT_PUSH_RECEIVE"/> </intent-filter> </receiver>
작성하신 FirebaseMessagingService의 onMessageReceived내에 AdBrixRm.onMessageReceived를 사용하여 푸시 수신 설정을 합니다.
public class MyFirebaseMessagingService extends FirebaseMessagingService { @Override public void onMessageReceived(@NonNull RemoteMessage remoteMessage) { super.onMessageReceived(remoteMessage); AdBrixRm.onMessageReceived(getApplicationContext(), remoteMessage); } }
class MyFirebaseMessagingService :FirebaseMessagingService() { override fun onMessageReceived(message: RemoteMessage) { super.onMessageReceived(message) AdBrixRm.onMessageReceived(applicationContext, message) } }
Token 값 설정
adbrix에 Firebase 의 Token 값을 설정하기 위해서는 FirebaseMessagingService의 onNewToken()내에 AdBrixRm.setRegistrationId를 사용하여 Token 값을 추가합니다.
그리고 사용하는 Application에 다음과 같이 Token 값이 갱신 될 수 있도록 다음 코드를 추가합니다.
public class MyApplicationClass extends Application { @Override public void onCreate() { super.onCreate(); refreshToken(); } private void refreshToken(){ FirebaseMessaging.getInstance().getToken() .addOnCompleteListener(new OnCompleteListener<String>() { @Override public void onComplete(@NonNull Task<String> task) { if (!task.isSuccessful()) { return; } String token = task.getResult(); AdBrixRm.setRegistrationId(token); } }); } }
class MyApplicationClass : Application() { override fun onCreate() { super.onCreate() refreshToken() } private fun refreshToken(){ FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task -> if (!task.isSuccessful) { return@OnCompleteListener } val token = task.result AdBrixRm.setRegistrationId(token) }) } }
Push on / off
adbrix 그로스액션 서비스를 이용하기 위해서는 반드시 연동해야하는 필수 API 입니다. 이 API 로 푸시 서비스를 관리할 수 있습니다.
AdBrixRm.setPushEnable(true); // Push On AdBrixRm.setPushEnable(false); // Push Off
AdBrixRm.setPushEnable(true) // Push On AdBrixRm.setPushEnable(false) // Push Off
[[인용:경고:보통]]기본 설정값 확인
디파이너리의 기본 설정값은 'Push off' 입니다.
따라서 그로스 액션 연동 완료 후 사용자들에게 푸시 수신 동의를 받은 후 Push On API 를 호출해야 합니다.
기존에 푸시 수신 동의를 받은 사용자들 역시 푸시 수신을 위해서 Push On API 를 호출해야 합니다.
[[인용:안내:보통]] 축하합니다~!
디파이너리 그로스액션 서비스를 위한 기본 연동이 완료되었습니다.
이후부터 서버 푸시 수신이 가능하며, 로컬 푸시 및 기타 푸시 메시지 옵션 설정을 위해서는 계속 연동을 진행해 주시길 바랍니다.
푸시 서비스 추가 설정
푸시 아이콘 및 색상 설정
푸시 수신시 노출되는 아이콘 및 앱 이름의 색상을 설정합니다.
AdBrixRm.setPushIconStyle(this,"smallicon","largeicon",Color.argb(1,255,0,0)); //Using Color class ARGB AdBrixRm.setPushIconStyle(this,"smallicon","largeicon",AdBrixRm.PushColor.Yellow); // Using AdBrixRm class
AdBrixRm.setPushIconStyle(this,"smallicon","largeicon",Color.argb(1,255,0,0)) //Using Color class ARGB AdBrixRm.setPushIconStyle(this,"smallicon","largeicon",AdBrixRm.PushColor.Yellow) // Using AdBrixRm class
이렇게 설정된 푸시 아이콘은 아래와 같이 노출 됩니다.
[[인용:위험:보통]]주의사항
1) 이미지 파일 이름은 확장자를 뺀 이름만 입력합니다.
2) 모든 해상도의 Drawable 폴더에 해당 이름의 이미지를 모두 추가해야 합니다.
3) 서버 푸시에서 largeIcon 을 설정하였다면 해당 아이콘이 우선적으로 노출됩니다.
4) ARGB 설정은 앱 이름의 색상을 변경합니다.
5) ARGB는 Color 클래스의 ARGB 형식을 지원합니다.
6) ARGB는 AdbrixRm 클래스에 정의된 PushColor 형식을 지원합니다.
V2 푸시 채널 설정
Android 8.0 이상에서 알림을 만들기 위해서는 NotificationChannel을 이용해야합니다. 해당 API를 사용하기 위해 반드시 AdBrixRm.setPushEnable(true);가 먼저 적용되어야 합니다.
알림 채널의 이름, 설명, 푸시 우선 순위, 진동 여부를 설정합니다. (1개의 채널만 생성 합니다)
//context, channelName, description, importance, vibration AdBrixRm.setNotificationChannel(this,"myPushChannelName", "my Channel description", NotificationManager.IMPORTANCE_HIGH, true);
//context, channelName, description, importance, vibration AdBrixRm.setNotificationChannel(this,"myPushChannelName", "my Channel description",NotificationManager.IMPORTANCE_HIGH, true)
채널 중요도(importance)는 아래를 리스트를 참고 부탁드립니다. 채널 중요도(importance)를 default와 high로 설정하실 경우에만, vibration 기능을 사용하실 수 있습니다.
- NotificationManager.IMPORTANCE_HIGH : 알림 표시 ON / 소리 / 팝업으로 표시
- NotificationManager.IMPORTANCE_DEFAULT : 알림 표시 ON / 소리
- NotificationManager.IMPORTANCE_LOW : 알림 표시 ON / 무음 / 알림 최소화 OFF
- NotificationManager.IMPORTANCE_MIN : 알림 표시 ON / 무음 / 알림 최소화 ON
- NotificationManager.IMPORTANCE_NONE : 알림 표시 OFF
[[인용:위험:보통]]주의사항
channelName과 channelDescription은 해당 API를 이용해 언제나 변경 가능합니다. 하지만, channel이 생성된 후 importance와 vibration 여부는 변경할 수 없으니 참고를 부탁드립니다.
카카오 채널을 이용하실 경우, 카카오 SDK를 통해 가져오신 ID를 디파이너리 서버에 등록해야 합니다.
AdBrixRm.setKakaoId(Long.toString(result.getId()));
AdBrixRm.setKakaoId(Long.toString(result.getId()))
푸시 알림 설정
푸시 알림의 노출 정도를 설정합니다. 아래의 푸시 알림 설정 API는 Android 8.0 미만에서만 사용이 가능합니다.
AdBrixRm.setNotificationOption(this,NotificationCompat.PRIORITY_MIN,NotificationCompat.VISIBILITY_SECRET);
AdBrixRm.setNotificationOption(this,NotificationCompat.PRIORITY_MIN,NotificationCompat.VISIBILITY_SECRET)
헤드업 알림 설정 (PRIORITY)
- PRIORITY_MAX : 헤드업 알림 사용
- PRIORITY_HIGH : 헤드업 알림 사용
- PRIORITY_DEFAULT : 헤드업 알림을 사용하지 않음
- PRIORITY_LOW : 헤드업 알림을 사용하지 않음
- PRIORITY_MIN : 헤드업 알림을 사용하지 않음
잠금화면 알림 설정 (VISIBILITY)
- VISIBILITY_SECRET : 잠금화면 알림을 사용하지 않음
- VISIBILITY_PRIVATE : 잠금화면 알림은 표시되나, 내용은 표시되지 않음
- VISIBILITY_PUBLIC : 전체 내용을 잠금화면에 표시
푸시 알림 리스너
클라이언트 / 서버 푸시에 대한 리스너를 설정합니다.
public class MyApplication extends Application implements AdBrixRm.onTouchRemotePushListener,AdBrixRm.onTouchLocalPushListener{ @Override public void onCreate() { super.onCreate(); //SDK init API must call first AbxActivityHelper.initializeSdk(MyApplicationClass.this, "your_adbrix_remastered_app_key", "your_adbrix_remastered_secret_key"); AdBrixRm.setRemotePushMessageListener(this); // Server Push AdBrixRm.setLocalPushMessageListener(this); // Local Push } // Local Push Listener @Override public void onTouchLocalPush(String onTouchLocalPushString) { Log.d("my_tag", "onReceiveLocakPushmessage" + onTouchLocalPushString); } // Remote Push Listener @Override public void onTouchRemotePush(String onTouchRemotePushString) { Log.d("my_tag", "onReceiveRemotePushMessage" + onTouchRemotePushString); } }
class MyApplication: Application(), AdBrixRm.onTouchRemotePushListener,AdBrixRm.onTouchLocalPushListener{ override fun onCreate() { super.onCreate() //SDK init API must call first AbxActivityHelper.initializeSdk(applicationContext , "your_adbrix_remastered_app_key", "your_adbrix_remastered_secret_key"); AdBrixRm.setRemotePushMessageListener(this) // Server Push AdBrixRm.setLocalPushMessageListener(this) // Local Push } // Local Push Listener override fun onTouchLocalPush(onTouchLocalPushString: String?) { Log.d("my_tag", "onReceiveLocakPushmessage" + onTouchLocalPushString) } // Remote Push Listener override fun onTouchRemotePush(onTouchRemotePushString: String?) { Log.d("my_tag", "onReceiveRemotePushMessage" + onTouchRemotePushString) } }
[[인용:위험:보통]]주의사항
푸시 리스너는 Application Class 에 추가하는 것을 권장합니다.
[[인용:위험:보통]]주의사항
푸시 리스너는 SDK init 이후에 호출되어야 합니다.
해당 리스너는 푸시를 클릭했을 때 동작하며 클릭시 아래의 정보를 전달합니다.
- 로컬 푸시 : 푸시에 설정된 모든 정보
- 서버 푸시 : 푸시에 설정된 딥링크
[[인용:위험:보통]]주의사항
서버푸시 리스너 (onTouchRemotePush) 의 경우 푸시 설정시 단순 AppOpen 을 선택했을 경우 아무런 값을 전달하지 않습니다. 그러므로 이에 대한 예외처리를 부탁드립니다.
[[인용:위험:작게]] An operation is not implemented: Not yet implemented 오류가 보고되는 경우
SDK와 관계없이 콜백메소드 내에 TODO 주석을 사용했을 때 해당 오류가 발생하는 경우가 있습니다.
콜백메소드 내에 TODO가 있다면 제거 부탁드립니다.
로컬 푸시 설정
텍스트 푸시
텍스트로 이루어진 로컬 푸시를 설정 합니다.
AdBrixRm.BigTextPushProperties bigTextPushMessageProperties = new AdBrixRm.BigTextPushProperties() .setTitle("PushTest") .setContentText("This is ContentText") .setBigContentTitle("BigContentTitle") .setSummaryText("Summary Text") .setBigText("This is big Text.This is big Text.This is big Text.This is big Text.This is big Text.") .setSecond(5) .setEventId(12345) .setDeepLinkUri("adbrixrm://main"); AdBrixRm.setBigTextClientPushEvent(this,bigTextPushMessageProperties, true);
val bigTextPushMessageProperties = AdBrixRm.BigTextPushProperties() .setTitle("PushTest") .setContentText("This is ContentText") .setBigContentTitle("BigContentTitle") .setSummaryText("Summary Text") .setBigText("This is big Text.This is big Text.This is big Text.This is big Text.This is big Text.") .setSecond(5) .setEventId(12345) .setDeepLinkUri("adbrixrm://main") AdBrixRm.setBigTextClientPushEvent(this,bigTextPushMessageProperties, true)
프로퍼티 값
- setSecond : n 초 후 푸시 노출 설정
- setEventId : 로컬 푸시 제어를 위한 이벤트 ID
- setDeeplinkUri : 푸시 클릭시 이동할 딥링크 주소
- bool alwaysShown : 앱이 동작 중일 때도 푸시를 노출 시킬지 여부
이미지 푸시
텍스트 + 이미지로 구성된 푸시 메시지를 설정합니다.
AdBrixRm.BigPicturePushProperties bigPicturePushProperties = new AdBrixRm.BigPicturePushProperties() .setTitle("ImagePushTest") .setContentText("This is ContentText") .setBigContentTitle("BigContentTitle") .setSummaryText("Summary Text") .setBigPictureUrl("http://myimage/image.png") .setResourceId(R.drawable.adbrix_image) .setSecond(10) .setEventId(67890) .setDeepLinkUri("adbrixrm://main"); AdBrixRm.setBigPictureClientPushEvent(this,bigPicturePushProperties,true);
val bigPicturePushProperties = AdBrixRm.BigPicturePushProperties() .setTitle("ImagePushTest") .setContentText("This is ContentText") .setBigContentTitle("BigContentTitle") .setSummaryText("Summary Text") .setBigPictureUrl("http://myimage/image.png") .setResourceId(R.drawable.adbrix_image) .setSecond(10) .setEventId(67890) .setDeepLinkUri("adbrixrm://main") AdBrixRm.setBigPictureClientPushEvent(this,bigPicturePushProperties,true)
프로퍼티 값
- setBigPictureUrl
_ 푸시에 넣을 이미지 URL
_ setResourceId 가 동시에 설정되어 있다면 setResourceId의 이미지가 우선적으로 노출됩니다. - setResourceId
_ 푸시에 넣을 이미지 리소스 ID
_ setBigPictureUrl 이 동시에 설정되어 있다면 setResourceId의 이미지가 우선적으로 노출됩니다. - setSecond : n 초 후 푸시 노출 설정
- setEventId : 로컬 푸시 제어를 위한 이벤트 ID
- setDeeplinkUri : 푸시 클릭시 이동할 딥링크 주소
- bool alwaysShown : 앱이 동작 중일 때도 푸시를 노출 시킬지 여부
[[인용:경고:보통]] 이미지는 2:1 비율에 최대 1350x675 사이즈의 이미지 사용을 권장합니다.
로컬 푸시 제어
현재 설정된 로컬 푸시에 대한 관리 및 제어를 위해 사용합니다.
JSONArray localPushList = AdBrixRm.getPushEventList(); // Current Local push List(JSON Array) AdBrixRm.cancelClientPushEvent(this,67890); // Cancel the Local Push with EventId 67890
>val localPushList = AdBrixRm.getPushEventList() // Current Local push List(JSON Array) AdBrixRm.cancelClientPushEvent(this,67890) // Cancel the Local Push with EventId 67890
- getPushEventList : 현재 예정된 로컬 푸시 리스트를 확인합니다. 리스트는 JSON Array 로 표시됩니다.
- cancelClientPushEvent : 해당 이벤트 ID 로 설정된 로컬 푸시의 전송을 취소합니다.
인앱 메시지 서비스 설정
기본 설정
디파이너리 인앱 메시지는 별도의 연동이 필요하지 않습니다.
디파이너리 SDK를 통해서 전달된 이벤트를 트리거로 하여 인앱 메시지를 노출할 수 있고, 디파이너리 콘솔에서 모든 설정을 진행할 수 있습니다.
[[인용:안내:보통]] 인앱 메시지 기능은 안드로이드 SDK 2.1.0.0 버전 이상에서 사용할 수 있습니다.
클릭 이벤트 리스너 설정
유저의 인앱 메시지 클릭 이벤트를 설정한 리스너를 통해 전달합니다.
이 리스너를 이용하여 클릭 이벤트에 대한 추가 액션을 정의할 수 있습니다.
public class MainApplication extends Application implements AdBrixRm.InAppMessageClickListener{ @Override public void onCreate() { AdBrixRm.setInAppMessageClickListener(this); } @Override public void onReceiveInAppMessageClick(String actionId, String actionType, String actionArg, boolean isClosed) { Log.d("abxrm", "onReceiveInAppMessageClick actionId = " + actionId); Log.d("abxrm", "onReceiveInAppMessageClick actionType = " + actionType); Log.d("abxrm", "onReceiveInAppMessageClick actionArg = " + actionArg); Log.d("abxrm", "onReceiveInAppMessageClick isClosed = " + isClosed); } }
class MainApplication : Application(), AdBrixRm.InAppMessageClickListener { override fun onCreate() { super.onCreate() AdBrixRm.setInAppMessageClickListener(this) } override fun onReceiveInAppMessageClick(actionId: String, actionType: String, actionArg: String, isClosed: Boolean) { Log.d("abxrm", "onReceiveInAppMessageClick actionId = " + actionId); Log.d("abxrm", "onReceiveInAppMessageClick actionType = " + actionType); Log.d("abxrm", "onReceiveInAppMessageClick actionArg = " + actionArg); Log.d("abxrm", "onReceiveInAppMessageClick isClosed = " + isClosed); } }
[[인용:위험:보통]]주의사항
푸시 리스너는 Application Class 에 추가하는 것을 권장합니다.
클릭 리스너 전달 값 상세
클릭 리스너를 통해 전달되는 값의 타입과 예시는 다음과 같습니다.
- actionId (String) : button_1, button_2, image, sticky
- actionType (String) : close, deeplink_and_close, weblink, weblink_and_close, dont_show_me_today_and_close
- actionArg (String) : weblink address, deeplink path
- isClosed (Boolean) : 인앱 메시지가 닫혔는지 여부.