本机应用程序和Chrome自定义标签(CCT)之间的通信

时间:2019-07-11 05:07:10

标签: javascript android google-chrome-extension webview chrome-custom-tabs

当我使用Android WebView时,有几种方法可以通过JS interface调用以及JS Injection调用在Web应用程序和本机之间进行通信。我想知道是否有任何方式可以在Android本机应用程序和Chrome Custom Tab (CCT)之间进行通信吗?

出于安全原因,我知道Google并未在CCTTWA中添加桥接功能。但是在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时,它不会打开我的活动。其开放的谷歌搜索。

更新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指导我前进。

1 个答案:

答案 0 :(得分:1)

有一个不错的教程here,它显示了如何逐步创建它。

  1. 创建新的请求令牌
  2. 让用户授权请求令牌
  3. 使用授权的请求令牌创建新的会话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"/>