将 Intent Web url 转换为 Android Intent
Convert intent web url to Android Intent
我目前在我的付款流程应用程序中集成了一个 webview (webview_flutter: 2.0.4)。
不幸的是,在某些时候启动了以下 url:
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 扩展,但我认为这不是正确的解决方案。
我不知道你在使用flutter时是否可以执行原生kotlin/java代码,但这可以通过使用以下代码(取自)(原生)解决:
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
...
*/
}
On Android API 30+ intent.resolveActivity
如果您在 AndroidManifest.xml
中有以下条目,则只会检测已安装的 twint 应用程序:
<queries>
<intent>
<action android:name="ch.twint.action.TWINT_PAYMENT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="twint" />
</intent>
</queries>
我目前在我的付款流程应用程序中集成了一个 webview (webview_flutter: 2.0.4)。 不幸的是,在某些时候启动了以下 url:
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 扩展,但我认为这不是正确的解决方案。
我不知道你在使用flutter时是否可以执行原生kotlin/java代码,但这可以通过使用以下代码(取自)(原生)解决:
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
...
*/
}
On Android API 30+ intent.resolveActivity
如果您在 AndroidManifest.xml
中有以下条目,则只会检测已安装的 twint 应用程序:
<queries>
<intent>
<action android:name="ch.twint.action.TWINT_PAYMENT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="twint" />
</intent>
</queries>