본문으로 건너뛰기

커스텀 인앱 브라우저

Buzzvil SDK는 유저가 클릭한 광고나 콘텐츠에 설정된 URL을 Launcher로 전달하고, launch()에서는 광고를 어떤 브라우저로 보여줄지 결정합니다. 광고를 보여주는 브라우저는 외부 브라우저, 버즈빌의 인앱 브라우저, 그리고 직접 구현하는 커스텀 인앱 브라우저가 있습니다.

외부 브라우저나 버즈빌 인앱 브라우저의 경우 Buzzvil SDK의 기본 런처를 통해 둘 중 어느 브라우저를 사용할지 광고 설정에 따라 자동으로 결정됩니다. 커스텀 인앱 브라우저로 광고를 보여주려면 먼저 커스텀 인앱 브라우저를 구현하고, 브라우저를 실행하기 위해 런처를 구현한 다음 BuzzAdBenefit에 설정해야 합니다.

커스텀 인앱 브라우저 구현하기

다음은 커스텀 인앱 브라우저를 구현하는 예시입니다. 커스텀 인앱 브라우저를 구현하려면 BuzzAdBrowser.getInstance(this).getFragment(url)을 사용해야 합니다. 그렇지 않으면 액션형 광고와 체류 리워드 광고가 제대로 동작하지 않을 수 있습니다.

class CustomBrowserActivity : AppCompatActivity() {
companion object {
const val KEY_URL = "com.sample.KEY_URL"
private lateinit var fragment: BuzzAdBrowserFragment
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_custom_browser)

// URL을 KY로 하여 WebView를 가지고있는 Fragment를 받아와 사용합니다.
fragment = BuzzAdBrowser.getInstance(this).getFragment(intent.getStringExtra(KEY_URL))
supportFragmentManager.beginTransaction().replace(R.id.browserContainer, fragment).commit()
val webView = fragment.webView

// Browser의 이벤트를 받을 수 있습니다. DeepLink가 열렸을 경우, Browser를 닫아주어야 빈 페이지가 보여지는 현상을 방지할 수 있습니다.
BuzzAdBrowser.getInstance(this).addBrowserEventListener(object : OnBrowserEventListener() {
override fun onDeepLinkOpened() {
super.onDeepLinkOpened()
finish()
}
})
}

override fun onBackPressed() {
val webView = fragment.webView
if (webView != null && webView.canGoBack()) {
webView.goBack()
} else {
super.onBackPressed()
}
}
}

다음은 커스텀 인앱 브라우저의 레이아웃을 구현하는 예시입니다.

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/browserContainer"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>

커스텀 런처 구현하기

구현한 인앱 브라우저를 사용하려면 커스텀 런처를 구현해야 합니다. 커스텀 런처를 구현할 때 광고와 콘텐츠에 따라 동작을 다르게 설정할 수 있으며, 콘텐츠의 sourceUrl에는 딥 링크를 설정할 수 있습니다.

다음은 커스텀 런처를 구현하고 커스텀 인앱 브라우저에서 광고를 실행하도록 구현한 예시입니다. 

class CustomLauncher: Serializable, Launcher() {
override fun launch(context: Context, launchInfo: LaunchInfo, listener: LauncherEventListener?, javascriptInterfaces: List<Class<out BuzzAdJavascriptInterface>>?) {
// 커스텀 인앱 브라우저를 실행합니다.
val intent = Intent(context, CustomBrowserActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
intent.putExtra(CustomBrowserActivity.KEY_URL, launchInfo.uri.toString()) // URI는 변경 하면 안 됨
context.startActivity(intent)
}
}

커스텀 런처 설정하기

BuzzAdBenefit에 구현한 커스텀 런처를 설정하세요. 다음은 커스텀 런처를 설정하는 예시입니다.

BuzzAdBenefit.setLauncher(CustomLauncher())