繁体   English   中英

深层链接到 Facebook 应用程序(使用 fb: 协议)在 Facebook 应用程序内浏览器中不起作用

[英]Deeplink to Facebook App (using fb: protocol) not working from Facebook in-app browser

我正在编写一个移动网页,它有一个重定向和两个手动备份链接(当重定向不起作用时)到 Facebook 页面。

链接采用以下形式:

fb://page/[PAGE ID NUMBER]

重定向和链接在 Chrome Mobile 和 Firefox Mobile 中工作,但(令人惊讶)它们在 Facebook 浏览器中不起作用,相反,给了我错误:

Page can't be loaded.

我很困惑 Facebook 应用程序的链接在 Facebook 浏览器中不起作用。

我该如何解决这个问题? 是否有任何创造性的解决方案或解决方法......或者我错过了一些明显的东西?


附加信息:它看起来像重定向FacebookiOS应用程序Facebook的浏览器中的至少一个版本的工作。 所以这个问题可能与Facebook Android App 相关


更新 1

我取得了一些进展。 我发现 Facebook 的应用内浏览器并不总是(或从来没有?)确认/加载/执行外部脚本文件

添加:(要找出原因,请参阅下面的更新 8 ...)

在这种情况下,链接中的href属性在页面加载后由外部脚本重新填充fb://协议链接。

我已将相关的 javascript 函数从外部脚本移动到实际页面的底部。 我已经测试了这些功能,我可以看到它们现在正在激活。 虽然链接仍然不起作用。


更新 2

让我震惊的是,幕后可能有一些安全机制不允许任何 javascript 驱动的href属性重新填充,而不是fb://协议链接不起作用,可能是这种情况最初的、默认的http://www.facebook.com/链接甚至从未被替换过,正是那些http://协议链接不起作用。

所以我更新了 PHP 模板,以便初始默认链接是fb://而不是http://链接(因此任何客户端都不需要更新传递到 Facebook 应用程序内浏览器的页面中的任何内容 -任何时候都没有边脚本)。

不。 还是行不通。


更新 3

我在页面底部添加了一个普通的链接,链接到网站的主页。 链接完全正常运行。

后来,我将原始链接指向外部域。 他们没有工作。

所以......我得出结论,只有http://协议链接到同一个域才能工作,这就是为什么如果链接指向外部域或fb://协议地址,它们将不起作用。

错误的结论。

我在网站主页上指向原始链接,但它们仍然不起作用


更新 4

在灵感的时刻,我删除了对外部脚本的引用,我设置该引用以自定义指向 OS + 浏览器环境的链接(即使根据 FB 调试工具,该脚本引用已被 Facebook 完全忽略。

链接有效。

所以我之前添加的普通链接有效的原因与它指向的位置无关,只是与脚本从未尝试访问或更新它的事实有关。

补充:(这不是原因。请参阅下面的更新 8 ...)

我将原始链接指向外部域。 他们工作了。

我将原始链接指向fb://协议。 他们没有工作。


更新 5

现在我已经摆脱了外部脚本引用,我可以将原始协议链接指向任何http://协议地址并且它们可以工作。

包括我试图在 Facebook 应用程序中打开的页面的http://www.facebook.com网络等效项。

让我们回顾一下:

Facebook网站正在 Facebook 应用内浏览器中打开。

我知道,对吧?


更新 6 [.HTACCESS 重定向]

我将链接目的地更改为/fb-custom-redirect/

然后我在.htaccess文件的mod_rewrite部分添加了一行:

RewriteRule ^fb-custom-redirect fb://page/[PAGE ID NUMBER]

服务器自然不明白我的要求。


更新 7 [PHP 重定向]

我为/fb-custom-redirect/创建了一个index.php并添加了以下内容:

<?php
header('Location: fb://page/[PAGE ID NUMBER]');
?>

你猜怎么着? 这适用于Firefox Mobile 它也适用于Chrome Mobile

但在 Facebook 应用内浏览器中,它返回相同的错误:

Page can't be loaded.

更新 8

我刚刚发现 - 这并不是微不足道的 - 当Facebook 调试器工具( https://developers.facebook.com/tools/debug/sharing/ ) 刷新 Facebook 给定页面的缓存时,它只会刷新.html

再次按下Scrape不会刷新任何外部资源,如.css.js文件。

相反,Facebook 会继续引用这些文件的自己缓存版本,而不管.html文件缓存是否刚刚更新。

解决方法(至少在PHP中)是在每次加载页面时使用新的随机生成的查询字符串附加文件路径:

<link rel="stylesheet" href="/styles/mystyles.css?'.uniqid().'" />

现在 Facebook 应用内浏览器正在获取我的.css.js文件的最新版本。

这解释了我在更新 1 中的初步观察:

我取得了一些进展。 我发现 Facebook 的应用内浏览器并不总是(或从来没有?)确认/加载/执行外部脚本文件

我将得出结论,Facebook 应用程序内浏览器每次都解析外部.js文件引用,但它反复访问该文件的旧缓存版本。


尽管如此,即使在上述所有假设和实验之后,我仍然没有更接近于发现为什么fb:协议深层链接在 Facebook 应用程序的应用程序内浏览器中不起作用

我放弃。

Apple 应用程序是沙盒化的。 这意味着他们无法访问其他应用程序并执行代码。 Facebook 正在运行一个浏览实例,当您尝试调用 fb:// 协议时,iPhone 阻止您这样做以尝试创建一个无限的应用程序加载循环。 即,你在 FB 浏览器中打开一个页面,它在 FB 浏览器中打开它自己,它在 FB 浏览器中打开它自己......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM