我需要在AppEngine Web App中包含 .well-known / assetlinks.json 文件。必须按照此处https://developer.android.com/training/app-links/index.html
所述为我的Android应用启用应用链接我在appengine-web.xml文件中添加了这一行
<static-files>
<include path=".well-known/assetlinks.json"/>
</static-files>
问题在于它适用于本地
http://localhost:8384/.well-known/assetlinks.json
但不是在部署网络应用时,它返回 404错误。
http://www.example.com/.well-known/assetlinks.json
我想这可能是一个安全限制,但我在Google云端平台控制台的任何地方都看了一眼,但我没有找到任何相关信息。
有人能解决这个问题吗? 谢谢
答案 0 :(得分:1)
<static-files>
和<mime-mapping>
需要进入 appengine-web.xml ,而不是web.xml。请参阅文档&#39; appengine-web.xml Reference&#39;详情。
答案 1 :(得分:0)
在过去,我遇到过类似的东西,尽管有python运行时。
这通常发生在上传/部署应用引擎应用的过程中,无法准确猜出正确的MIME类型。该文件最终被部署为常规二进制文件application/octect
(或根本没有?)。您可以从部署日志中确认是否属于这种情况。
如果是这样,您必须在json
文件中为web.xml
提供MIME type
<mime-mapping>
<extension>json</extension>
<mime-type>application/json</mime-type>
</mime-mapping>
答案 2 :(得分:0)
仍然,如所提到的页面所述,在“HTML.xml静态文件的类型”段落中,在web.xml中设置MIME类型关联:“默认情况下,静态文件使用基于文件扩展名。您可以使用元素将自定义MIME类型与web.xml中的静态文件的文件扩展名相关联。“
答案 3 :(得分:0)
AppEngine不喜欢目录名开头的.
(我尝试在 appengine-web.xml 文件中使用几种组合,甚至使用<include path="**assetlinks.json" expiration="365d" />
没有运气)。有趣的是,在开发服务器(Eclipse + Windows 10)上运行时,它运行良好。只有在部署它时,它才会失败。
解决方案是从目录中删除.
,并创建一个读取它的servlet。然后在您的 web.xml 中,将servlet与.
映射。如此处所述:https://stackoverflow.com/a/44023751/418057
答案 4 :(得分:-1)
好我自己找到了解决方案!
appengine-web.xml中的使用此配置
<servlet>
<servlet-name>Assetlinks</servlet-name>
<servlet-class>api.servlets.WorkAroundHttpServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Assetlinks</servlet-name>
<url-pattern>/.well-known/assetlinks.json</url-pattern>
</servlet-mapping>
并创建一个扩展HttpServlet的类WorkAroundHttpServlet
public class WorkAroundHttpServlet extends HttpServlet
{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
if (!req.getRequestURI().startsWith("/.well-known/assetlinks.json"))
{
resp.sendError(404);
return;
}
File file= new File(getServletContext().getRealPath("/") + "/assetlinks.json");
resp.setContentType("application/json");
resp.getOutputStream().print(FileUtils.readFileToString(file, "utf-8"));
}
}