GithubHelp home page GithubHelp logo

H5 唤起 APP 指南 about callapp-lib HOT 37 OPEN

suanmei avatar suanmei commented on May 22, 2024
H5 唤起 APP 指南

from callapp-lib.

Comments (37)

suanmei avatar suanmei commented on May 22, 2024 1

请问可否进入微信之后跳转小程序界面?

暂时没有这种场景,不过可以支持哈,我看一下本周实现一下

from callapp-lib.

believeZJP avatar believeZJP commented on May 22, 2024

唤醒微信打开指定页面,比如选择一个聊天和唤醒QQ打开发送给好友列表,是要在open方法里传path吗, 应该传什么值,有对应的文档吗@suanmei

from callapp-lib.

suanmei avatar suanmei commented on May 22, 2024

@BEL

唤醒微信打开指定页面,比如选择一个聊天和唤醒QQ打开发送给好友列表,是要在open方法里传path吗, 应该传什么值,有对应的文档吗@suanmei

唤醒微信打开指定页面,比如选择一个聊天和唤醒QQ打开发送给好友列表,是要在open方法里传path吗, 应该传什么值,有对应的文档吗@suanmei

不可能让你调这些功能性的东西的,调用聊天窗口之类的都是需要经过微信校验的;不然随便一个钓鱼网站放一个 scheme 引导你点开触发支付就血崩了

from callapp-lib.

believeZJP avatar believeZJP commented on May 22, 2024

image
所以唤醒APP后打开这个页面时做不到的?

from callapp-lib.

suanmei avatar suanmei commented on May 22, 2024

image
所以唤醒APP后打开这个页面时做不到的?

嗯,确实不行。因为都是需要通过sdk去做的

from callapp-lib.

believeZJP avatar believeZJP commented on May 22, 2024

好,多谢啦~~

from callapp-lib.

Sherryer avatar Sherryer commented on May 22, 2024

看大佬源码中的实现和 Issues 中的实现不大一样,Issues 中的是早些版本的嘛?
在源码中换成了 setTimeout,我理解的安卓中 setInterval 被卡住是卡在当前 interval 的下一次 interval 循环,而 setTimeout 只有一次事件循环,会不会无法在安卓下卡住呢。
望指点谢谢大佬

const checkOpen = setInterval(() => {
	count++;
	waitTime = new Date() - initialTime;

	if (waitTime > 2500) {
		clearInterval(checkOpen);
		cb();
	}

	if (counter < 100) return;

	const hide = document.hidden || document.webkitHidden;

	if (!hide) {
		cb(); // 唤端失败的回调函数
	}
}, 20);
export function checkOpen(cb, timeout) {
  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);
  });
}

from callapp-lib.

suanmei avatar suanmei commented on May 22, 2024

@Sherryer 其实两个版本都是可以的,上面是我很早的时候的写法,后来发现并不需要放在 setInterval 中,setTimeout 同样可以,也省去了 setInterval 的轮询。

setTimeout 并不会被卡住。

setInterval 实现中的

if (waitTime > 2500) {
  clearInterval(checkOpen);
  cb();
}

就是为了应对卡住或者这 2000ms (当然 2000ms是随便设置的) 中有什么其他特别费时的计算占用很长的时间这种场景,去除不必要的轮询

from callapp-lib.

uyarn avatar uyarn commented on May 22, 2024

请问可否进入微信之后跳转小程序界面?

from callapp-lib.

shurong-wang avatar shurong-wang commented on May 22, 2024
if (waitTime > 2500) {
    clearInterval(checkOpen);
    cb();
}
if (!hide) {
    cb(); // 唤端失败的回调函数
}

请教一下,waitTime > 2500 这段代码判定的是唤端成功,还是失败?
看文章描述,像是成功;看下一段代码注释 cb(); // 唤端失败的回调函数,又像是失败

from callapp-lib.

suanmei avatar suanmei commented on May 22, 2024

是失败的意思。失败的时候才需要执行失败回调函数。

时间已经过了 设定的 等待时间,页面还没有隐藏,算是失败

from callapp-lib.

shurong-wang avatar shurong-wang commented on May 22, 2024

APP 如果被唤起的话,页面就会进入后台运行,setInterval 在 android 中停止运行。
我们的判断条件比预期时间多设置了 500ms,所以如果安卓中 setInterval 内的函数执行 100 次以内所费时间超过 2500ms,则说明 APP 唤起成功,反之则代表失败

根据文章里这段描述,waitTime > 2500 感觉还是呼端成功。看了一些其他的文章和代码,都是按呼端成功判断的。所以,这部分还是比较困惑

https://www.cnblogs.com/caizhenbo/p/6339715.html
https://juejin.im/post/5ac44a9c6fb9a028d82bf98b

from callapp-lib.

shurong-wang avatar shurong-wang commented on May 22, 2024

是失败的意思。失败的时候才需要执行失败回调函数。

时间已经过了 设定的 等待时间,页面还没有隐藏,算是失败

可能我没描述清楚,我想确定的是 if (waitTime > 2500) {} 判断下的 cb() 是呼起成功还是失败?不是if (!hide){} 判断下的 cb()

from callapp-lib.

suanmei avatar suanmei commented on May 22, 2024

@shurong2199 你的理解是正确的。我在项目中实际并没有使用 waitTime 去判断,因为 visibilitychange 的兼容性足够应对

晚上我会把文章里的代码更新一下

