suanmei / callapp-lib Goto Github PK
View Code? Open in Web Editor NEW🔥call app from h5(H5唤起客户端 )
🔥call app from h5(H5唤起客户端 )
在现阶段不能用Universal Link的情况下(http域名),现在在用Scheme的方式的时候,未安装app的情况下,ios的safari会提示'打不开该网页,因为网址无效',不知道这情况有没有解决的办法
我理解这个库的编写者假定的是android app和ios app是同一个Scheme。
当然我觉得也该这样,但是我们的android组和ios组搞得就是两个schema,这样的话appstore的地址是不是应该在open参数里而不在实例初始化参数里,总感觉参数分布很别扭
目前的版本在UC浏览器中,在未安装app情况下貌似没有效果,在安装了app的情况下可以跳转。楼主是否有遇到这种问题呢
请问能否给一份从浏览器h5唤起微信的demo?
应用已经被成功唤起。从应用回退浏览器时,还是跳进了fallback的地址。
ios里面,visibilityChangeProperty 和 hidden回调的触发时机,总是要比timer慢,导致了这个问题的发生。
safari浏览器的行为好像是,timer会按时触发,而visibilityChangeProperty 和 hidden事件的回调,好像是,从app返回浏览器才监听到,然后触发,而不是离开safari浏览器就触发了。
所以导致清除timer的行为要在timer触发之后。
比如我有个 我现在 depot://sxc.depot 怎么写代码呢?
a 链接和 iframe 和 location都可以用,但是不能在钉钉自带的浏览器里面用。
另外建议写个 example 的🌰
老哥,我用scheme方式发现安卓自带的浏览器唤醒一次可以,多次就不可以唤醒了,请问intent是否能解决呢?
您好,c.tb.cn/c.30jul,淘宝的这种短链接是如何做到直接唤起的
今天我们使用这个库的时候,碰到了一些问题。按照文档写好之后,不管是iOS端还是android端,都调起失败。
var options = {
scheme: {
protocol: 'szzx'
},
intent: {
package: 'com.menglan.zhihu',
scheme: 'szzx'
},
appstore: 'https://itunes.apple.com/cn/app/id1449703627?mt=8',
yingyongbao: 'https://a.app.qq.com/o/simple.jsp?pkgname=com.menglan.zhihu',
fallback: 'https://www.baidu.com'
}
var callLib = new CallApp(options)
callLib.open({
param: {questionId:para},
path: ''
})
这是我们的代码,能帮我看一下是哪里出问题了吗
我司需要做一个引流的操作,也就是唤端的操作,安装app
了,那么打开,没有安装那么跳到下载页面,ios/安卓
都有这个需求,目前在和ios
的伙伴先做,我们都是第一次做这个,都是在没有石头可摸的情况下硬过河……
ios
使用通用链接的配置,如下:
我这边的配置如下,虽然看了你的文章了,但是还是N多地方不懂:
我用的react
,然后点击事件中调用handleCallApp
方法,在里面唤端,因为只是先做ios
的,所以安卓
的就写了个应用宝的地址
appstore
吗?我的理解失败就是没有app
,然后就让用户下载…app
,先不指定app
的哪个页面,那pathKey
配置为*
行吗?还是直接不写pathKey
就好?callLib.open
里面,那个path
: 需要打开的页面对应的值
,就直接打开app
就好,暂时不指定页面,这里填*
可以吗?callLib.open
里面的param
,由于暂时没有指定页面,所以我没填…callLib.open
里面的callback
, 由于不确定默认的失败回调是什么,所以没写ios
那边他找了一些配置通用链接
的文章,我看了下配置清晰,应该不会配错吧;我如上配置,ios
同学装上他写了代码的app
,然后测试的时候都是跳到应用宝,然后页面提示在App Store中打开链接吗?
点确定就跳到app store
,然后那有个下载的按钮,然而我要是不用你的这个唤端库,直接:const handleCallApp = () => {
window.location.href = '我司app的应用宝链接'
}
那跳到app store
之后还会有个打开按钮,所以我们这是哪里搞错了呢?问题比较多,望见谅,求回复,谢谢啦
很多情况会在你唤起APP的时候,会弹框询问是否确定要打开某个APP,点取消是算唤起失败还是什么? 这个弹框在整个唤起过程中处于什么位置呢,为什么代码里没有这个判断?求大佬解答
将apk下载地址配到fallback 参数上,下载出来的apk会是txt文件
系统版本android 6.0
京东应该属于微信自家的白名单系统里的,尝试了N久没成功。
const option = {
scheme: {
protocol: 'openapp.jdmobile',
},
outChain: {
protocol: 'openapp.jdmobile',
path: 'virtual',
key: 'params={"des":"HomePage","category":"jump","sourceValue":"","sourceType":""}',
},
intent: {
package: 'com.jingdong.app.mall',
scheme: 'openapp.jdmobile',
},
universal: {
host: '', // 未知
pathKey: '', // 未知
},
appstore: 'https://itunes.apple.com/cn/app/id414245413',
yingyongbao: 'https://a.app.qq.com/o/simple.jsp?pkgname=com.jingdong.app.mall',
fallback: '',
timeout: 2000,
};
const lib = new CallApp(option);
const callButton = document.querySelector('#call-button');
callButton.addEventListener('click', () => {
lib.open({
path: '', // 未知
});
});
Android Chrome 72.0.3626.105
iOS Chrome 73.0.3683.68
按照文档填了 intent,手机 Chrome 浏览器还是无法唤起应用
在微信中唤醒app ios可以跳转详情页 安卓无法跳转到详情页
没关注的话到关注那页,已关注就直接进入公众号。就和扫描二维码的结果一样。这种想法能实现吗?
怎么获取公众号的链接地址
哈喽哈喽,距离上一次的issue
已经过去了3个月了,关于唤端最近遇到了一个问题,故又来*扰你了🤣🤣
"callapp-lib": "^2.1.5"
export const handleCallApp = (path = "", param = null) => {
let openObj = param
? {
path,
param
}
: {
path
},
callBackUrl = "ios就是app store地址,安卓就是应用宝地址",
options = {
scheme:{
protocol:"url scheme的scheme字段",
host:"url scheme的host字段"
},
intent:{
package:"安卓包名",
scheme:"url scheme的scheme字段"
},
fallback:callBackUrl,
appstore:"app store地址",
yingyongbao:"应用宝地址"
},
callLib = new CallApp(options)
callLib.open(openObj)
}
配置代码还是之前的,只是做了参数的处理,因为有的页面需要传参,有的不需要
当点击打开APP的按钮,调用我写的这个唤端的方法,浏览器会弹出提示框,当用户点击打开,那就走正常的流程,有的能直接打开app,有的要经过应用宝/app store再打开app,有的打开失败停留到应用宝/app store页面
但是当用户点击取消的时候,我看了其他的问题,发现点取消是算唤起失败,会走失败回调对吧?可是:
这里我用我自己的安卓手机,用uc浏览器试的,提示框出来点击取消,不打开app,此时会跳转到应用宝,失败回调执行了!后退的时候再次点击打开app,依旧是到应用宝,刷新页面也不行,非要关闭浏览器重新打开网页重新唤端才行
ios的safari,弹出提示框之后点击取消,此时地址栏里闪一下,然后弹出一个错误提示Safari浏览器打不开该网页, 因为网址无效
,录屏之后反复观摩(🤣🤣)发现闪的那一下:
能看到itunes.apple.com
以及itms-appss://apps.apple.com/cn/app/我司ios应用app store的部分内容
,因为屏幕窄,所以只能看到这些,第二个出现之后错误弹窗才出现的,但是为何会有第一个出现,以及第一个和第二个url之间什么关系我暂时没弄明白🤣🤣
对比我司的ios应用app store的地址:https://itunes.apple.com/cn/app/xxx
发现:
apple.com/cn/app/xxx
但是是不是完全比配商店地址的后半部分我不确定,因为屏幕窄,没能看全……但是能确定的是无论哪个url都不是我司应用的商店地址,如果是了,也就打开商店了,而不会报错了对吧?
所以大佬能不能帮忙看下有没有什么思路可以解决这两个问题:
万分感谢
Chrome for Android没有设置Intent的情况下无效,跟代码发现无法通过iframe.src调用schema,本地测试通过a.href的方式可以成功调用,能否对chrome单独处理一下?
参考另一个库的研究过程(H5CallUpNative,不支持Universal links)
https://github.com/AlanZhang001/H5CallUpNative
前段时间在做一些H5页面,落地页占比较大,落地页承担的职责就是引流。引流有两种形式,同时也是我们对唤端的定义:引导已下载用户打开APP,引导未下载用户下载APP。
引导已下载用户打开APP,从数据上说用户停留在APP中的时间更多了,是在提高用户粘性;从体验上说,APP体验是要比H5好的。引导未下载用户下载APP,可以增加我们的用户量。
上面其实分别解释了 什么是唤端 以及 为什么要唤端,也就是 3W法则 中的 What 和 Why,那么接下来我们就要聊一聊 How 了,也就是 如何唤端 。
我们先来看看常见的唤端方式以及他们适用的场景:
我们的手机上有许多私密信息,联系方式、照片、银行卡信息...我们不希望这些信息可以被手机应用随意获取到,信息泄露的危害甚大。所以,如何保证个人信息在设备所有者知情并允许的情况下被使用,是智能设备的核心安全问题。
对此,苹果使用了名为 沙盒 的机制:应用只能访问它声明可能访问的资源。但沙盒也阻碍了应用间合理的信息共享,某种程度上限制了应用的能力。
因此,我们急需要一个辅助工具来帮助我们实现应用通信, URL Scheme 就是这个工具。
我们来看一下 URL 的组成:
<scheme>://<host>:<port>[path][?query][#fragment]
我们拿 https://www.baidu.com
来举例,scheme 自然就是 https
了。
就像给服务器资源分配一个 URL,以便我们去访问它一样,我们同样也可以给手机APP分配一个特殊格式的 URL,用来访问这个APP或者这个APP中的某个功能(来实现通信)。APP得有一个标识,好让我们可以定位到它,它就是 URL 的 Scheme 部分。
APP | 微信 | 支付宝 | 淘宝 | 微博 | 知乎 | 短信 | |
---|---|---|---|---|---|---|---|
URL Scheme | weixin:// | alipay:// | taobao:// | sinaweibo:// | mqq:// | zhihu:// | sms:// |
上面表格中都是最简单的用于打开 APP 的 URL Scheme,下面才是我们常用的 URL Scheme 格式:
行为(应用的某个功能)
|
scheme://host:port/[path][?query]
| |
应用标识 功能需要的参数
安卓的原生谷歌浏览器自从 chrome25 版本开始对于唤端功能做了一些变化,URL Scheme 无法再启动Android应用。 例如,通过 iframe 指向 weixin://
,即使用户安装了微信也无法打开。所以,APP需要实现谷歌官方提供的 intent:
语法,或者实现让用户通过自定义手势来打开APP,当然这就是题外话了。
intent:
HOST/URI-path // Optional host
#Intent;
package=[string];
action=[string];
category=[string];
component=[string];
scheme=[string];
end;
如果用户未安装 APP,则会跳转到系统默认商店。当然,如果你想要指定一个唤起失败的跳转地址,添加下面的字符串在 end;
前就可以了:
S.browser_fallback_url=[encoded_full_url]
下面是打开 Zxing 二维码扫描 APP 的 intent。
intent:
//scan/
#Intent;
package=com.google.zxing.client.android;
scheme=zxing;
end;
打开这个 APP ,可以通过如下的方式:
<a href="intent://scan/#Intent;scheme=zxing;package=com.google.zxing.client.android;S.browser_fallback_url=http%3A%2F%2Fzxing.org;end"> Take a QR code </a>
Universal Link 是苹果在 WWDC2015 上为 iOS9 引入的新功能,通过传统的 HTTP 链接即可打开 APP。如果用户未安装 APP,则会跳转到该链接所对应的页面。
传统的 Scheme 链接有以下几个痛点:
有大量的文章会详细的告诉我们如何配置,你也可以去看官方文档,我这里简单的写一个12345。
applinks:
为前缀apple-app-site-association
文件,文件名必须为 apple-app-site-association
,不带任何后缀.well-known
目录下这里放一下我们在配置过程中遇到的坑,当然首先你在配置过程中必须得严格按照上面的要求去做,尤其是加粗的地方。
跨域问题
IOS 9.2 以后,必须要触发跨域才能支持 Universal Link 唤端。
IOS 那边有这样一个判断,如果你要打开的 Universal Link 和 当前页面是同一域名,ios 尊重用户最可能的意图,直接打开链接所对应的页面。如果不在同一域名下,则在你的 APP 中打开链接,也就是执行具体的唤端操作。
Universal Link 是空页面
Universal Link 本质上是个空页面,如果未安装 APP,Universal Link 被当做普通的页面链接,自然会跳到 404 页面,所以我们需要将它绑定到我们的中转页或者下载页。
通过前面的介绍,我们可以发现,无论是 URL Scheme 还是 Intent 或者 Universal Link ,他们都算是 URL ,只是 URL Scheme 和 Intent 算是特殊的 URL。所以我们可以拿使用 URL 的方法来使用它们。
<iframe src="sinaweibo://qrcode">
在只有 URL Scheme 的日子里,iframe 是使用最多的了。因为在未安装 app 的情况下,不会去跳转错误页面。但是 iframe 在各个系统以及各个应用中的兼容问题还是挺多的,不能全部使用 URL Scheme。
<a href="intent://scan/#Intent;scheme=zxing;package=com.google.zxing.client.android;end"">扫一扫</a>
前面我们提到 Intent 协议,官方给出的用例使用的就是使用的 a 标签,所以我们跟着一起用就可以了。
使用过程中,对于动态生成的 a 标签,使用 dispatch
来模拟触发点击事件,发现很多种 event 传递过去都无效;使用 click()
来模拟触发,部分场景下存在这样的情况,第一次点击过后,回到原先页面,再次点击,点击位置和页面所识别位置有不小的偏移,所以 Intent 协议从 a 标签换成了 window.location。
URL Scheme 在 ios 9+ 上诸如 safari、UC、QQ浏览器中, iframe 均无法成功唤起 APP,只能通过 window.location 才能成功唤端。
当然,如果我们的 app 支持 Universal Link,ios 9+ 就用不到 URL Scheme 了。而 Universal Link 在使用过程中,我发现在 qq 中,无论是 iframe 导航 还是 a 标签打开 又或者 window.location 都无法成功唤端,一开始我以为是 qq 和微信一样禁止了 Universal Link 唤端的功能,其实不然,百般试验下,通过 top.location 唤端成功了。
如果唤端失败(APP 未安装),我们总是要做一些处理的,可以是跳转下载页,可以是 ios 下跳转 App Store... 但是Js 并不能提供给我们获取 APP 唤起状态的能力,Android Intent 以及 Universal Link 倒是不用担心,它们俩的自身机制允许它们唤端失败后直接导航至相应的页面,但是 URL Scheme 并不具备这样的能力,所以我们只能通过一些很 hack 的方式来实现 APP 唤起检测功能。
// 一般情况下是 visibilitychange
const visibilityChangeProperty = getVisibilityChangeProperty();
const timer = setTimeout(() => {
const hidden = isPageHidden();
if (!hidden) {
cb();
}
}, timeout);
if (visibilityChangeProperty) {
document.addEventListener(visibilityChangeProperty, () => {
clearTimeout(timer);
});
return;
}
window.addEventListener('pagehide', () => {
clearTimeout(timer);
});
APP 如果被唤起的话,页面就会进入后台运行,会触发页面的 visibilitychange 事件。如果触发了,则表明页面被成功唤起,及时调用 clearTimeout ,清除页面未隐藏时的失败函数(callback)回调。
当然这个事件是有兼容性的,具体的代码实现时做了事件是否需要添加前缀(比如 -webkit- )的校验。如果都不兼容,我们将使用 pagehide 事件来做兜底处理。
透过上面的几个点,我们可以发现,无论是 唤端媒介 、 调用唤端媒介 还是 判断唤端结果 都没有一个十全十美的方法,我们在代码层上能做的只是在确保最常用的场景(比如 微信、微博、手百 等)唤端无误的情况下,最大化的兼容剩余的场景。
好的,我们接下来扯一些代码以外的,让我们的 APP 能够在更多的平台唤起。
微信、微博、手百、QQ浏览器等。
这些应用能阻止唤端是因为它们直接屏蔽掉了 URL Scheme 。接下来可能就有看官疑惑了,微信中是可以打开大众点评的呀,微博里面可以打开优酷呀,那是如何实现的呢?
它们都各自维护着一个白名单,如果你的域名在白名单内,那这个域名下所有的页面发起的 URL Scheme 就都会被允许。就像微信,如果你是腾讯的“家属”,你就可以加入白名单了,微信的白名单一般只包含着“家属”,除此外很难申请到白名单资质。但是微博之类的都是可以联系他们的渠道童鞋进行申请的,只是条件各不相同,比如微博的就是在你的 APP 中添加打开微博的入口,三个月内唤起超过 100w 次,就可以加入白名单了。
腾讯应用宝直接打开 APP 的某个功能
刚刚我们说到,如果你不是微信的家属,那你是很难进入白名单的,所以在安卓中我们一般都是直接打开腾讯应用宝,ios 中 直接打开 App Store。点击腾讯应用宝中的“打开”按钮,可以直接唤起我们的 APP,但是无法打开 APP 中的某个功能(就是无法打开指定页面)。
腾讯应用宝对外开放了一个叫做 APP Link 的申请,只要你申请了 APP Link,就可以通过在打开应用宝的时候在应用宝地址后面添加上 &android_schema={your_scheme}
,来打开指定的页面了。
信息量很大!各种问题得自己趟坑验证!内心很崩溃!
不用愁,已经为你准备好了药方,只需照方抓药即可😏 —— npm 包 callapp-lib
它能在大部分的环境中成功唤端,而且炒鸡简单啊,拿过去就可以用啊,还支持很多扩展功能啊,快来瞅瞅它的 文档 啊~~~
exuecloud://splash?thirdId=123&isBind=456
url scheme协议是这种形式的,请教下thirdId=123&isBind=456该放到option里的何处
你好,谢谢你的开源,我从文档看到,
实例化过程中,需要传递一个 options 对象给类,options 对象各属性需要严格按照下面的格式。
下面所有不是必填的,如果你不需要传值,就不要写这个属性,而不是传递一个空字符串或者空对象,callapp-lib 并未对这种情况进行严格的检测。
恰好我有个 APP 只有 iOS 端,没有传到 intent 这个字段,在这个位置因为 intent 为 null 报错了,反馈一下,
也有可能我的例子比较特别,只有一个端。
function generateIntent(config, options) {
var outChain = options.outChain;
var intent = options.intent,
fallback = options.fallback;
var intentParam = _Object$keys(intent).map(function (key) { return key + '=' + intent[key] + ';'; }).join('');
写了一个Vue项目,我在mounted()中直接唤起就会失败,但是如果在单击事件后调起则能够成功被唤起,请问有没有解决方法呢,项目中需要一进到页面就唤起..,谢谢了
如题,我在修改了fallback地址后,唤端失败还是跳转的以前设置的链接,新修改的链接没有起作用,不知道这是什么原因,求解答
Line 120 in 291baa0
在看代码的时候发现安卓下的判断逻辑是 原生Chrome浏览器走表签唤起,不是才走iframe。是否说明原生Chrome浏览器下唤起的成功率更高,而在第三方浏览器下使用iframe成功率更高呢?
感谢作者对开源的贡献~
如题,callapp 版本1.7.3,在iOS手机上未安装要唤起的App的情况下,执行唤端操作后,先弹出无法打开网页的提示,关掉提示后才弹出去AppStore。
如果是安装了App的话则可以正常唤起,代码如下:
const CallApp = require('callapp-lib');
const option = {
protocol: 'youpeng',
intent: {
package: 'com.ypl.meetingsharec',
scheme: 'youpeng',
},
// universal: {
// host: 'm1.youpenglai.com',
// pathKey: '',
// },
appstore: 'https://itunes.apple.com/cn/app/id1238992209',
yingyongbao: 'http://a.app.qq.com/o/simple.jsp?pkgname=com.ypl.meetingshare',
fallback: 'http://a.app.qq.com/o/simple.jsp?pkgname=com.ypl.meetingshare',
};
const callApp = new CallApp(option);
callApp.open({
path: ''
});
环境:iOS 12.0
机型:iPhone X,iphone 6s plus
问题:手机上装了测试版的app,app已配置 universal link,微信浏览器打开H5页面,iPhone X 会提示“即将离开微信,在App Store中打开”,6sp不会提示,再去Safari打开都可以成功唤起app,我看到源码中检测到微信环境,会传入应用的App Store地址,我把这部分改成
if (browser.isWechat) { return; }
还是会弹这个提示,是为什么呢?
如题。ios下是可以唤起app的,提示目标页面不存在,这个怀疑是参数的拼接有问题吧,是否在程序里多加了斜杠之类的呢?
安卓没有办法唤起app,配置是按照你之前closed的一个issue做的。
哈喽哈喽,唤端工作循序渐进,于是我又来*扰你了🤣🤣
let options = {
scheme:{
protocol:"url scheme的scheme字段",
host:"url scheme的host字段"
},
intent:{
package:"安卓包名",
scheme:"url scheme的scheme字段"
},
fallback:"ios就是app store地址,安卓就是应用宝地址",
appstore:"app store地址",
yingyongbao:"应用宝地址"
},
callLib = new CallApp(options)
callLib.open({
path:""
})
url shceme
, 测试自带浏览器,以及微信,qq,uc浏览器,qq浏览器这几个主流设备appLink提供了android_schema和ios_schema
安卓微信是跳应用宝唤起指定app页面,ios微信目前是跳转appstore
建议ios也跳转应用宝,应用宝会提示在safari打开,safari打开后再尝试唤起指定app页面
大部分安卓浏览器第一次拉起时都会询问用户是否打开,用户未确认前,就会跳转到fallback页面去,
第二次以后就不会了,请问有什么方案吗
return intent://${urlPath}/${intentTail}; 应改为 return intent://${urlPath}${intentTail}
QQ 禁了Universal Link之后, 已下载app的, callapp-lib直接跳转appStore了, 这样就不能直接打开某个app页面了吧. callapp-lib有没有针对ios QQ浏览器的配置, 打开一个引导从Safari打开的页面, 这样就能继续使用Universal Link了
同时设置yingyongbao和fallback的话,页面跳转fallback;
只设置yingyongbao,页面跳转404;
请问能否给一份例子,实例参数是如何填写的?能否给个完整的例子,文档看的一知半解,谢谢。
求解, aliyun://forward/app?target_=/buy/renew 我想唤起这个页面。之前自己做了个唤端方法封装。但是小米与华为机型唤端失败。
想了想,看了您的博客,然后用了js自行触发的事件驱动,还是不行。
又看了您的作品,于是引了进来,根据文档的说明,我对此做出了解析,于是有了以下的代码。但两端都唤端失败。
代码如下,还是没明白解析上哪里出了问题。
const options = {
scheme: {
protocol:"aliyun://",
},
intent:{
package:"com.alibaba.aliyun",
scheme:"aliyun://",
},
fallback:"https://m.aliyun.com/product/ecs/renew#/"
};
const callLib = new CallApp(options);
callLib.open({
param: {
target_="/buy/renew"
},
path: 'forward/app'
});
// 这里对应到dist目录下面的index.cjs.js
<script src="__JS__/index.cjs.js"></script> <script> const options = { protocol: 'iOSJulyedu', appstore: "https://itunes.apple.com/cn/app/id1102275343?mt=8", yingyongbao: "//a.app.qq.com/o/simple.jsp?pkgname=com.youku.shortvideo", fallback: "https://dianliu.youku.com/service/advertise", // 这里暂时还是你们那个电流的地址 logFunc: function() { console.log('11'); } }; const callLib = new CallApp(options); document.querySelector("#download").addEventListener("click",function(){ callLib.open({ path: 'redir1', param: { course: 100, video: 885 }, callback: function() { alert('失败') } }); }); </script>//1.
const weixinOpt = {
protocol: 'weixin://',
intent: {
package: 'com.tencent.mm',
scheme: 'weixin://'
},
appstore: 'https://itunes.apple.com/cn/app/id414478124',
yingyongbao: 'https://a.app.qq.com/o/simple.jsp?pkgname=com.tencent.mm',
// fallback: location.origin
fallback: 'https://a.app.qq.com/o/simple.jsp?pkgname=com.tencent.mm'
};
//2.
const weixinApp = new CallApp(weixinOpt);
//3.
weixinApp.open({
path: '',
param: {},
});
您好,看一下我唤起微信配置有问题吗,Android唤醒一直失败。浏览器都无法唤醒。
方便的话加个微信请教一下zhaojianpeng_zippy
页面加载完毕就自动触发click事件,唤起app失败,这是安卓手机的问题嘛
怎么破
机型是mi mix2s,扫码运行作者的demo下载安装了小视频app,再次扫码点击按钮没有唤起小视频app,还是跳转到下载页面提示下载,多次测试还是如此
Line 113 in 3f15dee
测试小米手机自带浏览器打不开app
const qqApp = new CallApp(qqOpt);
qqApp.open({
path: '',
param: {},
callback: ()=>{
Toast.info('请安装QQ')
}
});
调用的时候设置了自定义的失败callback.
唤起成功时,也会出现提示框。
因为checkOpen时,网页还没有进到后台。document.hidden是undefined,导致还会调用callback.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.