Airbridge 연동

Airbridge는?

Airbridge는 모바일 앱 마케팅 플랫폼으로, 사용자 획득, 유지, 그리고 맞춤형 마케팅을 위한 다양한 도구와 분석 기능을 제공합니다. 특히 한국의 이커머스, 대기업에서 널리 사용되고 있습니다.

핵클과 Airbridge를 연동하면 모바일 앱의 유입 정보를 사용자 속성으로 불러와서, A/B테스트 타겟팅이나 세부 분석으로 활용할 수 있습니다.

Airbridge SDK 연동

Airbridge와 연동하려면 Airbridge SDK가 수집하는 식별자(user id)와 속성을 Hackle SDK에 전송해야 합니다.

🚧

SDK 호출 순서 보장 필요

Airbrdige SDK 초기화가 완료된 후에 아래 함수를 호출해야 Airbridge의 정보를 정상적으로 불러올 수 있습니다. 이후에 해당 정보를 Hackle SDK로 전송하면 됩니다.

Airbridge 식별자 확인

Airbridge SDK를 호출하여 Airbridge의 식별자를 불러올 수 있습니다. 가장 기본적인 Airbridge Device ID를 포함하여, 다양한 식별자 정보를 활용할 수 있습니다. 보다 자세한 내용은 Airbridge의 공식 문서를 확인하세요. (Link)

//Airbridge Device ID
import co.ab180.airbridge.Airbridge;
import co.ab180.airbridge.AirbridgeCallback;

Airbridge.getDeviceInfo().getUUID(new AirbridgeCallback.SimpleCallback<String>() {
    @Override
    public void onSuccess(String result) {
  
    }
  
    @Override
    public void onFailure(@NotNull Throwable throwable) {
  
    }
});

//GAID (Google Advertising ID)
import co.ab180.airbridge.Airbridge;
import co.ab180.airbridge.AirbridgeCallback;
import co.ab180.airbridge.AdvertisingIdInfo;

Airbridge.getDeviceInfo().getGoogleAdvertisingIdInfo(new AirbridgeCallback.SimpleCallback<AdvertisingIdInfo>() {
    @Override
    public void onSuccess(AdvertisingIdInfo result) {
            result.getId(); // GAID
        result.getLimitAdTrackingEnabled(); // LAT
    }

    @Override
    public void onFailure(@NotNull Throwable throwable) {

    }
});
//Airbridge Device ID
import co.ab180.airbridge.Airbridge
import co.ab180.airbridge.AirbridgeCallback

Airbridge.getDeviceInfo().getUUID(object : AirbridgeCallback.SimpleCallback<String>() {
        override fun onSuccess(result: String) {
  
    }

    override fun onFailure(throwable: Throwable) {
  
    }
})

//GAID (Google Advertising ID)
import co.ab180.airbridge.Airbridge
import co.ab180.airbridge.AirbridgeCallback
import co.ab180.airbridge.AdvertisingIdInfo

Airbridge.getDeviceInfo().getAdvertisingIdInfo(object : AirbridgeCallback.SimpleCallback<AdvertisingIdInfo>() {
        override fun onSuccess(result: AdvertisingIdInfo) {
            result.getId() // GAID
        result.getLimitAdTrackingEnabled() // LAT
    }

    override fun onFailure(throwable: Throwable) {
  
    }
})
//Airbridge Device ID
#import <AirBridge/AirBridge.h>

AirBridge.deviceUUID;

//iOS ID for Advertisers (IDFA)
#import <AdSupport/AdSupport.h>

ASIdentifierManager.sharedManager.advertisingIdentifier.UUIDString;

//iOS ID for Advertisers (IFA)
UIDevice.currentDevice.identifierForVendor.UUIDString;
//Airbridge Device ID
import AirBridge

AirBridge.deviceUUID

//iOS ID for Advertisers (IDFA)
import AdSupport

ASIdentifierManager.shared().advertisingIdentifier.uuidString

//iOS ID for Advertisers (IFA)
UIDevice.current.identifierForVendor?.uuidString
//Airbridge Cookie ID
airbridge.fetchResource(function(res) {
    console.log(res.browser.clientId) // ex : "2bd08152-0fce-4d5e-8449-f4783b49a2c8"
})

Airbridge 어트리뷰션 정보 확인

