애드브릭스 그로스액션 (Growth Action) 연동하기 [iOS - Swift]
팔로우
시작하기
디파이너리 그로스액션은 고객사의 인게이지먼트 마케팅 활동을 돕기 위해 크게 2가지 기능을 제공합니다.
디파이너리가 제공하는 기능을 이용하여 오디언스 그룹을 생성하고 각 오디언스를 타겟으로 하는 개인화된 마케팅을 진행할 수 있습니다.
[[인용:안내:보통]] 그로스액션을 이용하기 위해서는 디파이너리 유료플랜 이용이 필요합니다. [이용 문의하기]
푸시 서비스 기본 설정
인증서 등록
iOS 그로스 액션 서비스를 이용하기 위해 인증서를 등록합니다.
디파이너리 콘솔 / Growth Action / Settings / iOS Push Setting 에서 등록합니다.
[[인용:경고:보통]] 꼭 확인하세요.
- 암호가 없는 p12 인증서를 등록해야 합니다.
- p12 인증서는 Production 타입으로 등록해야 합니다.
- iOS 그로스 액션 서버 푸시는 Production 환경에서만 동작합니다.
Capability 추가
iOS 그로스액션 서비스 연동을 위해 아래 사항을 완료합니다.
- 앱의 Signing & Capabilities -> Capability 에 Background Modes, Push Notifications 를 추가
- Background Modes 에는 Remote notifications 를 체크
프레임워크 추가
iOS 그로스액션 서비스 사용을 위해 아래 사항을 완료합니다.
- General 항목에서 NotificationCenter.framework, UserNotifications.framework 를 추가합니다.
Notification Service Extension 추가
iOS 의 그로스액션 사용을 위해 Notification Service Extension 을 추가합니다.
a. Xcode 하단의 '+' 버튼 클릭
b. Notification Service Extension 을 선택하고 Next 버튼 클릭
c. Product Name 을 입력하고 완료
d. 해당 Extension 의 General 설정에 AdBrixRM.framework 를 추가합니다.
프레임워크는 현재 프로젝트의 Pods -> AdBrixRematered 폴더에 있습니다.
e. Extension 설정이 완료되면 해당 폴더에 자동으로 추가된 NotificationService.swift 파일을 열고 아래와 같이 수정합니다.
import UserNotifications import AdBrixRM class NotificationService : AdBrixPushService {}
AppDelegate.swift 수정
iOS 그로스액션 서비스 이용을 위해 AppDelegate.swift 를 아래 내용을 추가, 수정합니다.
a. Device Token 값 가져오기
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data){ let adBrix = AdBrixRM.getInstance adBrix.setRegistrationId(deviceToken: deviceToken) }
b. didFinishLaunchingWithOptions 에 사용자 알림 사용 권한 동의에 따라 푸시 On / Off 기능 추가
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate { ... let unCenter = UNUserNotificationCenter.current() unCenter.delegate = self let options : UNAuthorizationOptions = [.alert,.sound,.badge] unCenter.requestAuthorization(options: options, completionHandler: {(granted,error) in if granted{ DispatchQueue.main.async { // If Push permission is granted enable AdBrix Push AdBrixRM.getInstance.setPushEnable(toPushEnable: true) application.registerForRemoteNotifications() UIApplication.shared.registerForRemoteNotifications() } } else{ // If Push permission is not granted disable AdBrix Push AdBrixRM.getInstance.setPushEnable(toPushEnable: false) } }) ... }
[[인용:경고:보통]]기본 설정값 확인
디파이너리 기본 설정값은 'Push off' 입니다.
따라서 그로스 액션 연동 완료 후 사용자들에게 푸시 수신 동의를 받은 후 Push On API 를 호출해야 합니다.
기존에 푸시 수신 동의를 받은 사용자들 역시 푸시 수신을 위해서 Push On API 를 호출해야 합니다.
c. 푸시 클릭 트랙킹 함수 추가
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { AdBrixRM.getInstance.userNotificationCenter(center: center, response: response) completionHandler() }
[[인용:안내:보통]] 축하합니다!!!
디파이너리 그로스액션 서비스를 위한 기본적인 연동이 완료되었습니다.
이제 서버 푸시 서비스를 이용할 수 있습니다. 로컬 푸시 및 기타 푸시 메시지 옵션 설정을 위해서는 아래 내용을 참고 부탁 드립니다.
푸시 서비스 추가 설정
푸시 알림 델리게이트
로컬, 서버 푸시에 대한 델리게이트를 설정합니다.
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate, AdBrixRmPushLocalDelegate, AdBrixRmPushRemoteDelegate { ... func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { ... adBrix.setAdBrixRmPushLocalDelegate(delegate: self) // Local Push Delegate adBrix.setAdBrixRmPushRemoteDelegate(delegate: self) // Reomte Push Delegate ... } // Local Push Delegate func pushLocalCallback(data: Dictionary<String, Any>?, state: UIApplication.State) { print("Local Push Received") } // Reomte Push Delegate func pushRemoteCallback(data: Dictionary<String, Any>?, state: UIApplication.State) { print("Remote Push Received") } ... }
[[인용:위험:보통]] 각 델리게이트는 푸시를 클릭하여 앱이 foreground 일 때 동작합니다.
[[인용:위험:보통]]주의사항
서버 푸시 델리게이트 (pushRemoteCallback) 의 경우 푸시 설정시 단순 AppOpen 을 선택했을 경우 아무런 값을 전달하지 않습니다. 그러므로 이에 대한 예외처리를 부탁드립니다.
로컬 푸시 설정
로컬 푸시 호출
클라이언트에서 직접 호출하는 로컬 푸시를 구현합니다.
@IBAction func localPushEvent(_ sender: Any) { let calendar = Calendar.current let alarmTime = calendar.date(byAdding: .second, value: 5, to: Date()) let notisound = UNNotificationSound(named: UNNotificationSoundName(rawValue: "mySound.aiff")) AdBrixRM.getInstance.registerLocalPushNotification(id: "12345", date: alarmTime!, title: "this is Title", subtitle: "this is subtitle", body: "This is text", sound: notisound, categoryId: nil, threadId: nil, badgeNumber: 3, image:URL(string: "https://myURL.com/myImage.jpg"), attrDic: ["customKey" : "customValue"], completionHandler: {(isRegSucc,error,pushid)in print("registerLocalPushnotification is RegSucc:: \(isRegSucc) : \(pushid)") }) }
프로퍼티 값
- id : 푸시 등록용 unique ID
- date : 푸시 알림 일자
- title : 타이틀 (최상단)
- subtitle : 보조 타이틀 (타이틀 하단)
- body : 메인 본문
- sound : 푸시 알림 사운드 (nil 일 경우 기본 사운드 사용)
- categoryId : 카테고리 ID
- threadId : thread ID
- badgeNumber : 앱 아이콘에 표시되는 뱃지 숫자
- image : 푸시에 사용할 서버 혹은 로컬 이미지 (서버 이미지일 경우 반드시 https:// 를 사용)
- attrDic : 별도로 사용할 Dictionary 데이터
- completionHandler : 푸시 등록 콜백 리스너
- isRegSucc : 푸시 등록 완료 여부
- error : 푸시 등록 실패시 error 내용 (성공시 데이터는 nil)
- pushId : 등록한 푸시 ID
로컬 푸시 제어
현재 설정된 로컬 푸시에 대한 관리 및 제어를 위해 사용합니다.
//Current Local Push List AdBrixRM.getInstance.getRegisteredLocalPushNotification(completeHandler: {(idArr) in print(“myLocalPushList : \(idArr)“) }) // Cancel the certain Local Push let arr : Array = ["pushid1"] AdBrixRM.getInstance.cancelLocalPushNotification(ids: arr) // Cancel all Local Push AdBrixRM.getInstance.cancelLocalPushNotificationAll()
- getRegisteredLocalPushNotification : 현재 예약된 로컬 푸시 리스트 호출
- cancelLocalPushNotification : 특정 푸시 ID 를 가진 로컬 푸시 호출 취소
- cancelLocalPushNotificationAll : 모든 로컬 푸시 호출 취소
인앱 메시지 서비스 설정
기본 설정
디파이너리 인앱 메시지는 별도의 연동이 필요하지 않습니다.
디파이너리 SDK를 통해서 전달된 이벤트를 트리거로 하여 인앱 메시지를 노출할 수 있고, 디파이너리 콘솔에서 모든 설정을 진행할 수 있습니다.
[[인용:안내:보통]] 인앱 메시지 기능은 디파이너리 iOS SDK 2.0.0.1 버전 이상에서 사용할 수 있습니다.
클릭 이벤트 델리게이트 설정
유저의 인앱 메시지 클릭 이벤트를 설정한 이벤트 델리게이트를 통해 전달합니다.
이 델리게이트를 이용하여 클릭 이벤트에 대한 추가 액션을 정의할 수 있습니다.
@UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate, AdBrixRMInAppMessageClickDelegate{ func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { let adBrix = AdBrixRM.getInstance // Add InAppMessage Click Delegate adBrix.setInAppMessageClickDelegate(delegate: self) return true } func onReceiveInAppMessageClick(actionId : String, actionType : String, actionArg : String, isClosed : Bool) { NSLog("inAppMessageDelegate actionId : \(actionId)") NSLog("inAppMessageDelegate actionType : \(actionType)") NSLog("inAppMessageDelegate actionArg : \(actionArg)") NSLog("inAppMessageDelegate isClosed : \(isClosed)") } }
클릭 이벤트 델리게이트 전달값 상세
델리게이트를 통해 전달되는 값의 타입과 예시는 다음과 같습니다.
- 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) : 인앱 메시지가 닫혔는지 여부.