我是一个真正的泡菜,迫切需要一些关于我遇到的关键问题的帮助.
我花了几个月的时间编写一个HTML5应用程序/网站以及一个原生的Android应用程序,它只是HTML5网站的WebView包装器.该应用程序的核心功能之一是用户可以将应用程序特定的URL共享到Facebook和Twitter等,以便他们的朋友可以关注共享URL,这将在我们的浏览器中打开我的应用程序的HTML5版本,或者如果它们是最重要的在Android上,他们已经安装了我的原生Android应用程序,他们被提议在我的应用程序中打开.
这是一个相当长的复杂问题,所以为了简化,我会在这篇文章中一致地使用某些特定术语:
我的AndroidManifest.xml包含以下内容......
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" android:host="myapp.com" android:pathPrefix="/" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)
在任何正常情况下测试时,这都可以完美运行.例如,如果"MyApp用户"跟随到http://myapp.com/sharedpage的直接链接,则会出现"选择应用程序对话框".太棒了,我确实正确配置了我的AndroidManifest.xml.
然而事情并不总是在关键的Facebook共享场景中工作.它并不总是有效,因为Facebook的原生Android应用程序和Facebook的移动网站(http://m.facebook.com)都没有直接链接到共享URL,而是通过Facebook重定向页面链接.例如,如果共享http://myapp.com/sharedpage,Facebook将最终提供以下URL:
如果"MyApp用户"跟随其中一个Facebook链接,则可能会发生以下两种情况之一,具体取决于他们使用的浏览器...
MyApp股票浏览器用户:
如果用户安装了Android安装并使用了Android浏览器,那么事情就会很好,因为发生了以下事件......
MyApp非浏览器用户:
但是如果用户......
......然后这是主要问题,因为发生了以下事件......
客户端重定向
为了确认导致问题的重定向,我创建了一个名为"clientSideRedirector.htm"的非常简单的HTML页面.
<html><body><script>
window.location.href = "http://myapp.com/sharedpage";
</script></body></html>
Run Code Online (Sandbox Code Playgroud)
如果我的应用程序/非库存浏览器用户打开 …