如何使用浏览器重定向创建 Facebook 风格的应用内身份验证?
Posted
技术标签:
【中文标题】如何使用浏览器重定向创建 Facebook 风格的应用内身份验证?【英文标题】:How can I create a Facebook-style in-app authentication with browser redirect? 【发布时间】:2014-12-23 15:06:10 【问题描述】:我希望能够通过自定义 iPhone 应用验证来自 Safari 网站的交易,然后通过回调将用户带回同一个 Safari 窗口……有点像 Facebook OAuth 样式的登录。
-
用户在网页上,点击按钮进行交易
Safari 使用方案和参数 (How to open a native ios app from a web app) 启动我们的自定义应用程序
应用对用户进行身份验证
用户通过一些回调被重定向回Safari,通知网页事务已成功(最好在同一窗口中)
这是第 4 步,我不知道该怎么做。我想我可以很容易地将用户重定向回另一个窗口中的浏览器,但是是否可以通过回调将他们发送回之前所在的同一窗口?
【问题讨论】:
【参考方案1】:更新: 有可能,经过一些实验,我在 Safari 的行为中发现了一些有趣的东西。如果 Safari 打开了一个标签页,其 URL 不在网站的根目录上,那么如果您的应用再次请求相同的 URL,它将不会打开新标签页。
所以在您的情况下,如果您来自 facebook.com/auth 并且您的应用打开了http://facebook.com/auth,那么该标签将被重复使用!您也可以安全地传递 Web 参数;这些将在选项卡处理决策中被忽略。我还没有测试过 http 与 https 来看看这是否也被忽略了,但这是需要注意的。
旧答案:
是的,这是可能的,但是打开 Safari 的唯一记录方法会导致为您的“请求”打开一个新标签。
记录在案的方法是使用这样的 URL 方案:
if( [[UIApplication sharedApplication] canOpenURL:myURL] )
[[UIApplication sharedApplication] openURL:myURL];
https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-AppCommunication/Inter-AppCommunication.html
我之所以说这是可能的,是因为 Google 地图在 iOS 8 上可以做到这一点。 如果您使用移动 Safari 搜索地址,然后选择生成的地图视图,它将打开 Google 地图应用程序(如果已安装)。 Google 地图应用程序将在页面顶部显示“返回野生动物园”的横幅。如果您单击此横幅,它将带您返回 Safari,而无需按照您想要的方式打开新标签。
同样的行为也扩展到 Chrome。此处的文档还指出,除非您进行多次调用,否则当您在 Chrome 中打开 URL 时将创建一个新选项卡:
https://developer.chrome.com/multidevice/ios/links#creating-a-new-tab
当然,Chrome 是他们自己的应用程序,在这种情况下,他们完全有权使用未记录的功能。我不能说谷歌是如何通过 Safari 实现这一目标的。
我建议最好找到一种方法来支持这两种浏览器,就像 Google 在其地图应用程序中所做的那样,为用户提供一致的体验并尊重他们对浏览器的选择。在我看来,这个功能当然是合理的;如果 Safari 启动了您的应用,为什么您不能将用户返回到该页面。
【讨论】:
不能在payload中发送userAgent信息吗?这样您就可以确定正在使用哪个应用程序并将用户返回到那里...w3schools.com/jsref/prop_nav_useragent.asp 您将在 AppDelegate 的委托回调中获得调用应用程序的捆绑 ID - 假设一切公平,Safari 也应该发回它的 ID。 Safari 中奇怪的、未记录的行为。惊人的! :)以上是关于如何使用浏览器重定向创建 Facebook 风格的应用内身份验证?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过浏览器重定向打开移动应用程序(例如 Facebook)?
从 Android 上的应用内浏览器重定向到 Chrome 的最佳方式?
Amazon Cognito:从浏览器重定向到 Android 应用程序时如何停止出现“redirect_mismatch”错误