当我使用 Android WebView
时,有多种方法可以通过 JS interface
调用以及 JS Injection
调用在 web-app 和 native 之间进行通信.我想知道是否有任何解决方法可以通过任何方式在 Android 原生应用和 Chrome 自定义标签 (CCT)
之间进行通信?
我知道出于安全原因,Google 没有在 CCT
和 TWA
中添加桥接功能。但是在Google I/O ,他们声明Web/Native bridging
的方式有限(引用下图)。我想知道有哪些方法以及在哪里可以找到有关这些有限桥接的指南?
更新1
<activity android:name=".activities.MyResultActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="abc"
android:host="abc.oauth.com" />
</intent-filter>
</activity>
当我在浏览器中调用 abc://abc.oauth.com
时,它不会打开我的 Activity 。它的开放谷歌搜索。
更新2
最后我用下面的代码成功地得到了查询参数键/值,
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.d(classTag, "MyResultActivity activity is called")
intent?.data?.let {
for (key in it.queryParameterNames) {
val value = it.getQueryParameter(key)
Log.d(classTag, "MyResultActivity param key: $key, value: $value")
}
}
}
非常感谢@Rahul 指导我前进。
最佳答案
有一个很好的教程here其中显示了如何逐步创建它。
- 创建一个新的请求 token
- 让用户授权请求 token
- 使用授权的请求 token 创建一个新的 session ID
整个事情背后的主要思想是Intent-Filters与类别 browseable每当调用重定向 URL 时都会调用它。
<intent-filter android:label="@string/filter_view_http_gizmos">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="callback_param"
android:scheme="anything"/>
关于javascript - Native App 和 Chrome Custom Tab (CCT) 之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56981955/