fix(payverse-webview): webView 세팅 조정을 통해 네이버페이가 동작하지 않던 버그 수정
- 참고: line 315 ~ 325
This commit is contained in:
		@@ -2,11 +2,16 @@ package kr.co.vividnext.sodalive.mypage.can.payment
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import android.annotation.SuppressLint
 | 
					import android.annotation.SuppressLint
 | 
				
			||||||
import android.content.Intent
 | 
					import android.content.Intent
 | 
				
			||||||
 | 
					import android.graphics.Bitmap
 | 
				
			||||||
import android.net.Uri
 | 
					import android.net.Uri
 | 
				
			||||||
 | 
					import android.os.Build
 | 
				
			||||||
import android.os.Handler
 | 
					import android.os.Handler
 | 
				
			||||||
import android.os.Looper
 | 
					import android.os.Looper
 | 
				
			||||||
import android.view.View
 | 
					import android.view.View
 | 
				
			||||||
 | 
					import android.webkit.WebChromeClient
 | 
				
			||||||
 | 
					import android.webkit.WebResourceError
 | 
				
			||||||
import android.webkit.WebResourceRequest
 | 
					import android.webkit.WebResourceRequest
 | 
				
			||||||
 | 
					import android.webkit.WebSettings
 | 
				
			||||||
import android.webkit.WebView
 | 
					import android.webkit.WebView
 | 
				
			||||||
import android.webkit.WebViewClient
 | 
					import android.webkit.WebViewClient
 | 
				
			||||||
import android.widget.TextView
 | 
					import android.widget.TextView
 | 
				
			||||||
@@ -26,6 +31,7 @@ import kr.co.vividnext.sodalive.BuildConfig
 | 
				
			|||||||
import kr.co.vividnext.sodalive.R
 | 
					import kr.co.vividnext.sodalive.R
 | 
				
			||||||
import kr.co.vividnext.sodalive.base.BaseActivity
 | 
					import kr.co.vividnext.sodalive.base.BaseActivity
 | 
				
			||||||
import kr.co.vividnext.sodalive.common.Constants
 | 
					import kr.co.vividnext.sodalive.common.Constants
 | 
				
			||||||
 | 
					import kr.co.vividnext.sodalive.common.LoadingDialog
 | 
				
			||||||
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
 | 
					import kr.co.vividnext.sodalive.common.SharedPreferenceManager
 | 
				
			||||||
import kr.co.vividnext.sodalive.databinding.ActivityCanPaymentBinding
 | 
					import kr.co.vividnext.sodalive.databinding.ActivityCanPaymentBinding
 | 
				
			||||||
import kr.co.vividnext.sodalive.extensions.formatMoney
 | 
					import kr.co.vividnext.sodalive.extensions.formatMoney
 | 
				
			||||||
