[英]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 浏览器中不起作用。
我该如何解决这个问题? 是否有任何创造性的解决方案或解决方法......或者我错过了一些明显的东西?
附加信息:它看起来像重定向在Facebook的iOS应用程序Facebook的浏览器中的至少一个版本的工作。 所以这个问题可能与Facebook Android App 相关。
我取得了一些进展。 我发现 Facebook 的应用内浏览器并不总是(或从来没有?)确认/加载/执行外部脚本文件。
添加:(要找出原因,请参阅下面的更新 8 ...)
在这种情况下,链接中的href
属性在页面加载后由外部脚本重新填充fb://
协议链接。
我已将相关的 javascript 函数从外部脚本移动到实际页面的底部。 我已经测试了这些功能,我可以看到它们现在正在激活。 虽然链接仍然不起作用。
让我震惊的是,幕后可能有一些安全机制不允许任何 javascript 驱动的href
属性重新填充,而不是fb://
协议链接不起作用,可能是这种情况最初的、默认的http://www.facebook.com/
链接甚至从未被替换过,正是那些http://
协议链接不起作用。
所以我更新了 PHP 模板,以便初始默认链接是fb://
而不是http://
链接(因此任何客户端都不需要更新传递到 Facebook 应用程序内浏览器的页面中的任何内容 -任何时候都没有边脚本)。
不。 还是行不通。
我在页面底部添加了一个普通的链接,链接到网站的主页。 链接完全正常运行。
后来,我将原始链接指向外部域。 他们没有工作。
所以......我得出结论,只有http://
协议链接到同一个域才能工作,这就是为什么如果链接指向外部域或fb://
协议地址,它们将不起作用。
错误的结论。
我在网站主页上指向原始链接,但它们仍然不起作用。
在灵感的时刻,我删除了对外部脚本的引用,我设置该引用以自定义指向 OS + 浏览器环境的链接(即使根据 FB 调试工具,该脚本引用已被 Facebook 完全忽略。
链接有效。
所以我之前添加的普通链接有效的原因与它指向的位置无关,只是与脚本从未尝试访问或更新它的事实有关。
补充:(这不是原因。请参阅下面的更新 8 ...)
我将原始链接指向外部域。 他们工作了。
我将原始链接指向fb://
协议。 他们没有工作。
现在我已经摆脱了外部脚本引用,我可以将原始协议链接指向任何http://
协议地址并且它们可以工作。
包括我试图在 Facebook 应用程序中打开的页面的http://www.facebook.com
网络等效项。
让我们回顾一下:
Facebook网站正在 Facebook 应用内浏览器中打开。
我知道,对吧?
我将链接目的地更改为/fb-custom-redirect/
。
然后我在.htaccess
文件的mod_rewrite
部分添加了一行:
RewriteRule ^fb-custom-redirect fb://page/[PAGE ID NUMBER]
服务器自然不明白我的要求。
我为/fb-custom-redirect/
创建了一个index.php
并添加了以下内容:
<?php
header('Location: fb://page/[PAGE ID NUMBER]');
?>
你猜怎么着? 这适用于Firefox Mobile 。 它也适用于Chrome Mobile 。
但在 Facebook 应用内浏览器中,它返回相同的错误:
Page can't be loaded.
我刚刚发现 - 这并不是微不足道的 - 当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.