为啥这个由 facebook 生成的深层链接(applink)不起作用?

Posted

技术标签:

【中文标题】为啥这个由 facebook 生成的深层链接(applink)不起作用?【英文标题】:Why this deep link (applink), generated by facebook does not work?为什么这个由 facebook 生成的深层链接(applink)不起作用? 【发布时间】:2015-07-31 18:00:00 【问题描述】:

我想在我的网站上制作一个按钮,允许用户打开本机 facebook 应用程序(如果已安装),否则打开 facebook 网站。据我了解,我必须为此创建单独的 html 页面。

我尝试了 facebook 托管的应用程序链接来获得有效的应用程序链接示例。以下代码由facebook生成,可以通过url访问。

我尝试使用 ios(Safari、Chrome)、android(默认浏览器、Chrome)打开此链接。尽管我在两台设备上都安装了 facebook 应用程序,但我被重定向到 facebook 网站。

为什么会这样?我怎样才能让它打开原生应用程序?

<html>
    <head>
        <title>App Link</title>
        <meta property="fb:app_id" content="505860159524932" />
        <meta property="al:ios:url" content="fb://profile/838619192839881" />
        <meta property="al:ios:app_name" content="Facebook" />
        <meta property="al:ios:app_store_id" content="284882215" />
        <meta property="al:android:package" content="com.facebook.katana" />
        <meta property="al:android:app_name" content="Facebook" />
        <meta property="al:android:url" content="fb://page/838619192839881" />
        <meta property="al:web:should_fallback" content="false" />
        <meta property="al:web:url" content="https://www.facebook.com/warpcompany" />
        <meta http-equiv="refresh" content="0;url=https://www.facebook.com/warpcompany" />
    </head>
    <body>Redirecting...</body>
</html>

【问题讨论】:

Safari 和 Chrome 不支持应用链接。 【参考方案1】:

AppLinks 是只有 Facebook 原生支持的协议。这意味着只有适用于 Android 和 iOS 的 Facebook 原生应用程序才能正确解析元标记并采取行动。所有其他浏览器和平台都会忽略它们。

为了正确处理其他浏览器中的链接,除了 AppLinks 之外,您还使用客户端 JS 重定向代码来支持其他浏览器中的重定向。如果您不想全部构建,我构建了一个名为 branch.io 的免费工具,它将托管您与此客户端 JS 的链接以及自动配置您的 AppLinks。

如果您想自己构建它,这里是您可以用于 iOS safari 的代码:

<script type="text/javascript">
    window.onload = function() 
        document.getElementById("l").src = "fb://page/838619192839881";

        setTimeout(function() 
            window.location = "itms-apps://itunes.apple.com/app/id284882215";
        , 750);
    ;
</script>
<iframe id="l"   style="visibility:hidden"></iframe>

而对于Android,你可以使用这个客户端JS代码sn-p:

<script type="text/javascript">
    window.onload = function() 
        var method = 'iframe';
        var fallbackFunction = function() 
            if (method == 'iframe') 
                window.location = "market://details?id=com.facebook.katana";
            
        ;
        var addIFrame = function() 
            var iframe = document.createElement("iframe");
            iframe.style.border = "none";
            iframe.style.width = "1px";
            iframe.style.height = "1px";
            iframe.src = "fb://page/838619192839881";
            document.body.appendChild(iframe);
        ;
        var loadChromeIntent = function() 
            method = 'intent';
            document.location = "intent://page/838619192839881#Intent;scheme=fb;package=com.facebook.katana;end";
        ;
        if (navigator.userAgent.match(/Chrome/) && !navigator.userAgent.match("Version/")) 
            loadChromeIntent();
        
        else if (navigator.userAgent.match(/Firefox/)) 
            window.location = "fb://page/838619192839881";
        
        else 
            addIFrame();
        
        setTimeout(fallbackFunction, 750);
    ;
</script>

【讨论】:

【参考方案2】:

the Facebook Doc 说

App Links 是一种开放标准,可以让您深入链接到应用中的内容。当使用您的应用的用户通过 Facebook(或其他支持应用链接的应用)分享内容时,您可以创建一个链接,以便从该内容跳转回您的应用。

所以我想就像@Ming Li 说的,它不支持 Safari 和 Chrome。

您可以在您的时间轴上试用,并使用 Facebook 应用打开它。

【讨论】:

以上是关于为啥这个由 facebook 生成的深层链接(applink)不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

如何为我的 iOS 应用创建深层链接以在 Facebook 中使用?

Facebook shareLinkContent 的深层链接

到 Facebook 页面的深层链接

如何在 Facebook 应用内消息上实现深层链接

无法使用延迟深层链接从 Facebook 实时广告中获取安装引荐来源网址值

无法为 Branch.io 不同的深层链接测试我的 Facebook 广告