@@ -53,8 +59,16 @@ class CanPaymentActivity : BaseActivity<ActivityCanPaymentBinding>(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    private val handler = Handler(Looper.getMainLooper())
 | 
					    private val handler = Handler(Looper.getMainLooper())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private lateinit var loadingDialog: LoadingDialog
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    override fun onDestroy() {
 | 
				
			||||||
 | 
					        loadingDialog.dismiss()
 | 
				
			||||||
 | 
					        super.onDestroy()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @SuppressLint("SetTextI18n")
 | 
					    @SuppressLint("SetTextI18n")
 | 
				
			||||||
    override fun setupView() {
 | 
					    override fun setupView() {
 | 
				
			||||||
 | 
					        loadingDialog = LoadingDialog(this, layoutInflater)
 | 
				
			||||||
        canResponse = IntentCompat.getParcelableExtra(
 | 
					        canResponse = IntentCompat.getParcelableExtra(
 | 
				
			||||||
            intent,
 | 
					            intent,
 | 
				
			||||||
            Constants.EXTRA_CAN,
 | 
					            Constants.EXTRA_CAN,
 | 
				
			||||||
@@ -298,19 +312,103 @@ class CanPaymentActivity : BaseActivity<ActivityCanPaymentBinding>(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            val webView: WebView = binding.webviewPayverse
 | 
					            val webView: WebView = binding.webviewPayverse
 | 
				
			||||||
            webView.visibility = View.VISIBLE
 | 
					            webView.visibility = View.VISIBLE
 | 
				
			||||||
 | 
					            webView.settings.allowFileAccess = false
 | 
				
			||||||
 | 
					            webView.settings.allowContentAccess = false
 | 
				
			||||||
 | 
					            webView.settings.displayZoomControls = false
 | 
				
			||||||
 | 
					            webView.settings.cacheMode = WebSettings.LOAD_NO_CACHE
 | 
				
			||||||
 | 
					            webView.settings.domStorageEnabled = true
 | 
				
			||||||
            webView.settings.javaScriptEnabled = true
 | 
					            webView.settings.javaScriptEnabled = true
 | 
				
			||||||
 | 
					            webView.settings.javaScriptCanOpenWindowsAutomatically = true
 | 
				
			||||||
 | 
					            webView.settings.loadsImagesAutomatically = true
 | 
				
			||||||
 | 
					            webView.settings.loadWithOverviewMode = true
 | 
				
			||||||
 | 
					            webView.settings.useWideViewPort = true
 | 
				
			||||||
 | 
					            webView.settings.setSupportMultipleWindows(true)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            webView.webViewClient = object : WebViewClient() {
 | 
					            webView.webViewClient = object : WebViewClient() {
 | 
				
			||||||
 | 
					                override fun onReceivedError(
 | 
				
			||||||
 | 
					                    view: WebView?,
 | 
				
			||||||
 | 
					                    request: WebResourceRequest?,
 | 
				
			||||||
 | 
					                    error: WebResourceError?
 | 
				
			||||||
 | 
					                ) {
 | 
				
			||||||
 | 
					                    loadingDialog.dismiss()
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                override fun onReceivedError(
 | 
				
			||||||
 | 
					                    view: WebView?,
 | 
				
			||||||
 | 
					                    errorCode: Int,
 | 
				
			||||||
 | 
					                    description: String?,
 | 
				
			||||||
 | 
					                    failingUrl: String?
 | 
				
			||||||
 | 
					                ) {
 | 
				
			||||||
 | 
					                    loadingDialog.dismiss()
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                override fun onPageFinished(view: WebView, url: String) {
 | 
					                override fun onPageFinished(view: WebView, url: String) {
 | 
				
			||||||
                    super.onPageFinished(view, url)
 | 
					                    super.onPageFinished(view, url)
 | 
				
			||||||
 | 
					                    loadingDialog.dismiss()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if (
 | 
				
			||||||
 | 
					                        url == "file:///android_asset/payverse_starter_debug.html" ||
 | 
				
			||||||
 | 
					                        url == "file:///android_asset/payverse_starter.html"
 | 
				
			||||||
 | 
					                    ) {
 | 
				
			||||||
                        val escaped = JSONObject.quote(jsonForJs)
 | 
					                        val escaped = JSONObject.quote(jsonForJs)
 | 
				
			||||||
                        view.evaluateJavascript("startPay($escaped)", null)
 | 
					                        view.evaluateJavascript("startPay($escaped)", null)
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
 | 
				
			||||||
 | 
					                    super.onPageStarted(view, url, favicon)
 | 
				
			||||||
 | 
					                    loadingDialog.show(screenWidth)
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                override fun shouldOverrideUrlLoading(
 | 
					                override fun shouldOverrideUrlLoading(
 | 
				
			||||||
                    view: WebView,
 | 
					                    view: WebView,
 | 
				
			||||||
                    request: WebResourceRequest
 | 
					                    request: WebResourceRequest
 | 
				
			||||||
                ): Boolean {
 | 
					                ): Boolean {
 | 
				
			||||||
                    val url = request.url.toString()
 | 
					                    val url = request.url.toString()
 | 
				
			||||||
 | 
					                    return handleUrl(view, url)
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                @Deprecated("Deprecated in Java")
 | 
				
			||||||
 | 
					                @Suppress("DEPRECATION")
 | 
				
			||||||
 | 
					                override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
 | 
				
			||||||
 | 
					                    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
 | 
				
			||||||
 | 
					                        return handleUrl(view, url)
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    return super.shouldOverrideUrlLoading(view, url)
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            webView.webChromeClient = object : WebChromeClient() {
 | 
				
			||||||
 | 
					                override fun onProgressChanged(view: WebView?, newProgress: Int) {
 | 
				
			||||||
 | 
					                    if (newProgress >= 100) {
 | 
				
			||||||
 | 
					                        loadingDialog.dismiss()
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (BuildConfig.DEBUG && appScheme.contains("test", ignoreCase = true)) {
 | 
				
			||||||
 | 
					                webView.loadUrl("file:///android_asset/payverse_starter_debug.html")
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                webView.loadUrl("file:///android_asset/payverse_starter.html")
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        } catch (e: Exception) {
 | 
				
			||||||
 | 
					            Logger.e(e.message ?: "payverse start error")
 | 
				
			||||||
 | 
					            Toast.makeText(
 | 
				
			||||||
 | 
					                applicationContext,
 | 
				
			||||||
 | 
					                "결제 초기화에 실패했습니다.",
 | 
				
			||||||
 | 
					                Toast.LENGTH_LONG
 | 
				
			||||||
 | 
					            ).show()
 | 
				
			||||||
 | 
					            binding.webviewPayverse.visibility = View.GONE
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    override fun onNewIntent(intent: Intent?) {
 | 
				
			||||||
 | 
					        super.onNewIntent(intent)
 | 
				
			||||||
 | 
					        intent?.data?.let { handlePayverseDeeplink(it) }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private fun handleUrl(view: WebView, url: String): Boolean {
 | 
				
			||||||
 | 
					        val appScheme = BuildConfig.APPSCHEME
 | 
				
			||||||
        if (url.startsWith("$appScheme://")) {
 | 
					        if (url.startsWith("$appScheme://")) {
 | 
				
			||||||
            startActivity(Intent(Intent.ACTION_VIEW, url.toUri()))
 | 
					            startActivity(Intent(Intent.ACTION_VIEW, url.toUri()))
 | 
				
			||||||
            return true
 | 
					            return true
 | 
				
			||||||
@@ -325,23 +423,6 @@ class CanPaymentActivity : BaseActivity<ActivityCanPaymentBinding>(
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        return BootpayUrlHelper.shouldOverrideUrlLoading(view, url)
 | 
					        return BootpayUrlHelper.shouldOverrideUrlLoading(view, url)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if (BuildConfig.DEBUG && appScheme.contains("test", ignoreCase = true)) {
 | 
					 | 
				
			||||||
                webView.loadUrl("file:///android_asset/payverse_starter_debug.html")
 | 
					 | 
				
			||||||
            } else {
 | 
					 | 
				
			||||||
                webView.loadUrl("file:///android_asset/payverse_starter.html")
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        } catch (e: Exception) {
 | 
					 | 
				
			||||||
            Logger.e(e.message ?: "payverse start error")
 | 
					 | 
				
			||||||
            Toast.makeText(applicationContext, "결제 초기화에 실패했습니다.", Toast.LENGTH_LONG).show()
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    override fun onNewIntent(intent: Intent?) {
 | 
					 | 
				
			||||||
        super.onNewIntent(intent)
 | 
					 | 
				
			||||||
        intent?.data?.let { handlePayverseDeeplink(it) }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private fun handlePayverseDeeplink(uri: Uri) {
 | 
					    private fun handlePayverseDeeplink(uri: Uri) {
 | 
				
			||||||
        val resultStatus = uri.getQueryParameter("resultStatus")
 | 
					        val resultStatus = uri.getQueryParameter("resultStatus")
 | 
				
			||||||
@@ -372,6 +453,7 @@ class CanPaymentActivity : BaseActivity<ActivityCanPaymentBinding>(
 | 
				
			|||||||
            },
 | 
					            },
 | 
				
			||||||
            onFailure = {
 | 
					            onFailure = {
 | 
				
			||||||
                Toast.makeText(applicationContext, it, Toast.LENGTH_LONG).show()
 | 
					                Toast.makeText(applicationContext, it, Toast.LENGTH_LONG).show()
 | 
				
			||||||
 | 
					                binding.webviewPayverse.visibility = View.GONE
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user