从Facebook应用内浏览器无法正常链接到Facebook App(使用fb:协议)的Deeplink

Rou*_*ica 9 html javascript php .htaccess facebook

我正在编写一个移动网页,该网页同时具有重定向和指向Facebook Page的两个手动备份链接(当重定向不起作用时)。

链接采用以下形式:

fb://page/[PAGE ID NUMBER]
Run Code Online (Sandbox Code Playgroud)

重定向和链接在Chrome Mobile和Firefox Mobile中有效,但是(惊奇)它们在Facebook Browser中不起作用,这反而给了我错误:

Page can't be loaded.
Run Code Online (Sandbox Code Playgroud)

我感到困惑的是,在Facebook浏览器中无法链接到Facebook App。

我该如何解决?是否有任何创造性的解决方案或解决方法...或者我错过了明显的事情?


附加信息:它看起来像重定向在对Facebook的浏览器中的至少一个工作版本Facebook的iOS应用。因此,该问题可能与Facebook Android App无关


更新1

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

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

我已经将相关的javascript函数从外部脚本移到了实际页面的底部。我已经测试了这些功能,并且可以看到它们正在激活。尽管链接仍然无法正常工作。


更新2

令我吃惊的是,幕后可能存在某种安全机制,该机制不允许任何由javascript驱动的href属性重新填充,并且代替fb://协议链接不起作用,可能是初始的,默认的http://www.facebook.com/链接甚至从未被替换过,正是那些 http://协议链接不起作用。

因此,我更新了PHP模板,以初始的默认链接fb://代替了http://链接(因此,传递给Facebook应用内浏览器的页面中的任何内容都无需随时由任何客户端脚本进行更新) 。

不。还是行不通。


更新3

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

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

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

结论错误。

我将原始链接指向该网站的首页,但仍然无法正常工作


更新4

很快,我删除了对外部脚本的引用,该脚本是为自定义OS +浏览器环境的链接而设置的(尽管根据FB Debugging工具,此脚本引用已被Facebook完全忽略了)。

链接有效。

因此,我之前添加的普通香草链接起作用的原因与它所指向的位置无关,而仅与脚本从未尝试访问或更新它的事实有关。

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

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


更新5

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

包括http://www.facebook.com我要在Facebook App中打开的网页的等效网页。

让我们回顾一下:

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

我知道,对吧?


更新6 [.HTACCESS REDIRECT]

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

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

RewriteRule ^fb-custom-redirect fb://page/[PAGE ID NUMBER]
Run Code Online (Sandbox Code Playgroud)

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


更新7 [PHP重定向]

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

<?php
header('Location: fb://page/[PAGE ID NUMBER]');
?>
Run Code Online (Sandbox Code Playgroud)

你猜怎么了?这在Firefox Mobile中有效。它也可以在Chrome Mobile中使用

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

Page can't be loaded.
Run Code Online (Sandbox Code Playgroud)

更新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().'" />
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

小智 2

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