2015-09-28 172 views
12

更新:看来Twitter已经解决了这个问题。点击授权按钮即可使用!谢谢大家的回复。禁用Twitter通用深层链接

我有一个UIWebView,打开并指向Twitters Oauth/Authorize网页。用户使用Twitter帐户登录,并使用Twitter帐户验证我们的应用程序的使用情况。这个过程在Twitter 6.37 iOS应用程序发布之前完美运行。现在发生的情况是,当WebView检测到https://twitter.com/oauth/authorize?oauth_token而不是停留在WebView中时,它会打开本机Twitter应用程序并死亡。如果您卸载Twitter应用程序,那么所有内容通常都在WebView中运行。我怎样才能防止这种情况发生?我想留在我的UIWebView中,不会自动打开深层链接。我一直在阅读关于iOS 9中新的URL深层链接更改,但不知道如何阻止它们从我的应用程序到其他本机应用程序。谢谢你的帮助!

enter image description here

+0

我听说过Facebook,Twitter和其他人阻止Universal Links在他们的网页浏览中工作的报道。这让我认为必须有一种方法来拦截和禁用这种行为,至少在UIWebView和WKWebView(绝对不是SFSafariViewController)中。 –

+0

我同意,我尝试了shouldStartLoadWithRequest方法,但似乎无法找到解决方法。就在它跳出我的应用程序之前,它将调用https://twitter.com/oauth/authorize?oauth_token作为UIWebViewNavigationTypeFormSubmitted。如果我在这种情况下返回NO,它不会提交页面。如果有一个委托在开始与您的应用程序通用链接时被解雇,那将会很好。 – mikemike396

+0

那么这对你来说是一个可行的解决方案吗?我很好奇 –

回答

4

作为一种变通方法,在Twitter的认证屏幕中,我们可以使用iOS上的开始按钮键入键盘而不是使用web视图上的登录按钮,直到twitter修复为止。 为了清晰起见,请参考附件截图链接。

Screenshot for the workaround

+0

哇这实际上工作!很好的解决方法!我希望Twitter知道这个问题。我在那里twittercommunityforum提交了一张票。 – mikemike396

1

通过Xamarin问题,我要回答的:

除非Twitter的删除/更新的“https://www.twitter.com/apple-app-site-association”的应用部分,允许旁路或者说是不是在苹果应用程序辅助的OAuth -site-association文件我不明白你会怎么做。这些文件已签名,iOS在操作系统级别处理它们。

我还没有玩过很多关于continueUserActivity委托和传递给从UNI链接启动的应用程序的NSUserActivity对象,但我没有看到启动的应用程序(例如Twitter)将控制权返回给原始应用程序,并在那一点oauth呼叫链将打破反正......

  • 独特的。与自定义网址方案不同,其他应用不能声明通用链接,因为它们使用标准HTTP或HTTPS链接到您的网站。

  • 安全。当用户安装您的应用程序时,iOS会检查您上传到Web服务器的文件,以确保您的网站允许您的应用程序以其名义打开网址。只有您可以创建和上传此文件,因此您的网站与您的应用的关联是安全的。

途经:https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/AppSearch/UniversalLinks.html

我会是一个问题(错误?)对Twitter的开发论坛报告:https://twittercommunity.com

+0

谢谢你的帖子!我希望将来有一个解决方案。下面是Twitter社区网站上发布的这个问题 - > https://twittercommunity.com/t/disable-twitter-universal-deep-links/53580 – mikemike396

+0

我最终转换为使用应用程序级别的身份验证,因为我不得不放弃(删除)基于Xamarin的应用程序的功能,并启动Twitter应用程序,以允许用户发布等等。 – SushiHangover

+0

是的,这似乎是唯一的解决方案。这不是我们的想法,因为我们有多个用户可以进行身份​​验证的平台。因此,我们必须为每个平台构建应用程序级别身份验证,而不是基于Web的身份验证。 – mikemike396

3

我就遇到了这个问题,也想通了,那是因为我的授权端点设置为https://twitter.com/oauth/authorize?oauth_token="+oauthToken(我相信这是原来的文档)。如果您添加api作为子域:https://api.twitter.com/oauth/authorize?oauth_token="+oauthToken,它将不再触发深层链接并加载Twitter应用程序。

+0

买这个人一杯啤酒! +++ – Dunc

+0

我们正在使用Twitterizer(https://github.com/Twitterizer/Twitterizer),看起来他们已经正确设置了端点。 – mikemike396

+0

买这个人2啤酒!!!!! –