본 연동 가이드는 BuzzAd-Benefit Web SDK를 통해 iOS 앱 내의 웹뷰 (WKWebView만 지원)에서 광고를 보여주기 위해 필요한 iOS SDK 연동 사항을 담고 있습니다. 광고를 보여줄 웹페이지는 Web SDK 연동해야 합니다.
최소 지원 버전: 1.2.16
주의사항
아이폰의 경우 WKWebView 만 지원합니다.
Deployment Target 10.0 이상에서만 지원합니다.
설치
1. Cocoapods 사용 (권장)
Podfile
에 아래 코드 추가
pod 'BuzzAdBenefit', '연동하려는 버전'
을 입력해 주세요.
pod 'BuzzAdBenefit', '2.2.5'
2. Manual Import
1) 프로젝트에 framework 추가
[프로젝트 메뉴] -> [General] -> [Embedded Binaries] 섹션에 다음 framework들을 추가합니다.
BuzzAdBenefit.framework
BuzzAdBenefitWebInterface.framework
AFNetworking.framework
SDWebImage.framework
libwebp.framework
(AFNetworking.framework, SDWebImage.framework, libwebp.framework는 본 저장소 Dependencies 폴더에서 다운받을 수 있습니다.)
2) Run script 추가
[프로젝트 메뉴] -> [Build Phases] 탭에서 '+' 버튼을 눌러 New Run Script Phase를 추가하고 아래 스크립트를 붙여 넣습니다. 이 과정은 universal framework로 빌드된 바이너리에서 불필요한 architecture들을 떼어내기 위해 필요합니다.
APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}" find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK; do FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable) FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME" EXTRACTED_ARCHS=() for ARCH in $ARCHS; do echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME" lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH" EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH") done echo "Merging extracted architectures: ${ARCHS}" lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}" rm "${EXTRACTED_ARCHS[@]}" echo "Replacing original executable with thinned version" rm "$FRAMEWORK_EXECUTABLE_PATH" mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH" done
SDK 연동
1 단계: BuzzAdBenefit
초기화
AppDelegate의 application:didFinishLaunchingWithOptions
에 아래 코드를 추가할 것을 권장합니다. 단, 최초 광고 요청 전에만 불린다면 자유롭게 코드 위치를 결정할 수 있습니다.
YOUR_iOS_APP_ID 부분에 Web SDK 연동을 위해 준비한 APP_ID 삽입
// Objective-C BABConfig *config = [[BABConfig alloc] initWithAppId:YOUR_iOS_APP_ID]; [BuzzAdBenefit initializeWithConfig:config];
// Swift let config = BABConfig(appId: YOUR_APP_ID) BuzzAdBenefit.initialize(with: config)
2 단계: 사용자 정보를 UserProfile
객체로 만들어서 저장
유저가 매체사 앱에 로그인한 시점에 아래와 같이 UserProfile
을 세팅합니다.
User ID와 타게팅 정보 (성별, 연령)는 원활한 서비스 운영을 위해 제공해야 할 필수 항목입니다. 해당 값을 입력하는 setUserProfile 함수를 호출하지 않으면 광고가 제공되지 않습니다.
userId : 매체사 서비스 유저를 unique 하게 구분할 수 있는 식별값. 유저를 구별할 수만 있으면 매체사 서비스의 사용자 계정이 아니어도 됩니다.
동일 유저에 대해 복수개의 User ID를 연동하거나 혹은 User ID 값이 변경될 가능성이 있을 경우, 버즈빌 담당 운영 매니저와 논의해야 합니다.
예시: 매체사 앱 삭제 후 재설치 시 User ID 값이 변경되는 경우
gender
BABUserGenderMale
: 남성BABUserGenderFemale
: 여성
birthYear: 출생년도
// Objective-C BABUserProfile *userProfile = [[BABUserProfile alloc] initWithUserId:YOUR_SERVICE_USER_ID birthYear:1985 gender:BABUserGenderMale]; [BuzzAdBenefit setUserProfile:userProfile];
// Swift let userProfile = BABUserProfile(userId: YOUR_SERVICE_USER_ID, birthYear: 1985, gender: BABUserGenderMale) BuzzAdBenefit.setUserProfile(userProfile)
유저의 로그인 정보를 웹페이지에서 알 수 있지만 앱에서 알 수 없는 경우, 웹페이지에서 사용자 프로필을 설정하는 기능을 지원하고 있습니다.
3 단계: 광고를 표시할 웹뷰 설정 (WKWebView만 지원)
웹뷰 안에서 광고를 로드하려면 다음과 같이 웹뷰에 scriptMessageHandler
를 추가한 뒤 웹뷰로 넘어오는 scriptMessage를 BABWebInterface
객체에게 전달해주어야 합니다.
// Objective-C - (void)viewDidLoad { [super viewDidLoad]; WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init]; WKUserContentController *contentController = [[WKUserContentController alloc] init]; [contentController addScriptMessageHandler:self name:BuzzAdBenefitWebInterfaceName]; config.userContentController = contentController; config.allowsInlineMediaPlayback = true; _webView = [[WKWebView alloc] initWithFrame:self.view.bounds configuration:config]; _webInterface = [[BABWebInterface alloc] initWithWebView:_webView]; ... } - (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message { [_webInterface handleScriptMessage:message]; ... }
// Swift override func viewDidLoad() { super.viewDidLoad() let config = WKWebViewConfiguration() let contentController = WKUserContentController() contentController.add(self, name: BuzzAdBenefitWebInterfaceName) config.userContentController = contentController config.allowsInlineMediaPlayback = true webView = WKWebView(frame: self.view.bounds, configuration: config) webInterface = BABWebInterface(webView: webView) ... } func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) { webInterface.handleScriptMessage(message) ... }
‘http 인 광고를 https 에서 정상적으로 동작시키기 위해 info.plist 파일에 다음 설정이 필요합니다.’
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoadsInWebContent</key> <true/> </dict>
4 단계: 사용자 정보 삭제
유저가 매체사 앱에서 로그아웃하는 시점에 UserProfile
설정값을 지워 유저의 사용 정보를 삭제합니다.
// Objective-C [BuzzAdBenefit setUserProfile:nil];
// Swift BuzzAdBenefit.setUserProfile(nil)