首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >未能使用javascript打开本机应用程序,但通过按钮初始化相同的代码时会工作。

未能使用javascript打开本机应用程序,但通过按钮初始化相同的代码时会工作。
EN

Stack Overflow用户
提问于 2021-09-16 08:01:56
回答 2查看 200关注 0票数 2

这个问题涉及到一个web应用程序内置的React,它将通过智能手机通过浏览器访问。我使用iPhone与Safari和Chrome一起进行测试。

一个步骤是打开一个本地身份验证应用程序。根据本机应用程序的文档,可以通过以下操作从浏览器打开它:

代码语言:javascript
运行
复制
  const openAuthApp = () =>
    (window.location = "https://app.bankid.com/?autostarttoken=&redirect=");

如果我在单击一个按钮时调用该函数,这会很好,如下所示:

代码语言:javascript
运行
复制
<button onClick={openAuthApp}>Open</button>

当单击该按钮时,上述代码将立即触发身份验证应用程序的打开。

但是,当我在页面加载后立即触发函数时,不需要使用按钮,如下所示

代码语言:javascript
运行
复制
  useEffect(() => {
    openAuthApp();
  }, []);

我在浏览器中看到一个错误,上面说这个应用程序没有在这个设备上找到。

关于浏览器是如何工作的,我的第一个猜测是浏览器需要一段时间才能获得所有已安装应用程序的信息,因此我在执行该方法之前添加了一个超时:

代码语言:javascript
运行
复制
  useEffect(() => {
    setTimeout(openAuthApp, 5000);
  }, []);

但还是失败了。如果我在页面加载后不到5秒按下按钮,那么页面加载后的启动时间不应该是这里的因素。

我不知道该如何处理这件事,我很想知道如何继续前进。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-23 21:47:12

我怀疑您的问题是缺少用户手势,这在使用声称的HTTPS方案时很常见--如请参阅此Chrome浏览器要求

在使用OAuth流和HTTPS重定向URI的AppAuth模式时,也存在类似的问题,这种情况发生在iOS和iOS上。在我的安卓博客文章中,请参见标题为“接收重定向响应的问题”的章节。

我的移动示例的解决方案是添加一个间隙网页,如果您做了一个视图源,您将看到它有一个onclick处理程序,它在用户手势之后调用一个深度链接:

代码语言:javascript
运行
复制
document.getElementById('continueButton').onclick = () => {
    const redirectUri = 'https://mobile.authsamples.com/basicmobileapp/oauth/callback';
    window.location.href = redirectUri;
};

当然,您不需要使用这些长度,但我认为您需要一个用户手势来调用BankID应用程序并可靠地进行外部登录。在某些方面,这也是一个合理的用户体验,因为你是在切换应用程序之前通知用户,而不是突然这样做。我会像这样积极地说一句:

代码语言:javascript
运行
复制
You will now be redirected to the BankID app to perform strong authentication and to provide consent. Please click Next to proceed.
票数 1
EN

Stack Overflow用户

发布于 2021-09-18 22:06:00

选项1:

使用window.location.href而不是window.location

代码语言:javascript
运行
复制
const openAuthApp = () =>
(window.location.href = "https://app.bankid.com/?autostarttoken=&redirect=");

如果您的web应用程序具有与bankid.com相同的域,则使用window.location.assign代替。

代码语言:javascript
运行
复制
const openAuthApp = () =>
(window.location.assign= "https://app.bankid.com/?autostarttoken=&redirect=");

备选方案2:

这需要5分钟,使用branch.io进行链接(您不需要安装SDK)

  • 注册创建新应用程序,写出应用程序的名称
  • 从左侧菜单中选择“我有一个Android应用程序”
  • 为您的应用程序添加链接并选择它,如果您愿意,请填写其他选项。
  • 它将给你一个链接"ID ].app.link
  • 使用此链接而不是默认链接。

这应该是没有问题的

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69204541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档