Bladeren bron

糖豆兑换金币以及添加调试日志

tianka 4 dagen geleden
bovenliggende
commit
31c1e1e96f

+ 4 - 3
baselibrary/src/main/java/com/yc/baselibrary/view/X5WebView.kt

@@ -12,6 +12,7 @@ import android.view.MotionEvent
 import android.view.View
 import android.view.ViewGroup
 import android.widget.ProgressBar
+import androidx.core.content.ContextCompat
 import com.tencent.smtt.sdk.*
 import com.yc.baselibrary.R
 import java.util.*
@@ -53,7 +54,7 @@ class X5WebView : WebView {
 //      setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);//滚动条在WebView外侧显示
         progressBar = ProgressBar(context, null, android.R.attr.progressBarStyleHorizontal)
         progressBar!!.max = 100
-        progressBar!!.progressDrawable = this.resources.getDrawable(R.drawable.color_progressbar)
+        progressBar!!.progressDrawable = ContextCompat.getDrawable(context, R.drawable.color_progressbar)
         addView(progressBar, LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 6))
         //        imageView = new ImageView(getContext());
 //        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
@@ -66,7 +67,7 @@ class X5WebView : WebView {
 
     //   基本的WebViewSetting
     fun initWebViewSettings() {
-        setBackgroundColor(resources.getColor(android.R.color.white))
+        setBackgroundColor(ContextCompat.getColor(context, android.R.color.white))
         webViewClient = client
         webChromeClient = chromeClient
         setDownloadListener(downloadListener)
@@ -189,4 +190,4 @@ class X5WebView : WebView {
 
 
 
-}
+}

+ 95 - 3
baselibrary/src/main/java/com/yc/baselibrary/view/webview/WebViewActivity.kt

@@ -12,13 +12,22 @@ import android.os.Build
 import android.os.Environment
 import android.os.SystemClock
 import android.text.TextUtils
+import android.util.Log
 import android.view.KeyEvent
 import android.webkit.WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
 import android.widget.Toast
 import androidx.core.content.FileProvider
 import androidx.lifecycle.Observer
+import com.tencent.smtt.export.external.interfaces.ConsoleMessage
+import com.tencent.smtt.export.external.interfaces.SslError
+import com.tencent.smtt.export.external.interfaces.SslErrorHandler
+import com.tencent.smtt.export.external.interfaces.WebResourceError
+import com.tencent.smtt.export.external.interfaces.WebResourceRequest
+import com.tencent.smtt.export.external.interfaces.WebResourceResponse
 import com.tencent.smtt.sdk.ValueCallback
 import com.tencent.smtt.sdk.WebChromeClient
+import com.tencent.smtt.sdk.WebView
+import com.tencent.smtt.sdk.WebViewClient
 import com.xueyu.kotlinextlibrary.string
 import com.yc.baselibrary.R
 import com.yc.baselibrary.event.LiveBusEvent
@@ -37,6 +46,7 @@ import java.io.File
 class WebViewActivity : BaseActivity<WebViewVm>(), OpenFileChooserCallBack {
 
     override fun getLayoutId() = R.layout.base_activity_webview
+    private val TAG = "WebViewActivity"
     private val REQUEST_CODE_PICK_IMAGE = 1
     private val REQUEST_CODE_TAKE_PHOTO = 2
     private val REQUEST_CODE_PICK_FILE = 3
@@ -51,6 +61,13 @@ class WebViewActivity : BaseActivity<WebViewVm>(), OpenFileChooserCallBack {
     private var imageUri: Uri? = null
     private var fromType: Int = 0
 
+    private fun maskUrl(raw: String?): String {
+        if (raw.isNullOrBlank()) return raw.orEmpty()
+        return raw
+            .replace(Regex("([?&])token=[^&#]*"), "$1token=***")
+            .replace(Regex("([?&])gtoken=[^&#]*"), "$1gtoken=***")
+    }
+
     override fun initView() {
         this.window.decorView.systemUiVisibility = android.view.View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
         titleBar.setTitle(viewModel.h5Title)
@@ -61,6 +78,8 @@ class WebViewActivity : BaseActivity<WebViewVm>(), OpenFileChooserCallBack {
         val url = intent?.getStringExtra(WebViewVm.H5_URL)
         val title = intent?.getStringExtra(WebViewVm.H5_TITLE)
         fromType = intent?.getIntExtra(WebViewVm.FROM_TYPE, 0) ?: 0
+        val isNoToken = intent?.getBooleanExtra(WebViewVm.IS_NO_TOKEN, false) ?: false
+        Log.i(TAG, "openWebView title=$title fromType=$fromType isNoToken=$isNoToken url=${maskUrl(url)}")
         setValue(WebViewVm.H5_URL to url, WebViewVm.H5_TITLE to title)
         titleBar.setWebCloseOnClickListener {
             if (webView.canGoBack()) {
@@ -85,7 +104,79 @@ class WebViewActivity : BaseActivity<WebViewVm>(), OpenFileChooserCallBack {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
             webView.settings.setMixedContentMode(MIXED_CONTENT_ALWAYS_ALLOW);
         }
-        webView.webChromeClient = ReWebChromeClient(this)
+        webView.webChromeClient = object : ReWebChromeClient(this) {
+            override fun onConsoleMessage(consoleMessage: ConsoleMessage?): Boolean {
+                val msg = consoleMessage?.message().orEmpty()
+                val source = consoleMessage?.sourceId().orEmpty()
+                val line = consoleMessage?.lineNumber() ?: -1
+                Log.d(TAG, "console line=$line source=$source msg=$msg")
+                return super.onConsoleMessage(consoleMessage)
+            }
+
+            override fun onReceivedTitle(view: WebView?, title: String?) {
+                Log.i(TAG, "onReceivedTitle title=$title url=${maskUrl(view?.url)}")
+                super.onReceivedTitle(view, title)
+            }
+
+            override fun onProgressChanged(view: WebView?, newProgress: Int) {
+                if (newProgress == 10 || newProgress == 30 || newProgress == 50 || newProgress == 80 || newProgress == 100) {
+                    Log.d(TAG, "onProgressChanged progress=$newProgress url=${maskUrl(view?.url)}")
+                }
+                super.onProgressChanged(view, newProgress)
+            }
+        }
+        webView.webViewClient = object : WebViewClient() {
+            override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
+                Log.i(TAG, "shouldOverrideUrlLoading url=${maskUrl(url)}")
+                return super.shouldOverrideUrlLoading(view, url)
+            }
+
+            override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
+                val reqUrl = request?.url?.toString()
+                Log.i(TAG, "shouldOverrideUrlLoading(request) url=${maskUrl(reqUrl)} method=${request?.method}")
+                return super.shouldOverrideUrlLoading(view, request)
+            }
+
+            override fun onPageStarted(view: WebView?, url: String?, favicon: android.graphics.Bitmap?) {
+                Log.i(TAG, "onPageStarted url=${maskUrl(url)}")
+                super.onPageStarted(view, url, favicon)
+            }
+
+            override fun onPageFinished(view: WebView?, url: String?) {
+                Log.i(TAG, "onPageFinished url=${maskUrl(url)}")
+                super.onPageFinished(view, url)
+            }
+
+            override fun onReceivedError(view: WebView?, request: WebResourceRequest?, error: WebResourceError?) {
+                val reqUrl = request?.url?.toString()
+                val isMainFrame = request?.isForMainFrame ?: false
+                Log.e(
+                    TAG,
+                    "onReceivedError(main=$isMainFrame) url=${maskUrl(reqUrl)} code=${error?.errorCode} desc=${error?.description}"
+                )
+                super.onReceivedError(view, request, error)
+            }
+
+            override fun onReceivedError(view: WebView?, errorCode: Int, description: String?, failingUrl: String?) {
+                Log.e(TAG, "onReceivedError(deprecated) code=$errorCode desc=$description url=${maskUrl(failingUrl)}")
+                super.onReceivedError(view, errorCode, description, failingUrl)
+            }
+
+            override fun onReceivedHttpError(view: WebView?, request: WebResourceRequest?, errorResponse: WebResourceResponse?) {
+                val reqUrl = request?.url?.toString()
+                val isMainFrame = request?.isForMainFrame ?: false
+                Log.e(
+                    TAG,
+                    "onReceivedHttpError(main=$isMainFrame) url=${maskUrl(reqUrl)} status=${errorResponse?.statusCode} reason=${errorResponse?.reasonPhrase}"
+                )
+                super.onReceivedHttpError(view, request, errorResponse)
+            }
+
+            override fun onReceivedSslError(view: WebView?, handler: SslErrorHandler?, error: SslError?) {
+                Log.e(TAG, "onReceivedSslError url=${maskUrl(view?.url)} primaryError=${error?.primaryError}")
+                super.onReceivedSslError(view, handler, error)
+            }
+        }
 
     }
 
@@ -95,7 +186,8 @@ class WebViewActivity : BaseActivity<WebViewVm>(), OpenFileChooserCallBack {
 
     override fun observe() {
         viewModel.isFetch.observe(this, Observer {
-            webView.loadUrl(viewModel.h5Url)
+            Log.i(TAG, "loadUrl url=${maskUrl(viewModel.h5Url)}")
+            webView.loadUrl(viewModel.h5Url ?: "")
         })
     }
 
@@ -494,4 +586,4 @@ class WebViewActivity : BaseActivity<WebViewVm>(), OpenFileChooserCallBack {
         return true
     }
 
-}
+}

+ 17 - 1
baselibrary/src/main/java/com/yc/baselibrary/view/webview/WebViewVm.kt

@@ -1,6 +1,7 @@
 package com.yc.baselibrary.view.webview
 
 import android.app.Application
+import android.util.Log
 import androidx.lifecycle.MutableLiveData
 import androidx.lifecycle.SavedStateHandle
 import com.yc.baselibrary.api.WebService
@@ -18,6 +19,7 @@ class WebViewVm(
 ): BaseVm(app,map,savedStateHandle) {
 
     companion object{
+        private const val TAG = "WebViewVm"
         const val H5_URL = "h5_url" //
         const val H5_TITLE = "h5_title"
         const val FROM_TYPE = "from_type"
@@ -29,20 +31,34 @@ class WebViewVm(
     val isFetch = MutableLiveData<Boolean>()
     private val retrofit by lazyRetrofit<WebService>()
 
+    private fun maskUrl(raw: String?): String {
+        if (raw.isNullOrBlank()) return raw.orEmpty()
+        return raw
+            .replace(Regex("([?&])token=[^&#]*"), "$1token=***")
+            .replace(Regex("([?&])gtoken=[^&#]*"), "$1gtoken=***")
+    }
+
     fun getH5Token() {
         if (isNoToken == true){
+            Log.i(TAG, "getH5Token skip(isNoToken=true) h5Url=${maskUrl(h5Url)}")
             isFetch.value = true
         }else{
+            Log.i(TAG, "getH5Token start h5Url=${maskUrl(h5Url)}")
             requestMix({
                 retrofit.getH5Token().check()
             }){
                 setLoadingType(LoadingType.NONE)
                 success {
+                    val tokenLen = it?.length ?: 0
                     h5Url += "?token=${it}"
+                    Log.i(TAG, "getH5Token success tokenLen=$tokenLen h5Url=${maskUrl(h5Url)}")
                     isFetch.value = true
                 }
+                error { e ->
+                    Log.e(TAG, "getH5Token fail h5Url=${maskUrl(h5Url)} err=${e.message}", e)
+                }
             }
         }
 
     }
-}
+}

+ 2 - 0
module_me/src/main/java/com/mita/module_me/view/MeFragment.kt

@@ -2,6 +2,7 @@ package com.mita.module_me.view
 
 import android.content.Intent
 import android.graphics.Bitmap
+import android.util.Log
 import android.view.Gravity
 import androidx.lifecycle.Observer
 import androidx.recyclerview.widget.LinearLayoutManager
@@ -176,6 +177,7 @@ class MeFragment : BaseFragment<MeViewModel>() {
         }
         tv_candy_count.text = NumString.convertInt4(LiveSession.getUser()?.getTotalOtayonii ?: 0)
         cl_candy.setOnClickListener {
+            Log.i("MeFragment", "clickCandyExchange url=$OTAYONII_EXCHANGE")
             context?.launchActivity<WebViewActivity> {
                 putExtra(WebViewVm.H5_URL, OTAYONII_EXCHANGE)
                 putExtra(WebViewVm.H5_TITLE, "兑换")