点击键盘 "Go" 按钮和网页按钮有什么区别

What is the difference between tapping keyboard "Go" button and web page button

TL;DR

我试图了解在使用 SFSafariViewController 对用户进行身份验证时,用户点击软件键盘上的 "Go" 按钮与点击身份验证网页上呈现的 "Sign In" 按钮有什么区别通过 Azure 或任何其他 OAuth 提供商。

描述

我们现在正在通过创建特殊的重定向页面来处理这种情况,其中包含特殊的 link 供用户点击。类似于 "Tap here if you're not automatically redirected back to the application"。但我想知道是否有更好的解决方案,以及用户点击软件键盘按钮和 HTML 页面元素之间从 OS/Browser 角度来看有什么区别。

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

的 link 时打开

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

关于当用户从键盘导航时激活通用链接:这种情况似乎类似于用户在浏览器的地址栏中键入一些 URL 并点击 GO 时的情况。如果用户这样做,那么用户的意图是留在浏览器中,而不是转到应用程序。所以不使用通用链接是合乎逻辑的。

为本案例提供更好体验的另一种方法: 如果用户在 iPhone 上导航至 "special redirect page",请尝试导航至您应用的自定义 URL 方案 URL。此时您已经知道该应用程序已安装在该设备上。 尝试导航到自定义URL方案URL 将调出iOS 系统对话框,如"Do you want to open XYZ App?"。不过这似乎比 "Tap here if you're not automatically redirected back to the application".

好一点

您可能已经发现 "special redirect page" 应该位于与 "Universal Links enabled domain" 不同的域中。在同一域内导航不会使用通用链接。作为参考,我们拥有的 App Preview page 与您的 "special redirect page".

的用途基本相同

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

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

将此隐藏按钮添加到表单上所有其他提交按钮的上方。当按下 Go 按钮时,我发现它 "clicks" 是表单上的第一个提交按钮。此按钮捕获该单击,模糊当前输入导致键盘被关闭,然后取消表单提交。然后用户可以点击表单上的可见按钮以正确完成该过程。不需要两个流程。

这还允许桌面用户使用相同的 OAuth 表单按 Enter 键提交表单或单击按钮。