You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从动态链接获取数据生成预览?现有库调用遇阻求助

解决Firebase动态链接无法在Android链接预览库中加载元数据的问题

我尝试了rich link preview、urlembeddedview、android preview link等Android库,均无法加载Firebase动态链接https://mydomainname.page.link/ay1q4rpCSR45NisV6的预览内容,仅能获取Host名称,无法拿到标题、描述及图片。但WhatsApp输入该链接可正常生成预览,不清楚差异点。以下是我使用urlembeddedview的代码:

if (linearLayout.getVisibility()==View.GONE&&!linkPosted.isEmpty()) {

    urlEmbeddedView.setVisibility(View.VISIBLE);
    urlEmbeddedView.setURL(linkPosted, new URLEmbeddedView.OnLoadURLListener() {
        @Override
        public void onLoadURLCompleted(URLEmbeddedData data) {
            urlEmbeddedView.title(data.getTitle());
            urlEmbeddedView.description(data.getDescription());
            urlEmbeddedView.host(data.getHost());
            urlEmbeddedView.thumbnail(data.getThumbnailURL());
            urlEmbeddedView.favor(data.getFavorURL());
        }
    });

}
else {
    urlEmbeddedView.setVisibility(View.GONE);
}

核心原因

这类短链接(比如Firebase动态链接)本质是重定向链接,大部分Android链接预览库默认只会解析短链接本身的响应(通常没有元数据),而WhatsApp会自动跟进所有重定向,抓取最终目标页面的OG标签(Open Graph)元数据。

解决方案步骤

  • 手动跟进重定向获取最终URL
    先通过代码获取短链接跳转后的最终目标URL,再将这个URL传给预览库。可以用OkHttp实现重定向解析:

    private String getFinalRedirectUrl(String shortUrl) throws IOException {
        OkHttpClient client = new OkHttpClient.Builder()
                .followRedirects(true)
                .followSslRedirects(true)
                .build();
    
        Request request = new Request.Builder()
                .url(shortUrl)
                .head() // 用HEAD请求减少数据传输
                .build();
    
        try (Response response = client.newCall(request).execute()) {
            return response.request().url().toString();
        }
    }
    
  • 修改原有代码,传入最终URL
    在调用urlembeddedview的setURL前,先解析出最终URL:

    if (linearLayout.getVisibility() == View.GONE && !linkPosted.isEmpty()) {
        urlEmbeddedView.setVisibility(View.VISIBLE);
        // 解析最终URL
        new AsyncTask<Void, Void, String>() {
            @Override
            protected String doInBackground(Void... voids) {
                try {
                    return getFinalRedirectUrl(linkPosted);
                } catch (IOException e) {
                    e.printStackTrace();
                    return linkPosted; // 解析失败则用原链接
                }
            }
    
            @Override
            protected void onPostExecute(String finalUrl) {
                super.onPostExecute(finalUrl);
                urlEmbeddedView.setURL(finalUrl, new URLEmbeddedView.OnLoadURLListener() {
                    @Override
                    public void onLoadURLCompleted(URLEmbeddedData data) {
                        urlEmbeddedView.title(data.getTitle());
                        urlEmbeddedView.description(data.getDescription());
                        urlEmbeddedView.host(data.getHost());
                        urlEmbeddedView.thumbnail(data.getThumbnailURL());
                        urlEmbeddedView.favor(data.getFavorURL());
                    }
                });
            }
        }.execute();
    } else {
        urlEmbeddedView.setVisibility(View.GONE);
    }
    
  • 验证目标页面的OG标签
    确保最终跳转的页面包含正确的Open Graph元标签,比如:

    <meta property="og:title" content="页面标题">
    <meta property="og:description" content="页面描述">
    <meta property="og:image" content="https://example.com/thumbnail.jpg">
    <meta property="og:url" content="https://example.com/final-page">
    

    WhatsApp正是基于这些标签生成预览,若目标页面缺少这些标签,即使解析了最终URL也无法获取完整预览。

内容的提问来源于stack exchange,提问作者android dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 04:15:39