안드로이드에서 프론트엔드 개발자한테 받은 url을 이용해서 웹뷰를 띄워야 하는 상황입니다.
하이브리드 앱 가이드에 올려주신 코드 그대로 적용했습니다.
webView.webViewClient = object : WebViewClient() {
override fun shouldOverrideUrlLoading(
view: WebView,
request: WebResourceRequest
): Boolean {
Log.d(TAG, request.url.toString())
if (request.url.scheme == "intent") {
try {
// Intent 생성
val intent =
Intent.parseUri(request.url.toString(), Intent.URI_INTENT_SCHEME)
// 실행 가능한 앱이 있으면 앱 실행
if (intent.resolveActivity(packageManager) != null) {
startActivity(intent)
Log.d(TAG, "Intent: $intent")
Log.d(TAG, "ACTIVITY: ${intent.`package`}")
return true
}
// Fallback URL이 있으면 현재 웹뷰에 로딩
val fallbackUrl = intent.getStringExtra("browser_fallback_url")
if (fallbackUrl != null) {
view.loadUrl(fallbackUrl)
Log.d(TAG, "FALLBACK: $fallbackUrl")
return true
}
Log.e(TAG, "Could not parse anythings")
} catch (e: URISyntaxException) {
Log.e(TAG, "Invalid intent request", e)
}
}
return false
}
하지만
if (intent.resolveActivity(packageManager) != null) {
startActivity(intent)
Log.d(TAG, "Intent: $intent")
Log.d(TAG, "ACTIVITY: ${intent.`package`}")
return true
}
부분에서 조건문에 걸려 return true를 반환해 아래의 코드가 실행 안 되는데 정작 이 조건문 블록 내의 코드는 잘 동작을 안 합니다. 카카오 앱이 실행이 안 되거든요.
그래서 이 코드를 지우고 fallbackUrl을 이용해서 카카오 웹 로그인을 이용하고 있는 상황입니다.
제가 올린 코드에 문제가 없다면(여기에 코드 전문을 추가하진 않았지만 첨부한 링크에 올라온 안드로이드 코드 전부 적용했습니다.) 웹쪽 코드 문제일까요? 하지만 iOS 쪽은 카카오톡 앱이 잘 실행되고 로그인이 잘 되는데… 안드로이드 문제일까요?