flutter - 将 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 扩展,但我认为这不是正确的解决方案。
解决方案
我不知道你是否可以在使用颤振时执行本机 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>
推荐阅读
- dependencies - DDD驱动的解决方案结构
- javascript - 是否有任何 javascript 库可以使用网络摄像头检测图像?如果是,那么继续执行一项功能?
- xamarin.forms - Xamarin 表单自定义控件仅在更改 ItemSelected 时通知模型
- html - 404文件夹外的链接
- php - 登录站点的 PHP 会话 - 理论
- c# - 尝试处理菜单和电影
- docker - Kubernetes Hostalias 重定向到没有请求标头的 Kubernetes 服务
- eclipse - Eclipse 初学者问题 - 通过文件资源管理器的 SSH shell 未按预期工作
- amazon-web-services - 如何设计关键模式以使每个应用程序只有一个 DynamoDB 表?
- cordova - 如何使threejs画布不被键盘调整大小