알립니다
하이브리드 앱에서 웹 사이트 코드를 변경하지 않아도 인앱 웹 사이트에서 발생하는 에어브릿지 관련 작업을 안드로이드 SDK가 처리하도록 설정할 수 있습니다.
안드로이드 SDK는 웹 SDK에서 진행되는 이벤트 전송, 디바이스 설정, 유저 설정에 관한 명령을 대신 처리할 수 있습니다. 웹뷰에 웹 사이트를 표시하기 전에 Airbridge.setWebInterface
함수를 설정해 주세요.
YOUR_WEB_TOKEN
은 웹 SDK 토큰입니다. 웹 SDK 토큰은 에어브릿지 대시보드의 [설정]>[토큰 관리]에서 확인할 수 있습니다.
class MainActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
initWebView()
}
fun initWebView() {
webView.settings.javaScriptEnabled = true
webView.settings.domStorageEnabled = true
Airbridge.setWebInterface(webView, "YOUR_WEB_TOKEN")
webView.webChromeClient = WebChromeClient()
webView.webViewClient = WebViewClient()
webView.loadUrl("http://my_company.com/main")
}
}
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initWebView();
}
void initWebView() {
webView = findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
Airbridge.setWebInterface(webView, "YOUR_WEB_SDK_TOKEN");
webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("http://dev.blog.airbridge.io/websdk-web-app/");
}
}
Airbridge.click 함수를 추가하여 웹뷰에서 딥링크를 정상적으로 실행할 수 있습니다. 웹뷰는 기본적으로 딥링크를 지원하지 않습니다. 따라서 Airbridge.click 함수로 SDK가 대신 트래킹 링크의 딥링크를 실행하도록 설정해야 합니다.
Airbridge.click
함수는 입력된 주소가 트래킹 링크면 true를 반환합니다. 그리고 주소로 앱을 실행하면 onSuccess
함수를 호출합니다. 인터넷이 없거나 다른 앱이 실행되면 onFailure
함수가 호출됩니다.
Airbridge.click
함수는 입력된 주소가 트래킹 링크가 아니면 false를 반환하고 어떠한 동작을 하지 않습니다.
fun click(
trackingLink: String,
onSuccess: OnSuccess<Unit>? = null,
onFailure: OnFailure? = null
): Boolean
boolean click(
@NonNull String trackingLink,
@Nullable OnSuccess<Unit> onSuccess,
@Nullable OnFailure onFailure
)
WebViewClient
에서 WebViewClient#shouldOverrideUrlLoading
를 구현하면 특정 URL이 로딩되는 것을 확인한 후에 계속 로딩할지 또는 로딩하지 않을지 결정할 수 있습니다. WebViewClient에 대한 자세한 내용은 안드로이드 개발자 가이드를 참고해 주세요.
private val webViewClient = object : WebViewClient() {
override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
return super.shouldOverrideUrlLoading(view, url)
}
@RequiresApi(Build.VERSION_CODES.N)
override fun shouldOverrideUrlLoading(
view: WebView?,
request: WebResourceRequest?
): Boolean {
return super.shouldOverrideUrlLoading(view, request)
}
}
private fun initWebview() {
webView.webViewClient = webViewClient
}
private WebViewClient webViewClient = new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return super.shouldOverrideUrlLoading(view, url);
}
@Override
@RequiresApi(Build.VERSION_CODES.N)
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
return super.shouldOverrideUrlLoading(view, request);
}
};
private void initWebview() {
webView.setWebViewClient(webViewClient);
}
로딩 중에 특정 URL이 에어브릿지의 트래킹 링크이면 Airbirdge.click
함수를 사용해 webView#shouldOverrideUrlLoading의 결과를 true로 전송할 수 있습니다. 이를 통해 Webview 대신 에어브릿지 안드로이드 SDK가 트래킹 링크를 열도록 할 수 있습니다.
에어브릿지 트래킹링크는 URL 의 host 가 abr.ge
이거나 YOUR_APP_NAME.airbridge.io
또는 커스텀 도메인입니다.
private val webViewClient = object : WebViewClient() {
private fun handleDomain(view: WebView, uri: Uri): Boolean =
// return true when uri is tracking link
// return false when uri is not tracking link
Airbridge.click(uri.toString(), {
// on success
// do nothing
}, {
// on failure
// when uri is another app's tracking link or sdk fails to open uri
view.loadUrl(uri.toString())
})
override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
if (view === null) return false
if (url == null) return false
val uri = Uri.parse(url) ?: return false
return handleDomain(view, uri)
}
@RequiresApi(Build.VERSION_CODES.N)
override fun shouldOverrideUrlLoading(
view: WebView?,
request: WebResourceRequest?
): Boolean {
if (view === null) return false
val uri = request?.url ?: return false
return handleDomain(view, uri)
}
}
private WebViewClient webViewClient = new WebViewClient() {
private boolean handleDomain(@NonNull WebView view, @NonNull Uri uri) {
// return true when uri is tracking link
// return false when uri is not tracking link
return Airbridge.click(uri.toString()
, result -> {
// on success
// do nothing
}, throwable -> {
// on failure
// when uri is another app's tracking link or sdk fails to open uri
view.loadUrl(uri.toString())
}
);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (view == null) return false;
if (url == null) return false;
Uri uri = Uri.parse(url);
if (uri == null) return false;
return handleDomain(view, uri);
}
@Override
@RequiresApi(Build.VERSION_CODES.N)
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
if (view == null) return false;
if (request == null) return false;
Uri uri = request.getUrl();
if (uri == null) return false;
return handleDomain(view, uri);
}
};
아래 사항을 주의해 주세요.
하이브리드 앱 설정을 하면 웹 SDK만으로 인앱 웹뷰에서 발생하는 이벤트를 수집해야 합니다. 앱 SDK로 이벤트를 추가로 수집하면 해당 이벤트가 중복해서 집계됩니다.
인앱 웹뷰에 실제 모바일 웹사이트를 사용하면 웹 SDK만으로 이벤트를 수집해 주세요.
도움이 되었나요?