天道酬勤,学无止境

Google 的 Digital Asset Links 文件缓存机制可以被操纵吗?(Can Google's Digital Asset Links file caching mechanism be manipulated?)

问题

我注意到我的设备和托管在 https://example.com/.well-known/assetlinks.json 的 DAL 之间的缓存机制的影响,我想了解它是如何工作的,以及它是否可以被绕过.

问题是我正在对 DAL 的更改进行原型设计(特别是添加另一个应用程序,但出于问题的目的,更改在这里应该无关紧要),并且从应用程序的角度来看更改是不可见的。 例子:

  1. 我从这个 DAL 开始:
[
  {
    "relation": [
      "delegate_permission/common.handle_all_urls"
    ],
    "target": {
      "sha256_cert_fingerprints": [
        "<redacted>"
      ],
      "namespace": "android_app",
      "package_name": "com.my_app"
    }
  }
]
  1. 我安装了com.my_app ,验证成功。

  2. 我将 DAL 编辑为以下内容(注意添加了第二个应用程序条目):

[
  {
    "relation": [
      "delegate_permission/common.handle_all_urls"
    ],
    "target": {
      "sha256_cert_fingerprints": [
        "<redacted>"
      ],
      "namespace": "android_app",
      "package_name": "com.my_app"
    }
  },
  {
    "relation": [
      "delegate_permission/common.handle_all_urls"
    ],
    "target": {
      "sha256_cert_fingerprints": [
        "<redacted>"
      ],
      "namespace": "android_app",
      "package_name": "com.my_other_app"
    }
  }
]
  1. 我安装了com.my_other_app ,验证失败。
  2. 等待24小时,重新安装com.my_other_app ,验证成功。

使用 Google 的 Statement List Tester 也可以观察到同样的情况; 它将继续反映早期 DAL 的规范,最长可达 24 小时(因此问题不限于特定设备/它不是可以清除的设备上缓存层)。

这让我相信 Google 有一个语句列表测试器和 Android 设备都使用的 DAL 缓存。 由于我正在对更改进行原型设计以了解 DAL 的未记录行为,因此不得不等待任意长的时间会适得其反。

我的问题是:缓存持续时间是否已知,是否可以绕过、重置?

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Instant App - 数字资产链接协议(Instant App - Digital Asset Links Protocol)
    问题 每当我尝试将我的免安装应用 apk 上传到 Play 商店时,它都会出现以下错误: 您的网站“www.mywebsitename.com”尚未通过数字资产链接协议链接到您的应用。 请通过数字资产链接协议将您的网站链接到您的应用程序。 但是,每当我执行 https://developers.google.com/digital-asset-links/tools/generator 时,它都会成功与我的应用程序和网站相关联。 知道为什么我会收到此错误吗? 什么可能导致这种情况? 提前感谢您的帮助。 回答1 请检查 Google Play 管理中心是否启用了 Google Play App Signing。 如果启用了 Google Play App Signing,Google Play Console 会将您的应用密钥替换为发布密钥。 您在 Android Studio 上设置的密钥被视为上传密钥。 因此,您需要使用发布密钥修改您的assetlinks.json 。 回答2 当我从我的调试密钥而不是发布密钥生成一个 assetlinks.json 文件时,这发生在我身上。 它在 Android Studio 中显示为已验证,然后在服务器上失败。 仔细检查您的资产链接文件的签名配置是否正确,以及文件中的指纹是否与您的发布密钥的 SHA256 指纹匹配。
  • Android Studio 应用链接助手数字资产链接验证失败,nginx 服务器使用有效的 Letencrypt 证书(Android Studio app link assistant digital asset links verification failed with nginx server with valid letsencrypt certificate)
    问题 对于我的 android 应用项目,我想使用应用深层链接,使用应用链接助手。 我已经完成了以下步骤: 添加了 url 意图过滤器。 处理意图的逻辑关联网站 - 使用调试证书创建的 DAL 文件。 将文件另存为 assetlinks.json 将文件保存在我的服务器下 https://sub.subdomain.example.com/.well-known/assetlinks.json 该文件可通过浏览器访问。 但是当在 android studios 应用程序链接助手链接中测试并验证时,它给出错误“托管数字资产链接文件的网站必须支持具有有效证书的 HTTPS。请确保 DAL 文件可在 https://sub.sudomain 访问。 example.com/.well-known/assetlinks.json”。 我在服务器上使用以下配置: Ubuntu 16.04 PHP 7 通过letsencrypt.org生成SSL证书 SSL 配置中使用的 fullchain.pem 和 key.pem nginx/1.10.0 安卓工作室 2.3 有人可以指导可能出现的问题吗? 为什么android studio 应用助手不验证文件。
  • 跨多个应用的​​ Google Smart Lock(Google Smart Lock across multiple apps)
    问题 我一直试图让 Google 的 Smart Lock 在我拥有的两个应用程序之间工作(不幸的是使用不同的密钥库),但没有任何运气。 在 Smart Lock 中为一个应用程序 ( APP 1 ) 保存密码很简单,执行如下操作: Credential credential = new Credential.Builder(email) .setPassword(password) .build(); Auth.CredentialsApi.save(mCredentialsApiClient, credential).setResultCallback(... 但是,当我尝试在APP 2 中创建CredentialRequest ,它无法读取从APP 1保存的相同凭据。 我试过将accountType设置为它们之间的相同标识符,例如: Credential credential = new Credential.Builder(email) .setPassword(password) .setAccountType(ACCOUNT_TYPE) .build(); Auth.CredentialsApi.save(mCredentialsApiClient, credential).setResultCallback(... ... CredentialRequest
  • assetlinks.json 中的应用链接意图过滤器不适用于 Android(App links intent filters in assetlinks.json not working on Android)
    问题 我的应用程序定义了意图过滤器,以处理来自我的网站的URL,这些URL由 <intent-filter android:autoVerify="true"> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:host="www.host.com" android:scheme="http"/> </intent-filter> <intent-filter android:autoVerify="true"> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:host="www.host.com" android:scheme="https"/>
  • 使用 Xcode 资产目录缓存 UIImage(UIImage caching with Xcode Asset Catalogs)
    问题 我们都知道 UIImage 的imageNamed:方法神秘的幕后缓存机制。 在 Apple 的 UIImage 类参考中,它说: 在内存不足的情况下,可能会从 UIImage 对象中清除图像数据以释放系统内存。 这种清除行为仅影响 UIImage 对象内部存储的图像数据,而不影响对象本身。 当您尝试绘制数据已被清除的图像时,图像对象会自动从其原始文件重新加载数据。 然而,这个额外的加载步骤可能会导致小的性能损失。 实际上,图像数据不会像文档所建议的那样“从 UIImage 对象中清除以释放系统内存”。 相反,应用程序会收到内存警告,直到它“由于内存压力”退出。 编辑:在 Xcode 项目中使用传统图像文件引用时,UIImage 缓存工作正常。 只有当您过渡到资产目录时,内存才会被释放。 我用几个 UIImageViews 实现了一个 UIScrollView 来滚动一长串图像。 滚动时,下一个图像将被加载并分配给 UIImageView 的image属性,删除指向它之前一直持有的 UIImage 的强链接。 但是,由于imageNamed:的缓存机制,我很快就会耗尽内存,应用程序终止时分配了大约 170 MB 的内存。 当然,有很多有趣的解决方案可以实现自定义缓存机制,包括覆盖类别中的imageNamed:类方法。 通常
  • 一文读懂区块链领域最新发展方向 NFT经济将成未来发展方向
    区块链技术最广为人知的应用非比特币和以太币等加密货币莫属。用户可以在比特币和以太坊网络中绕过中间商直接转移价值。可编程智能合约的出现进一步拓展了区块链技术的应用场景,让所有人都能创建自己的同质化通证(比如稳定币),这类通证被普遍用于DeFi生态中。而非同质化通证(NFT, Non-Fungible tokens)则是这个领域的最新发展方向。NFT代表了某种独一无二的物品,比如数字艺术品、虚拟游戏物品、稀有收藏品或其他数字或实体资产。 美元这类同质化资产的特点是每一份资产都毫无差别且可互相替换。而NFT这类非同质化资产则不同,每一枚NFT都代表了某一具体资产的所有权,因此是独一无二的。资产所有权通过公共区块链网络进行验证和追踪,用户可以验证每枚NFT的真实性,并追踪溯源。因此,NFT最准确的定义是“由原创者发行的防伪证书”,可以利用加密技术证明NFT持有者对某一资产官方版本的所有权。 NFT拥有许多优势,比如艺术家可以将其数字艺术品变现;在游戏中创建可验证的游戏物品;打造全新的数字收藏品生态;以及将现实世界的资产变成通证,以提升流其动性等。本文将向大家介绍NFT的经济模式,探讨现存的各种NFT类型,并详解可验证随机数对稀有NFT资产的重要意义。 NFT经济的发展历程 2017年以太猫(CryptoKitties)发布后,NFT首次进入大众视野。以太猫是在以太坊上发布的一款去中心化应用
  • Google Play 应用签名和免安装应用(Google Play App Signing and Instant Apps)
    问题 相当直接的问题。 有谁知道 Google Play App Signing 是否支持 Instant Apps? 我问的原因: 输入您的应用程序的签名配置,或选择一个密钥库文件。 虽然可以在测试期间使用调试配置或密钥库,但生成的数字资产链接文件将与您的应用程序的发布版本不兼容。 如果您确实上传了使用调试配置或密钥库的数字资产链接文件,则在发布应用程序之前,您需要生成并上传使用应用程序发布密钥的新数字资产链接。 来自博客文章:- 如何创建即时应用功能 如果此声明属实,播放控制台是否提供了生成assetlinks.json ? 这是您必须在声称附属的域上托管的文件。 回答1 是的,Google Play 应用签名支持即时应用。 您将使用您的签名密钥而不是上传密钥,因为 Google Play 将使用签名密钥重新签署您的应用程序。 Android Studio 提供了一种生成 assetlinks.json 的方法,只需转到Tools > App Links Assistant > Associate Website ,然后您就可以选择正确的密钥库文件。 添加 Android 应用链接 > 将您的应用与您的网站相关联 您也可以通过 Statement List Generator 和 Tester 手动执行此操作 其他帖子也解决了这个问题 数字资产链接已通过 Android
  • 数字资产链接链接到我的网站(Digital Assets Link link to my website)
    问题 我创建了一个即时应用程序。 我将其上传到我的 Google 控制台,但出现此错误。 www.kochchy.cz 网站尚未通过数字资产链接协议链接到您的应用程序。 将应用程序站点与 Digital Assets Link 链接起来。 [{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.kochchy.instantapptest.app", "sha256_cert_fingerprints":["A4:A6:74:15:F1:3E:38:3F:93:0F:EF:E3:A6:86:8E:7C:25:45:E8:80:5B:5E:35:70:49:20:DB:F8:CB:D4:FC:E0"] } }] apk,即时和可安装都使用相同的 ID: com.kochchy.instantapptest.app (每个都在自己的模块清单中定义) 我的基本模块清单如下所示: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  • jQuery链接与下载?(jQuery Linking vs. Download?)
    问题 哪种方法更好? 要链接到jQuery Pack,请访问http://ajax.googleapis.com。 还是要下载适当的文件并在本地链接? 有关系吗? 链接是否有可能消失? 还是有可能在线更新文件,最好链接到该文件? 好奇的。 谢谢,特蕾西 回答1 在Google Code网站上: Google会尽一切努力与主要利益相关者直接合作,并接受最新稳定版本的发布。 一旦我们托管给定库的发行版,我们将致力于无限期托管该发行版。 Google托管jQuery库的主要要点之一是将它缓存在一个地方。 请考虑以下情形: 使用者造访网站A 站点A在同一域上具有jQuery,因此该文件由浏览器下载使用者造访网站B 站点B在同一域上具有jQuery,因此浏览器第二次下载了该文件。 现在,如果我们都从Google服务器中获取了jQuery,则场景如下所示: 使用者造访网站A 站点A从Google加载jQuery,因此由浏览器下载使用者造访网站B 站点B从Google加载了jQuery,但是浏览器已经下载并缓存了它,因此再次获取文件是即时的。 回答2 如果用户来自被禁止使用Google的国家怎么办? 另外,前一段时间,我们不得不为我国家的国际互联网流量付费(而区域流量是“免费”的),我怀疑在其他一些国家还是如此。 用户将不得不为jQuery付费而烦恼。 甚至最小化。
  • Can Google's Digital Asset Links file caching mechanism be manipulated?
    I am noticing the effects of a caching mechanism between my device & the DAL hosted at https://example.com/.well-known/assetlinks.json and I'm looking to understand how it works, and if it can be bypassed. The issue is that I'm prototyping changes to the DAL (specifically adding another app, but the change should be irrelevant here for the purpose of the question), and changes aren't visible from the app's perspective. Example: I start with this DAL: [ { "relation": [ "delegate_permission/common.handle_all_urls" ], "target": { "sha256_cert_fingerprints": [ "<redacted>" ], "namespace": "android
  • Instant App - Digital Asset Links Protocol
    Whenever I tried to upload my instant app apks to Play store, it gives the following error : Your site 'www.mywebsitename.com' has not been linked through the Digital Assets Link protocol to your app. Please link your site through the Digital Assets Link protocol to your app. However, whenever I execute https://developers.google.com/digital-asset-links/tools/generator, it gives success for associating with my app and web site. Any idea why am I getting this error? What may cause this? Thanks for help in advance.
  • Android Instant App - Play Console 发布/部署错误和 DAL(数字资产链接)未链接(Android Instant App - Play Console release/deploy error and DAL(digital Asset Link) not linked)
    问题 我想弄清楚为什么 Play 商店不接受我的即时应用程序构建。 我已成功向测试人员部署了Alpha常规应用程序版本,因为它是发布免安装应用程序的先决条件。 我正在尝试部署开发版即时应用程序。 我究竟做错了什么? 我试图添加尽可能多的细节。 我是否需要将以下链接中的 Digital Asset Link API 服务用于生产即时应用程序,还是用于其他用途? https://console.developers.google.com/apis/api/digitalassetlinks.googleapis.com/overview 将免安装应用程序版本上传到播放控制台时出现以下错误: 您的网站“example.com”尚未通过数字资产链接协议链接到您的应用。 请通过数字资产链接协议将您的网站链接到您的应用程序。 我有点困惑的一件事是为什么当我单击链接并验证时会收到错误消息“添加资产报表失败。 ”如下图所示: 我注意到当我单击链接并验证按钮时,它修改base 中的 strings.xml 文件并添加以下字符串: <string name="asset_statements" translatable="false">[{\n \"relation\": [\"delegate_permission/common.handle_all_urls\"],\n \"target\": {
  • Gmail的新图像缓存正在打破新闻简报中的图像链接(Gmail's new image caching is breaking image links in newsletter)
    问题 注册网站完成后,我收到了一些自动发送的电子邮件。 直到最近,他们的表现还不错。 现在,Google的新系统正在重写图像并将它们存储在缓存中(据说) 但是,Google对我的图片链接的新改写已完全破坏了它们,并给出了500个错误和一个损坏的链接图像。 可以说我的常规图片网址是: http://www.mysite.com/images/pic1.jpg Google将其重写为: https://ci5.googleusercontent.com/proxy/vI79kajdUGm6Wk-fjyicDLjZbCB1w9NfkoZ-zQFOB2OpJ1ILmSvfvHmE56r72us5mIuIXCFiO3V8rgkZOjfhghTH0R07BbcQy5g=s0-d-e1-ft#http://www.mysite.com/images/pic1.jpg 但是,该URL上没有任何内容。 因此,要么是由Google创建的链接有问题,要么是图像没有上传到googleusercontent服务器,但是我不知道如何解决该问题。 我在Amazon EC2上使用PHP,phpmailer库和Ubuntu服务器,但是我不确定与该问题有关。 回答1 我想我已经弄清楚了GoogleImageProxy问题。 这与CACHING概念有关。 假设您最近在服务器上部署了php代码,但是却忘记了上传图片。
  • RESTful编程到底是什么?(What exactly is RESTful programming?)
    问题 RESTful编程到底是什么? 回答1 一种称为REST(代表性状态转移)的架构风格主张Web应用程序应使用最初设想的HTTP。 查找应使用GET请求。 PUT,POST和DELETE请求应分别用于突变,创建和删除。 REST支持者倾向于使用URL,例如 http://myserver.com/catalog/item/1729 但是REST体系结构不需要这些“漂亮的URL”。 带有参数的GET请求 http://myserver.com/catalog?item=1729 就像RESTful一样。 请记住,决不要将GET请求用于更新信息。 例如,用于将商品添加到购物车的GET请求 http://myserver.com/addToCart?cart=314159&item=1729 不合适。 GET请求应该是幂等的。 也就是说,两次发出请求应该与一次发出请求没有什么不同。 这就是使请求可缓存的原因。 “添加到购物车”请求不是幂等的-发出两次请求会将该商品的两个副本添加到购物车。 在这种情况下,POST请求显然是适当的。 因此,即使是RESTful Web应用程序也需要其POST请求共享。 这摘自David M. Geary撰写的出色的《 Core JavaServer Faces》一书。 回答2 REST是Web的基础架构原理。 关于Web的神奇之处在于,客户端(浏览器
  • 无法显示缓存目录中的 3d 文件(Can't display 3d file from cache directory)
    问题 你能帮我确定这里的问题吗? 似乎我无法显示缓存目录中的 3d 文件。 我遇到此错误 SceneKit IO: 错误,此平台不支持 COLLADA 文件。 保存在缓存目录中的 zip 文件包含 .dae 文件和用于纹理的 .png。 使用场景套件,您可以: 导入 COLLADA 3D 对象并构建由相机、灯光和网格组成的场景。 https://developer.apple.com/library/mac/documentation/3DDrawing/Conceptual/SceneKit_PG/Introduction/Introduction.html 谢谢。 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(queue, ^{ NSURL *url = [NSURL URLWithString:@"my url" NSData *data = [NSData dataWithContentsOfURL:url options:0 error:&error]; if(!error) { NSArray *paths = NSSearchPathForDirectoriesInDomains
  • 禁用某些过滤器的Jinja模板缓存(Disable Jinja template caching for certain filter)
    问题 我们有一个自定义的Jinja过滤器,用于为Javascript和CSS资源创建缓存清除URL。 现在我们注意到,在生产环境中,最终的编译模板被缓存了。 由于我们的模板过滤器有时不会创建新的URL(例如,当模板未更改但Javascript更改时),因此这会导致问题。 有没有一种方法可以强制Jinja每次重新评估某个过滤器,而不缓存结果? 编辑1 :我们正在向过滤器使用常量输入(文件名)。 回答1 经过大量的Google搜索,我终于找到了真正的解决方案。 Jinja有一个名为contextfilter的特殊帮助器,您可以使用它来装饰您的函数,以使过滤器可以感知上下文(并取决于上下文)。 即使将常量作为输入传递,Jinja字节码缓存也不会缓存该计算值。 在Python的过滤器中: from jinja2 import contextfilter @contextfilter def asset_url(context, url): return some_url_thing(url) 在您的模板中: <link rel="stylesheet" href="{{ 'styles.css' | asset_url }}" /> 回答2 有一种方法可以禁用对特定过滤器结果的缓存:通过不使用常量输入,例如,将随机源公开为全局变量。 # Expose to Jinja from
  • 如何缓存Google地图图块以供离线使用?(How to cache Google map tiles for offline usage?)
    问题 就像诺基亚的OVI地图可以离线使用一样,也必须有某种方式来缓存Google地图图块。 有什么提示吗? 回答1 如果您尝试缓存Google服务的图块,则可能违反了Google的服务条款(除非在某些情况下,如果您购买了他们的企业Maps API Premier)。 这就是gmapcatcher将其划掉他们的名单的原因。 请参阅http://code.google.com/p/gmapcatcher/issues/detail?id=210。 在上面的gmapcatcher URL上,您还将找到一个可以下载图块的Shell脚本(或如此看来,其作者说)。 还有其他一些项目试图使Google Maps脱机使用: http://code.google.com/p/ogmaps/ http://code.google.com/p/gmapoffline/ 最后,如果Google Earth可以满足您的需求,那么您可以使用它。 根据http://www.google.com/permissions/geoguidelines.html,离线使用Google地球需要Google地球企业版许可。 请注意,上一页还说:“您不得从Google Maps或Earth抓取或导出内容,也不得将其保存供离线使用。” 因此,如果您尝试缓存图块,则几乎肯定会(无论如何被Google认为)违反了服务条款。 回答2
  • 浏览器本地存储(Application\Storage\Cache)
    浏览器本地存储 1.Application Cache应用程序缓存(manifest)2. Web Storage(Session Storage和Local Storage)3. 数据库(Web SQL Database和Indexed Database)4. Cache Storage 1.Application Cache应用程序缓存(manifest) 为了支持Web App离线而开发的应用程序缓存(Application Cache,App Cache)。该缓存类似于浏览器缓存,都是进行文件缓存,而且缓存文件有一定的更新机制。可以通过配置manifest文件来使用应用程序缓存,配置文件中包括CACHE、NETWORK和FALLBACK,CACHE用来指明缓存入口,NETWORK用来指明哪些资源必须在线访问,FALLBACK用来指明错误文件,如index.html无法访问时则用404.html代替。 这个过程中有几个问题需要注意: 如果服务器对离线的资源进行了更新,那么必须更新manifest文件之后这些资源才能被浏览器重新下载,如果只是更新了资源而没有更新manifest文件的话,浏览器并不会重新下载资源,也就是说还是使用原来离线存储的资源。 对于manifest文件进行缓存的时候需要十分小心,因为可能出现一种情况就是当对manifest文件进行了更新
  • 可以在SSL上使用gzip吗? 和连接:Keep-Alive标头(Can you use gzip over SSL? And Connection: Keep-Alive headers)
    问题 我正在这里评估安全(SSL)网络应用程序的前端性能,并且想知道是否可以通过SSL压缩文本文件(html / css / javascript)。 我已经进行了一些谷歌搜索,但是没有发现任何与SSL相关的东西。 如果可能的话,由于响应也被加密了,是否值得付出额外的CPU周期? 压缩响应会损害性能吗? 另外,我想确保我们保持SSL连接处于活动状态,因此我们不会一遍又一遍地进行SSL握手。 我没有在响应标题中看到Connection:Keep-Alive 。 我确实在请求标头中看到Keep-Alive:115,但这仅使连接保持活动状态115毫秒(似乎应用服务器在处理单个请求后关闭了连接?)您是否不想设置服务器只要会话不活动超时,该响应头就可以吗? 我了解浏览器不会将SSL内容缓存到磁盘,因此即使以后没有任何变化,我们也会在以后的访问中一遍又一遍地提供相同的文件。 主要的优化建议是减少http请求的数量,最小化,将脚本移至最底端,图像优化,可能的域分片(尽管需要权衡另一次SSL握手的成本),此类性质。 回答1 是的,可以在SSL上使用压缩。 它发生在数据加密之前,因此可以帮助解决慢速链接。 应该注意的是,这是一个坏主意:这还会打开一个漏洞。 初次握手后,SSL的开销比许多人想象的要少*-即使客户端重新连接,也存在一种机制,可以在不重新协商密钥的情况下继续现有会话
  • Google Play App Signing and Instant Apps
    Fairly straight forward question. Does anyone happen to know if Google Play App Signing supports Instant Apps? The reason I ask: Enter your app’s signing config, or select a keystore file. While it’s possible to use a debug config or keystore during testing, the generated Digital Asset Links file won’t be compatible with the release version of your app. If you do upload a Digital Asset Links file that uses a debug config or keystore, then before publishing your app you’ll need to generate and upload a new Digital Asset Links that uses your app’s release key. From Blog post:- How to Create an