image

from callapp-lib.

shurong-kavout avatar shurong-kavout commented on May 22, 2024

@shurong2199 你的理解是正确的。我在项目中实际并没有使用 waitTime 去判断,因为 visibilitychange 的兼容性足够应对

晚上我会把文章里的代码更新一下

image

清楚了,感谢~

from callapp-lib.

FrankCheungDev avatar FrankCheungDev commented on May 22, 2024

你好,请教一下,andorid系统下,对于配置了host的情况来说,generateScheme所生成的链接中并没有能够带上host,会造成无法唤起app的问题。如果我将host拼接到path传入,是否会影响到ios系统下app的唤起?谢谢

from callapp-lib.

suanmei avatar suanmei commented on May 22, 2024

@FrankCheungCN 配置了host是你设置了代理?安卓和ios你们的scheme是不一样的吗

from callapp-lib.

FrankCheungDev avatar FrankCheungDev commented on May 22, 2024

@FrankCheungCN 配置了host是你设置了代理?安卓和ios你们的scheme是不一样的吗

配置了host是指安卓APP的intent filter配置了host,如
<intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:host="myhost" android:scheme="myscheme" /> </intent-filter>
按照https://developer.android.com/guide/topics/manifest/data-element , url scheme应该是由以下及部分组成:
<scheme>://<host>:<port>[<path>|<pathPrefix>|<pathPattern>]
我看到generateScheme生成的链接中,只有path和param,并没有前面的host和port,是这个问题。
所以现在我直接用生成的链接无法唤起APP,不知道有什么方法,谢谢

from callapp-lib.

suanmei avatar suanmei commented on May 22, 2024

@FrankCheungCN
很少有带host或者port的🤣

我可以给加上,这样在 iphone 上生成的 scheme 同样会带有 host ,你们 android 和 ios 的 scheme 应该是统一的吧

from callapp-lib.

FrankCheungDev avatar FrankCheungDev commented on May 22, 2024

@FrankCheungCN
很少有带host或者port的🤣

我可以给加上,这样在 iphone 上生成的 scheme 同样会带有 host ,你们 android 和 ios 的 scheme 应该是统一的吧

是的,统一的。谢谢噢

from callapp-lib.

suanmei avatar suanmei commented on May 22, 2024

@FrankCheungCN 支持 scheme host以及port的功能会在周五的2.0.0版本中发布

from callapp-lib.

FrankCheungDev avatar FrankCheungDev commented on May 22, 2024

@FrankCheungCN 支持 scheme host以及port的功能会在周五的2.0.0版本中发布

好的,感谢。我到时候更新一下

from callapp-lib.

suanmei avatar suanmei commented on May 22, 2024

@FrankCheungCN 2.0.0 已更新,API 的修改可以参照 README.md 或者 releases

from callapp-lib.

wood-liu92 avatar wood-liu92 commented on May 22, 2024

请问有没有碰到过某些android机型无法自动唤起app必须手动点击的情况呢

from callapp-lib.

suanmei avatar suanmei commented on May 22, 2024

@lww555 参照#15

from callapp-lib.

haishengXie0712 avatar haishengXie0712 commented on May 22, 2024

@suanmei 我扫你提供的二维码,在UC浏览器,华为浏览器发现并不可以正常吊起App.

from callapp-lib.

suanmei avatar suanmei commented on May 22, 2024

@haishengXie0712 唤端配置**有个单词写错了,已修复 02bbd7b

from callapp-lib.

haishengXie0712 avatar haishengXie0712 commented on May 22, 2024

@suanmei 我刚测试了一下确实可以,我这两天看了您的文章,然后自己类似造了个轮子.发现在搜狗浏览器里面会调不起APP.我刚拿了你的测试,也是不行.现在有点卡在这里没有了头绪了.

from callapp-lib.

suanmei avatar suanmei commented on May 22, 2024

搜狗里用的是intent还是scheme

from callapp-lib.

haishengXie0712 avatar haishengXie0712 commented on May 22, 2024

用的是indent

from callapp-lib.

suanmei avatar suanmei commented on May 22, 2024

有测试过 scheme是否可行吗

from callapp-lib.

haishengXie0712 avatar haishengXie0712 commented on May 22, 2024

我尝试过也是不行的

from callapp-lib.

suanmei avatar suanmei commented on May 22, 2024

那就是真的不行了。可能搜狗也有类似白名单的这种机制,这种就不是技术可以绕过去得了

from callapp-lib.

haishengXie0712 avatar haishengXie0712 commented on May 22, 2024

@suanmei 你好,我还想问一下个问题.就是我希望页面进来直接唤起APP,不经过按钮点击的.就是说我直接模拟点击a标签.但是发现在UC浏览器和谷歌浏览器下并不支持.我想问一下,有遇过类似的情况吗?

from callapp-lib.

suanmei avatar suanmei commented on May 22, 2024

可以参考一下 #15 , 打开直接唤起app 的兼容性不好

from callapp-lib.

cllgeek avatar cllgeek commented on May 22, 2024

楼主能给个用这个库唤起淘宝的例子吗,感谢

from callapp-lib.

suanmei avatar suanmei commented on May 22, 2024

@cllgeek 我不知道淘宝的scheme、universalLink都是什么;我们的场景都是调用自己公司的app,如果是使用其他app的三方服务,得调sdk,还有问题,提新的issue,这个issue有点过大了

from callapp-lib.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.