当前位置: 首页 > 知识库问答 >
问题:

WebView中的Google Play未重定向

井疏珂
2023-03-14

我有打开Chrome并自动重定向到Android上的Play应用程序的Google Play链接:

https://play.google.com/store/apps/details?id=com.raongames.growcastle

我想通过在隐藏的网络视图上渲染直接重定向到Play app:

private fun openUrlForRedirection(linkToOffer: String) {
    loading = true
    webView.apply {
        setWebChromeClient(RedirectWebChromeClient(context))
        setWebViewClient(RedirectWebViewClient(::onRedirect, ::onRedirectionError))
        getSettings().apply {
            javaScriptEnabled = true
            javaScriptCanOpenWindowsAutomatically = true
            userAgentString = System.getProperty("http.agent")
            loadUrl(linkToOffer)
        }
    }
}

private fun onRedirect(str: String) {
    loading = false
    if (quest.pkg !in str) {
        installApp(quest.pkg)
    } else {
        openUrl(str)
    }
}

private fun onRedirectionError() {
    showAndLogError(UnknownError())
}

class RedirectWebChromeClient(val context: Context) : WebChromeClient() {

    override fun onJsAlert(webView: WebView, str: String, str2: String, jsResult: JsResult): Boolean {
        jsResult.cancel()
        return true
    }

    override fun onJsConfirm(webView: WebView, str: String, str2: String, jsResult: JsResult): Boolean {
        jsResult.cancel()
        return true
    }

    override fun onJsPrompt(webView: WebView, str: String, str2: String, str3: String, jsPromptResult: JsPromptResult): Boolean {
        jsPromptResult.cancel()
        return true
    }
}

class RedirectWebViewClient(
        private val onRedirect: (String) -> Unit,
        private val onError: () -> Unit
) : WebViewClient() {

    override fun onPageFinished(view: WebView, url: String) {
        info("Finished")
    }

    override fun onReceivedError(webView: WebView, i: Int, str: String, str2: String) {
        if (i != -10) {
            onError()
        }
    }

    @TargetApi(23)
    override fun onReceivedError(webView: WebView, webResourceRequest: WebResourceRequest, webResourceError: WebResourceError) {
        onReceivedError(webView, webResourceError.errorCode, webResourceError.description.toString(), webResourceRequest.url.toString())
    }

    @RequiresApi(api = 21)
    override fun shouldOverrideUrlLoading(webView: WebView, webResourceRequest: WebResourceRequest): Boolean {
        return shouldOverrideUrlLoading(webView, webResourceRequest.url.toString())
    }

    override fun shouldOverrideUrlLoading(webView: WebView, str: String): Boolean {
        onRedirect(str)
        return false
    }
}

但我没有使用重定向,而是在底部有一个按钮的Google Play网页进行重定向。

共有3个答案

宋正真
2023-03-14

不推荐使用webview,甚至可能在未来的某个时候停止工作。通过意图绝对是推荐的解决方案,并且对用户来说是更好的体验。

如果您需要跟踪链接,Google Play允许使用Firebase analytics通过Play应用程序跟踪安装。

章建木
2023-03-14
browser=(WebView)findViewById(R.id.webkit);

browser.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
// here do what you need with url
//for example use Intent to start google play 
//or simply call view.loadUrl(url); to prevent chrome from opening

         return(true);
         }
            });

shouldOverrideUrlLoading()返回true以指示它正在处理事件。

楚浩然
2023-03-14

像这样试试

  final String appPackageName = activity.getPackageName(); // getPackageName() from Context or Activity object
    try {
    //if you have playstore it's will navigate to playstore
        startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName)));
    } catch (android.content.ActivityNotFoundException anfe) {
        startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + appPackageName)));
    }
 类似资料:
  • 我在我的应用程序中有一个活动,其中有一个Webview,可以打开提供给它的URL,然后重定向到网站的登录页。我面临的问题是,一旦用户在登录页上,重定向就是相同的页面重定向,即如果登录页是 www.example。通信/着陆 重定向是 www.example。com/landing/#其他_页面 它不调用 onPageStarted(WebView视图、字符串url、位图favicon) 但是 网页

  • 在Android WebView中有没有拦截重定向请求的方法?似乎不应该调用InterceptRequest(WebView,WebResourceRequest)! 我希望通过以下方式自动捕获所有web视图请求中的令牌过期: 从服务器发出重定向而不是401 使用shouldOverrideUrlLoading()在需要登录的情况下调用AppAuth 使用shouldInterceptReques

  • 当我在web.php中定义了路由时,我在使用Laravel时遇到了一个路由未定义的错误,如下所示: 我正在从下面的代码重定向到路由 auth()代码可以工作,但当调用重定向时,我得到错误'route[home]not defined'。有没有人知道我怎么解决这个错误。任何帮助都会很好

  • 我正在尝试使用一个Android WebView中的Web语音合成API,我将其设置为WebChromeclient。但是,当我检查页面并运行以下命令时,每个命令都返回为false、false、false。 如果我在Android上使用Chrome检查一个页面,那么它会返回true、true、false。 谢谢

  • 本文向大家介绍Android Webview重定向问题解决方法,包括了Android Webview重定向问题解决方法的使用技巧和注意事项,需要的朋友参考一下 项目中需要webview重定向,但是由于一个webveiw里面有许多加载操作,因此在调用webview。goback()方法时,往往达不到我们需要的操作效果。 1.解决方法 WebBackForwardList webBackForward

  • 我有这个密码。 我正在加载这个url