首页 > 解决方案 > 将 Intent 网址转换为 Android Intent

问题描述

我目前在我的应用程序中集成了一个 webview (webview_flutter: 2.0.4) 用于支付流程。不幸的是,在某些时候会启动以下网址:

intent://payment#Intent;action=ch.twint.action.TWINT_PAYMENT;scheme=twint;S.code=18223;S.startingOrigin=EXTERNAL_WEB_BROWSER;S.browser_fallback_url=;end

这个 URL 应该启动“twint”应用程序(瑞士支付解决方案)不幸的是它不起作用所以我试图重新创建相应的 android 意图(android_intent:2.0.0)但我不能。

任何人都可以帮助我或任何其他解决方案的想法吗?

我也尝试了 url_launcher 扩展,但我认为这不是正确的解决方案。

标签: flutterandroid-intentwebview-flutter

解决方案


我不知道你是否可以在使用颤振时执行本机 kotlin/java 代码,但这可以通过使用以下代码(取自https://stackoverflow.com/a/35612860 )来解决(本机):

override fun shouldOverrideUrlLoading(view: WebView?, url: String): Boolean {

        if (url.startsWith("intent://")) {
            val intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
            return if (intent.resolveActivity(context.packageManager) != null) {
                context.startActivity(intent)
                true
            } else {
                // handle error, e.g. open playstore
                true
            }
        }
        /* 
          Rest of override url handling
          ...
        */
    }

在 Android API 30+intent.resolveActivity上,如果您的 中有以下条目,则只会检测已安装的 twint 应用程序AndroidManifest.xml

<queries>
    <intent>
        <action android:name="ch.twint.action.TWINT_PAYMENT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="twint" />
    </intent>
</queries>

推荐阅读