如何判断H5是否通过通用链接成功唤起了app?
有什么检测方法吗?比如之前scheme
的跳转,可以通过监听页面的hidden
事件?
你在唤起APP的时候执行以下代码,在urlschemes后面携带一个参数
<a href="test://enter?a=1">唤起app<a>
在app端获取参数
let args = plus.runtime.arguments;console.log(plus.runtime.arguments, typeof args, 'plus.runtime.arguments');if (typeof args == 'string' || typeof args == 'object') {args = args.split('entry?');console.log(args,'args');if (args.length == 2 && args[1]) { args = args[1]; try { //获取到参数,处理跳转逻辑 } catch (e) { console.log('处理参数失败', e); }}//值清空这里有坑的,可能是官方bugplus.runtime.arguments = null;plus.runtime.arguments = '';return false;}
一个比较常见的做法就是延迟(setTimeout)几秒后弹出一个启动失败的弹窗或者相应的逻辑。
然后添加一个 pagehide 和 visibilitychange 的事件监听,当 hide 后,取消掉这个 setTimeout。
因为如果跳转成功了,页面一般都会切出去,反之则不会。
大致的代码
function redirectToApp (path) { function handleRedirectFailed () { const timer = setTimeout(function () { // 显示失败的弹窗或者逻辑 }, 3e3); return function () { clearTimeout(timer); }; } const timer = handleRedirectFailed(); window.addEventListener('pagehide', timer); document.addEventListener('visibilitychange', () => { if (document.visibilityState === 'hidden' || document.hidden) { timer(); } }); setTimeout(function () { document.removeEventListener('visibilitychange', timer); window.removeEventListener('pagehide', timer); }, 3e3); // 使用 schema 跳转 window.open(url, '_blank');}
有些手机在跳转前可能会询问用户,这个过程可能也会触发 pagehide、visibilitychange,要避免这种情况,可以把 addEvenetListener 延迟一下
当然,如果你要想 100% 严谨,那就每次启动的时候额外携带一个随机参数,让后接口轮询,App 启动成功后,就把这个参数提交到后端去,页面轮询这个参数的结果就好了。不过一般都没啥必要。。。前面的方法就够了
要判断H5页面是否通过通用链接成功唤起了app,你可以采用以下几种方法:
使用URL Scheme:
如果app支持特定的URL Scheme,你可以在H5页面中的JavaScript代码中尝试打开一个该Scheme的URL。如果app已经安装并且正确处理了这个Scheme,它会被唤起。如果app没有安装,浏览器通常会显示一个错误页面或提示。
function checkAppInstallation() { var url = 'yourappscheme://path'; window.open(url, '_blank'); // 监听页面隐藏事件 window.addEventListener('visibilitychange', function() { if (document.visibilityState === 'hidden') { console.log('App was opened successfully!'); // 在这里执行当app被唤起时的逻辑 } });}
使用Universal Links (iOS):
对于iOS,你可以使用Universal Links。通过配置app的apple-app-site-association
文件,你可以让iOS设备在点击符合app关联的链接时直接打开app。为了检测是否成功唤起了app,你可以使用aswebauthenticationsession
或者监听continueuseractivity
代理方法。
// 使用aswebauthenticationsession (仅适用于iOS)if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.callbackHandler) { window.webkit.messageHandlers.callbackHandler.postMessage(null);}
在app中,你需要处理来自web页面的消息。
使用Intents (Android):
对于Android,你可以使用Android App Links或自定义Intents。Android App Links类似于iOS的Universal Links,而自定义Intents则需要用户安装app并在app中配置相应的Intent Filter。
// 监听页面隐藏事件window.addEventListener('visibilitychange', function() { if (document.visibilityState === 'hidden') { // 对于Android,可以通过检查是否打开了自定义的URL来判断 console.log('App was opened successfully!'); }});
在app中,你需要处理来自web页面的Intent。
branch.io
或firebase dynamic links
,可以帮助你实现跨平台的深度链接,并提供API来检测链接是否被成功处理。请注意,以上方法可能因浏览器和操作系统版本的不同而有所差异,因此建议查阅相关文档和测试以确保兼容性。同时,确保你的app正确配置了URL Scheme、Universal Links或App Links,以便能够响应来自web的链接。
本文向大家介绍Android 判断是否连接成功了指定wifi,包括了Android 判断是否连接成功了指定wifi的使用技巧和注意事项,需要的朋友参考一下 最近在做wifi的相关的东西,打印WifiInfo的时候 无意间发现一个参数,改参数可以查看是否连接成功了指定wifi,但是这是隐藏的,遂将其反射之。代码如下: 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也
我下载了封装在zip文件中的proGuard,并将其解压缩到我的硬盘上。我没有以任何方式安装它(因为我不知道如何安装)。然后,我将添加到我的project.properties文件中。然后我做了一个“导出Android应用程序”,完全期待eclipse抱怨它不知道我的proGuard安装在哪里,但没有抱怨。事实上,一个新的apk文件出现在我的keystore中,一组文件(dump.txt等)出现在
在收到DocuSign信封已签名的通知后,我正试图确定该信封是否已湿签名(即下载、签名、上传/传真)。对于我的项目,我们需要在处理之前审查湿签合同。我在REST API中看不到确定这一点的方法。当我调用/v2/accounts/{accountId}/envelets/{envelopeId}/documents时,它会返回文档列表,并表示签名类型为“电子”,尽管我在测试时对其进行了湿签名。我正在
本文向大家介绍如何判断单链表是否是循环链表?相关面试题,主要包含被问及如何判断单链表是否是循环链表?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 时间复杂度:O(n) 空间复杂度:O(1) 两个指针,一个每次走一步,一个每次走两步,如果有环,两者会相遇。相遇后,让一个指针从头结点再次出发,两个指针每次都走一步,直到相遇点即为环入口。 Java 代码示例:
需求背景 A B C 三个页面 A => C ,通过 router.push 进入。 B => C ,通过 router.repace 进入。 需求: 在 C 页面需要判断是 replace 还是 push 来进行特殊的操作。 问题: vue-router 是否有这样的方式呢?
问题内容: 我有一个页面可以通过Ajax加载其他页面(请考虑使用框架,除非没有框架)。 显然,这些页面都可以独立调用,因此我想检测是否通过Ajax调用了它们,如果不是,则重定向到主Ajax页面。 这些页面是php页面,因此我也可以访问它。 指数: 问题答案: 使用该对象进行请求时,现代浏览器会添加以下请求标头: 在PHP中,使用以下命令检查此标头的存在: