ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Airbridge
    iOS 2021. 10. 27. 21:35

    안녕하세요. 그린입니다🟢 

    이번 포스팅에서는 Airbridge(에어브릿지)에 대해 학습해보겠습니다💁🏻

     

    우선 에어브릿지가 무엇인지 짚고 넘어가보도록 하죠!

    Airbridge란?

    "Airbridge는 People-based 기여도분석 서비스로서, 다양한 디바이스, 플랫폼, 그리고 운영체제를 통합하는 마케팅 성과 분석을 제공합니다. 특히 파편화되어 있는 웹사이트와 모바일 앱의 마케팅 성과 분석을 통합적으로 제공하여, 올바른 성과 분석에 도움을 줍니다.

    Airbridge의 People-based 분석은 자체 Identity Resolution Engine(IRE)에 기반하고 있습니다. IRE는 파편화된 고객 정보를 ‘사람’ 중심으로 묶어준 뒤, 이를 재구성하여 정확한 고객 여정을 확인할 수 있도록 도와주고 있습니다.

    이와 같이 웹과 앱의 통합된 정보를 제공함으로써, 마케터가 고객 행동에 대해서 더 정확히 이해하고, ROI를 극대화할 수 있도록 서비스를 제공하고 있습니다."

    [출처: https://developers.airbridge.io/docs/getting-started]

    라고 정의되어 있습니다.

    음 너무 상투적인 소개여서 현기증이 나네요..

    조금 더 이해가 쉽게 에어브릿지를 소개하자면

    "사용자의 유입/ 액션을 파악하여 광고를 띄운 채널 및 캠페인의 성과를 측정할 수 있도록 도와주는 솔루션"

    이라고 정의해볼 수 있습니다.

    Airbridge의 장점

    에어브릿지는 공식 문서에 따르면 3가지의 차별점이 있는 솔루션이라고 해요🤔

    1. 웹과 앱의 통합분석

    2. 검색 광고 분석

    3. MTA & Incrementality - 멀티터치 기여도분석과 성과 증분(Incrementality) 측정 기능

    이러한 장점들이 있다네요😏

    뭐 우리는 iOS 앱에서 이 솔루션을 잘 갖다 붙여주기만 하면 되니까 그럼 그 부분에 대해서 심도있게 봅시다!

    앱에서 AirBridge 사용

    그러면 이 에어브릿지를 iOS 앱에서 어떻게 사용해야되는지 개요를 생각해볼께요.

    우선 광고채널이나 캠페인을 통해 사용자가 앱을 설치하고 사용하고 또 그안에서 가입을 하거나 상품을 사는 모든 행위들을 이벤트로 생각할 수 있습니다.

    이 이벤트들을 우리는 AirBridge SDK를 잘 활용하여 적재적소에 이벤트를 보내도록 심어줄 수 있습니다.

    이렇게 모인 이벤트들은 마케팅의 성과들을 측정 할 수 있는 지표가 될거에요👍

    Event 구조

    위에서 에어브릿지를 통해 이벤트를 전송해준다고 했습니다.

    그러면 본격적으로 iOS 앱에서 이벤트를 전송해주도록 하는 코드를 살펴보기전에

    요 전송해주는 이벤트 구조에 대해 알아봐야겠습니다🙋🏻

     

    1. Event Category (string, required)

     : 전송하는 이벤트의 이름으로 모든 이벤트는 해당 카테고리 이름이 존재합니다.
    1-1. Event Action (string, optional): 이벤트의 속성

    1-2. Event Label (string, optional): 이벤트의 속성

    2. Event Value (float, optional)

     : 이벤트 값으로 발생한 이벤트의 가치를 집계할 때 쓰입니다.

    Event 전송의 예시

    airbridge.events.send("add_to_wishlist", {
      "action": "MacBook", 
      "label": "1234-5678", 
      "value": 2000000 
      }
    )

    위는 웹의 경우의 예시인데 이런식으로 이벤트의 카테고리/액션/레이블 및 값을 주어 어떤 이벤트가 발생하였는지 쏴줄 수 있습니다.

    Swift에서 Semantic Attributes와 Custom Attributes

    이 두개의 공통점은 이벤트의 key와 value를 정하여 보내줄 수 있습니다.

    차이점으로는 Semantic Attributes는 에어브릿지에서 이미 정해놓은 요소들을 사용하는것이고

    Custom Attributes는 원하는대로 만들어서 사용하는것입니다.

    1. Semantic Attributes

    let event = ABInAppEvent()
    
    event?.setCategory("purchase_card")
    
    let semantics: [String: Any] = [
        "transactionID": "green",
        "totalValue": 100000000,
        "products": [[
            "productID": "123",
            "name": "MacBook Pro",
            "price": 2000000,
            "currency": "KRW",
            "quantity": 1,
        ], [
            "productID": "456",
            "name": "Car",
            "price": 8000000,
            "currency": "KRW",
            "quantity": 1,
        ]]
    ]
    event?.setSemantics(semantics)
    
    event?.send()

    Swift에서는 이렇게 쓰일 수 있습니다.

    에어브릿지에서 이미 정해놓았다고 한 항목들은 아래 링크에서 확인할 수 있습니다!

    https://docs.google.com/spreadsheets/d/13ThNnryqRmZQwJVecM8lZ2OB7LzA8s3cwLlQBGpbXLg/edit#gid=176781833

     

    Airbridge Data Spec (Public)

    Data Spec Raw Data Export,Raw Data Export Dump Integration (S3,GCP),Stream (Postback),Actual Report Group By Category,Field Name,Type,Description,Description (kr),Example,Field Key,Link,Web,App,~ v1.1,v1.2,v1.3,Available User,User ID,string,User ID,사용

    docs.google.com

    2. Custom Attributes

    속성들을 자유롭게 key value로 만들어서 지정할 수 있습니다.

    let event = ABInAppEvent()
    
    event?.setCategory("purchase_card")
    
    let customs : [String: Any] = [
        "grade": "VIP",
        "userName": "green"
    ]
    event?.setCustoms(customs)
    
    event?.send()

    이런식으로 Swift에서 아주 자유롭게~ 사용할 수 있습니다.

     

    그렇다면 둘중 어느것을 권장하느냐!?

    공식문서에서는 Semantic Attributes를 쓸때의 장점을 이야기하고 있습니다.

    장점이라 함은 에어브릿지와 다른 매체에서 포스트백 연동 시 받는 쪽에서 다른 액션을 취해주지 않아도 된다고 합니다.

    이미 정해진걸로 연결되어 있기때문에!

    뭐.. 사용하는건 자유니까요! 어떤것을 권장한다 이런건 없습니다😅

    Standard Event와 Custom Event

    그러면 이벤트에도 미리 지정해놓은 이벤트 자체가 있을것이고 새로운 커스텀한 이벤트가 있을겁니다.

    1. Standard Event

     : Standard Event Category를 사용하여 전송하는 이벤트로 airbridge. 이라는 컨벤션을 따릅니다.

    이렇게 정의되어 있습니다.

     

    2. Custom Event

     : 위의 예시 빼고 사용자가 지정한 Event Category로 전송하는 이벤트입니다.

     

    여기서도 Standard Event를 사용할때의 이점이 있습니다.

    몇가지가 있지만 제가 생각한 제일 큰 이점은 신규 기능이 도입되면 Standard Event 기준으로 제공된다는 것입니다.

    뭐 사실 이벤트가 정말 다양해서 이 Standard Event만으로도 안될 경우가 있기 때문에 적절히 잘 사용해야될것 같습니다.

    후.. 길고 길었네요 정말..!
    이제 그럼 정말 본격적으로 iOS 앱에 어떻게 사용하는지 배워봅시다🏃🏻

    AirBridge SDK 설치하기

    1. CocoaPods의 Podfile에 pod 'AirBridge', '1.17.0' 추가

    2. 터미널에서 pod install --repo-update 명령어로 업데이트

    이 외에 직접 설치할 수 있는데 이 부분은 공식 문서를 참조해주세요!

    초기화

    프로젝트에서 해당 SDK 사용을 위해 초기화 해주어야 합니다.

    AppDelegate에서 해주면 되겠네요!

    import AirBridge
    
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        AirBridge.getInstance("YOUR_APP_TOKEN", appName:"YOUR_APP_NAME", withLaunchOptions:launchOptions)
        ...
    }

    여기서 "YOUR_APP_TOKEN"은 에어브릿지 대쉬보드의 Settings > Tokens > 앱 이름이고

    "YOUR_APP_TOKEN" 은 동일하게 대쉬보드의 Settings > Tokens > 앱 SDK 토큰입니다.

    참고로 해당 에어브릿지 SDK 사용을 위해선 IDFA 동의가 필요합니다.

    IDFA(광고식별자)에 대한 포스팅은 제 블로그에서 AppTracking 부분에서 포스팅하였으니 참고해주세요👍

    위의 코드로 초기 앱을 설치하면 Install 이벤트가 전송될거에요..!

    SDK에 딥링크 정보 전달

    앱이 Scheme로 열렸을때 딥링크 정보를 아래와 같이 전달해 줄 수 있습니다. 

    func application(_ app: UIApplication,
                     open url: URL,
                     options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool
    {
        AirBridge.deeplink()?.handleURLSchemeDeeplink(url)
        
        return true
    }

    앱이 Universal Link로 열렸을때 딥링크 정보를 아래와 같이 전달해줄 수 있습니다.

    func application(_ application: UIApplication,
                     continue userActivity: NSUserActivity,
                     restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool
    {
        if let webpageURL = userActivity.webpageURL {      
            AirBridge.deeplink()?.handleUniversalLink(webpageURL)
        }
        
        return true
    }

    딥링크로 열린 후 기능 동작해주기

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey:
    Any]?) -> Bool {
        AirBridge.getInstance("YOUR_APP_TOKEN", appName: "YOUR_APP_NAME", withLaunchOptions: launchOptions)
        
        AirBridge.deeplink()?.setDeeplinkCallback({ (deeplink) in
            // 딥링크로 앱이 열리는 경우 작동할 코드
            // Airbridge 를 통한 Deeplink = YOUR_SCHEME://...
            NSLog("DeeplinkCallback : %@", deeplink)
        })
        
        return true
    }

    요렇게 콜백 함수로 정해줄 수 있습니다.

    사용자 식별자 설정하기

    사용자 식별자 정보를 전달하여 이후 이벤트에 대해 받아질 수 있도록 해줍니다.

    AirBridge.state()?.setUserID("GREEN")
    AirBridge.state()?.setUserEmail("humains29@gmai.com")
    AirBridge.state()?.setUserPhone("010-1234-1234")
    
    // 입력된 dictionary 로 user alias 가 교체됩니다.
    AirBridge.state()?.setUserAlias(["key": "value"])
    // 기존의 user alias 에 해당 key, value 가 추가됩니다.
    AirBridge.state()?.addUserAlias(withKey: "key", value: "value")

    userAlias는 사용자의 여러 아이디일때 딕셔너리로 등록해줄 수 있습니다.

     

    자 이제 이렇게 설정이 끝났으니 발생하는 이벤트에 대해 전송해주겠습니다.

    여기서는 회원가입 / 상품구매 스탠다드 이벤트에 대해서만 예시를 보겠습니다🤔

    이벤트 전송

    1. 회원가입 이벤트 전송

    let user = ABUser()
    user.ID = "GREEN"
    user.email = "humains29@gmail.com"
    user.phone = "010-1234-1234"
    user.attributes = [
        "key": "value" as NSObject,
    ]
    user.alias = [
        "key": "value",
    ]
    
    AirBridge.state.setUser(user)
    
    let event = ABInAppEvent()
    event?.setCategory(ABCategory.signUp)
    event?.send()

    이런틀로 여기서 필요한 user 세팅만 해주고 전달할 수 있습니다.

    ABUser 객체를 만들어 설정해주고 ABInAppEvent 객체를 만들어 이벤트의 카테고리 설정 후 전송! 핵심입니다👍

     

    2. 상품구매

    let product1 = ABProduct()
    product1.idx = "BENZ"
    product1.name = "GLC 300"
    product1.price = 70000000
    product1.currency = "KRW"
    product1.orderPosition = 1
    product1.quantity = 1
    
    let event = ABInAppEvent()
    event?.setCategory(ABCategory.viewProductDetail)
    event?.setSemantics([
        ABSemanticsKey.products: [
            product1.toDictionary(),
        ],
    ])
    event?.send()

    회원가입처럼 동일한 패턴이에요.

    여기서도 필요한 부분만 채우고 전송해줄 수 있습니다!

     

    아..! 이벤트들이 잘 들어왔는지 확인하려면 대쉬보드에서
    Raw Data > App Real-time Logs를 확인해서 전송한 이벤트를 보면됩니다!

     

    이 외 고급설정 부분이 있는데 여기서는 Tracking Authorize Timeout 설정만 알아보겠습니다🙌

    Tracking Authorize Timeout 설정

    앱 초기 설치 후 DFA 추적 허용을 위해 얼럿이 뜨면 요 에어브릿지 초기 코드가 씹힐 수 있습니다.

    그렇기에 타임아웃을 설정해줘서 정해진 시간을 기다릴 수 있게 해줍니다.

    AirBridge.setting()?.trackingAuthorizeTimeout = 120 * 1000
    AirBridge.setting()?.isRestartTrackingAuthorizeTimeout = false
    
    AirBridge.getInstance("YOUR_APP_TOKEN", appName:"YOUR_APP_NAME", withLaunchOptions:launchOptions)

    여기서 trackingAuthorizeTimeout은 밀리세컨드 단위임으로 원하는 만큼 설정할 수 있습니다.

    해당 시간만큼 설치 이벤트가 늦게 전송될 수 있습니다.

    isRestartTrackingAuthorizeTimeout 메서드는 앱이 재시작 될때마다 작동할지 초기화를 해주는 옵션입니다.

    초기화가 되지 않게 해준다면 false 설정을 해주면 됩니다.

    으아... 멀고 험난했다..!
    이렇게 에어브릿지에 대해 알아봤습니다🙋🏻
    마케팅은 생명임으로 잘 활용할 수 있도록 노력해봐요🙏🏻

    [참고자료]

    https://developers.airbridge.io/docs/ios-sdk

     

    iOS SDK

    SDK 설치


    패키지 설치 Cocoapods 아래와 같은 명령어로 Podfile 파일을 생성해주세요. Podfile 파일 내용을 아래와 같이 채워주세요. 터미널을 여시고 아래와 같은 명령어를 입력해주세요. pod 명령

     

    developers.airbridge.io

     

     

     

    'iOS' 카테고리의 다른 글

    UIFeedbackGenerator  (0) 2022.03.14
    링크 공유 & 이동 구현하기  (0) 2021.11.23
    App Tracking Transparency  (0) 2021.10.16
    Access Photo Library & Delete Asset  (0) 2021.10.03
    화면 캡쳐 및 녹화 방지  (9) 2021.08.28
Designed by Tistory.