Airbridge SDK를 호출하여 식별자 외에도 광고 네트워크, 캠페인 등 다양한 어트리뷰션 정보를 불러올 수 있습니다. 보다 정확한 내용은 Airbridge의 어트리뷰션 결과 관련 공식 문서를 확인하세요. (Link)

//Get Attribution Result Callback
AirbridgeConfig config = new AirbridgeConfig.Builder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
	.setOnAttributionResultReceiveListener(new OnAttributionResultReceiveListener() {
		@Override
		public void onAttributionResultReceived(@NonNull Map<String, String> result) {
			// Process attribution data
		}
	})
	.build();
Airbridge.init(this, config);
//Get Attribution Result Callback
val config = AirbridgeConfig.Builder("YOUR_APP_NAME", "YOUR_APP_SDK_TOKEN")
	.setOnAttributionResultReceiveListener(object : OnAttributionResultReceiveListener {
		override fun onAttributionResultReceived(result: Map<String, String>) {
			// Process attribution data
		}
	})
	.build()
Airbridge.init(this, config)
//Get Attribution Result Callback
[AirBridge.setting setAttributionCallback:^(NSDictionary<NSString *,NSString *> * _Nonnull attribution) {
    // Process attribution data...
        
}];
//Get Attribution Result Callback
AirBridge.setting().attributionCallback = { (attribution: [String : String]) in
    // Process attribution data...

}
//Get Default Attribution Channel
airbridge.fetchResource(function(res) { 
    console.log(res.attributionData.trackingData.channel) // ex : "website"
})

//Get Default Attribution Parameters
airbridge.fetchResource(function(res) {
    console.log(res.attributionData.trackingData.params)  // ex : {medium: "posting", campaign: "blog", term: "airbridge", content: "martech-solution"}
})

Hackle SDK로 식별자와 속성 전송

Hackle 연동하는 코드에 아래와 같이 Airbridge에서 불러온 식별자를 속성를 커스텀 식별자, 속성으로 전송해주세요. 보다 정확한 내용은 SDK 언어별 사용자 식별자와 속성 문서를 확인하세요. (Link)

식별자 전송

원하는 식별자를 핵클 SDK에 커스텀 식별자로 전송해주세요.

// Custom Identifier
import io.hackle.sdk.common.User
  
User user = User.builder()
    .identifier("myCustomId", "42")  // Custom ID
    .build();
  
hackleApp.setUser(user);
// Custom Identifier
HackleUserBuilder *builder = [User builder];
[builder identifier:@"myCustomId" :@"42"]; // Custom ID
User *user = [builder build];

[hackleApp setUserWithUser:user];
// Custom Identifier
let user = User.builder()
    .identifier("myCustomId", "42") // Custom ID
    .build()

hackleApp.setUser(user: user)
// Custom Identifier
const user = {
  userId: "LOGIN_ID", // 사용자 ID (핵클 통합 식별자 사용가능)
  deviceId: "CUSTOM_DEVICE_ID", // 디바이스 ID (핵클 통합 식별자 사용가능)
  identifiers: {
    myCustomId: "CUSTOM_IDENTIFIER" // Custom ID
  }
};

hackleClient.setUser(user);

사용자 속성 전송

원하는 어트리뷰션 정보를 핵클 SDK에 커스텀 사용자 속성으로 전송해주세요.

// Custom User Properties 
PropertyOperations operations = PropertyOperations.builder()
    .set("age", 42)
    .set("grade", "GOLD")
    .setOnce("sign_up_date", "2020-07-03")
    .build();

hackleApp.updateUserProperties(operations);
// Custom User Properties 
PropertyOperationsBuilder *builder = [PropertyOperations builder];
[builder set:@"age" :@42];
[builder set:@"grade": @"GOLD"];
[builder setOnce:@"sign_up_date" :@"2020-07-03"];
PropertyOperations *operations = [builder build];

[hackleApp updateUserPropertiesWithOperations:operations];
// Custom User Properties 
let operations = PropertyOperations.builder()
    .set("age", 42)
    .set("grade", "GOLD")
    .setOnce("sign_up_date", "2020-07-03")
    .build()

hackleApp.updateUserProperties(operations: operations)
// Custom User Properties 

import { PropertyOperationsBuilder } from "@hackler/javascript-sdk"

const operations = new PropertyOperationsBuilder()
    .set("age", 42)
    .set("grade", "GOLD")
    .setOnce("sign_up_date", "2020-07-03")
    .build();

hackleClient.updateUserProperties(operations);