英文:
Android- EXTRA_HEADERS is not reflecting in updated Chrome version greater than 83
问题
之前传递给customTabsIntent.intent.putExtra(Browser.EXTRA_HEADERS, headers)
的EXTRA_HEADERS
在Chrome更新到83之前是正常工作的。更新后,不再传递头部数据。
public static void startCustomTab(String url, Context context) {
CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
builder.setShowTitle(true);
CustomTabsIntent customTabsIntent = builder.build();
Bundle headers = new Bundle();
headers.putString(context.getString(R.string.type), "android");
headers.putString(context.getString(R.string.source), "app");
customTabsIntent.intent.putExtra(Browser.EXTRA_HEADERS, headers);
customTabsIntent.intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
customTabsIntent.launchUrl(context, Uri.parse(url));
}
英文:
Earlier the EXTRA_HEADERS passed to the customTabsIntent.intent.putExtra(Browser.EXTRA_HEADERS, headers), was working fine. After Chrome updated to 83, it stopped passing the header data.
public static void startCustomTab(String url, Context context) {
CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
CustomTabsIntent customTabsIntent = builder.build();
builder.setShowTitle(true);
Bundle headers = new Bundle();
headers.putString(context.getString(R.string.type), "android");
headers.putString(context.getString(R.string.source), "app");
customTabsIntent.intent.putExtra(Browser.EXTRA_HEADERS, headers);
customTabsIntent.intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
customTabsIntent.launchUrl(context, Uri.parse(url));
}
答案1
得分: 3
自定义标头的添加已被删除,因为它是一种漏洞。跨源资源共享(CORS)白名单请求标头仍然受支持。您可以在此处阅读更多关于此更改的信息:http://crbug.com/873178
英文:
Adding custom headers was removed due to being a vulnerability. CORS safe-listed request headers are still supported. You can read more about this change here: http://crbug.com/873178
答案2
得分: 3
我想详细说明一下接受的答案。 Chrome 83确实删除了添加自定义标头的可能性,但Chrome 86在某些严格条件下恢复了此功能。请参阅https://developers.google.com/web/android/custom-tabs/headers。只需按照https://github.com/GoogleChrome/android-browser-helper/tree/master/demos/custom-tabs-headers中的示例进行操作。
TD;DR - 您必须拥有应用程序和网站,以使其在应用程序和数字资产链接协议文件(网站地址 (...)/.well-known/assetlinks.json)中的更改生效。
请确保按照教程和示例精确执行。在我的情况下,我遇到了一个细节问题 - CustomTabsIntent
Builder需要设置一个CustomTabsSession
对象。
在Chromium项目中引入更改的代码更改可以在此处找到:https://chromium-review.googlesource.com/c/chromium/src/+/2311582
英文:
I'd like to elaborate a bit on the accepted answer. The Chrome 83 indeed removed the possibility to add custom headers, yet Chrome 86 reverted this functionality under certain strict conditions. See https://developers.google.com/web/android/custom-tabs/headers. Just follow an example from https://github.com/GoogleChrome/android-browser-helper/tree/master/demos/custom-tabs-headers.
TD;DR - you must own both app and website for making it work as the changes in app and The Digital Asset Links protocol file (website address (...)/.well-known/assetlinks.json) are needed.
Be sure to follow the tutorial and example precisely. In my case I stumbled with the one detail - CustomTabsIntent
Builder needs a CustomTabsSession
object set up.
Code changes in Chromium project indroducing a change can be found here: https://chromium-review.googlesource.com/c/chromium/src/+/2311582
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论