点击键盘“开始”按钮和网页按钮

时间:2017-11-29 20:45:52

标签: ios azure oauth ios-universal-links sfsafariviewcontroller

TL; DR

我正在尝试了解用户点击软件键盘上的“开始”按钮和点击身份验证网页上显示的“登录”按钮时使用SFSafariViewController通过Azure或其他任何人对用户进行身份验证的区别OAuth提供商。

描述

  • 我们正在使用各种OAuth提供程序(Azure,Keycloack等)来验证用户对本机iOS应用程序的身份。
  • 我们向用户,浏览器实例(SFSafariViewController)提供登录页面
  • 此页面包含用户名,密码字段和登录按钮
  • 当用户输入密码时 - 他/她可以使用页面上的Log In按钮或iOS软件键盘上的Go按钮
  • 在这两种情况下,都会触发登录程序,并将用户重定向回正确的URL
  • 但是,如果用户点击软件键盘上的Go按钮,则不会通知应用程序有关重定向(通用链接逻辑不起作用),并且在SafariViewController中呈现重定向URL页面
  • 它发生在各种OAuth提供商中,只能在iOS上复制(当使用Android软件键盘按钮时,通用链接表现良好)

我们现在通过创建特殊的重定向页面来处理这种情况,该页面包含要点击的用户的特殊链接。类似于“如果您没有自动重定向回应用程序,请点击此处”。但我想知道是否有更好的解决方案,以及用户点击软件键盘按钮和HTML页面元素之间的操作系统/浏览器视角有何不同。

3 个答案:

答案 0 :(得分:1)

这是因为iOS上的Universal Links无法以编程方式打开。当您单击“开始”按钮时,您实际上是以编程方式提交输入表单(您可以通过在Safari栏中输入Universal链接并单击go来自行重新创建,应用程序将无法打开)。只有当用户有意点击链接本身或重定向到通用链接的链接时,才能打开通用链接。

答案 1 :(得分:1)

您的解决方法似乎很合理。

关于当用户从键盘导航时激活通用链接:这种情况似乎类似于用户在浏览器的地址栏中键入一些URL并点击GO时的情况。如果用户这样做,那么用户意图就是留在浏览器中,而不是去App。因此,不参与Universal Links是合乎逻辑的。

为此案例提供更好的体验的另一种方法: 如果用户导航到"特殊重定向页面"在iPhone上,尝试导航到应用程序的customURLScheme URL。此时您已经知道该应用程序已安装在此设备上。 尝试导航到customURLScheme URL将显示iOS系统对话框,例如"您要打开XYZ App吗?"。如果你没有自动重定向回应用程序"那么这似乎比#34;点击这里好一点。

可能你已经发现"特殊的重定向页面"应该位于不同的域而不是#34; Universal Links enabled domain"。在同一域内导航不会使用Universal Links。作为参考,我们拥有的App Preview page基本上与您的目的相同"特殊重定向页面"。

答案 2 :(得分:0)

假设您可以控制OAuth表单,我发现以下技术可以提供相当不错的体验:

<button type="submit" 
        style="visibility:hidden; height: 0; margin: 0; padding: 0;"
        onclick="document.activeElement.blur(); return false;">
</button>

在表单上所有其他提交按钮上方添加此隐藏按钮。当按下“执行”按钮时,我观察到它“单击”了表单上的第一个提交按钮。该按钮可以捕捉到该单击,使当前输入模糊,从而使键盘消失,然后取消表单提交。然后,用户可以点击表单上的可见按钮以正确完成该过程。不需要两个流程。

这还允许使用相同OAuth表单的台式机用户按Enter提交表单或单击按钮。