Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于在微信,qq,qq浏览器唤端的情形 #26

Closed
SilentFlute opened this issue Mar 3, 2019 · 23 comments
Closed

关于在微信,qq,qq浏览器唤端的情形 #26

SilentFlute opened this issue Mar 3, 2019 · 23 comments

Comments

@SilentFlute
Copy link

哈喽哈喽,唤端工作循序渐进,于是我又来骚扰你了🤣🤣

js库版本

  • "callapp-lib": "^2.1.2"

配置代码

    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浏览器这几个主流设备

安卓(机型和系统忘了和安卓的同学确定了……🤣🤣)

  • 微信无法直接唤起,会打开一个中间页面, 页面上会提示在浏览器中打开,然后能在浏览器中唤起(这个页面不是自己写的,是应用宝自带的貌似);其他的没问题,都能直接唤起

ios(iphone 7, ios 12.1.4)

  • 鹅厂的都没法直接唤起,要经过一下app store,然后通过app store来唤起;只有自带和uc浏览器能直接唤起

遇到的问题

  1. 微信,QQ浏览器的话看你的文章里说需要加入白名单,因为目前它们都已禁止了通用链接/url scheme唤端
  2. 那qq呢,qq也需要加入白名单吗?
  • 加入白名单,应该只有那些大厂,牌子响当当的和鹅厂有深度合作的公司或者鹅厂投资的公司能进入吧,那这样的话是不是只有通过打开应用宝/app store之后再做唤起操作了呢?
@SilentFlute SilentFlute changed the title 关于在微信,qq分享,qq浏览器唤端的情形 关于在微信,qq,qq浏览器唤端的情形 Mar 3, 2019
@suanmei
Copy link
Owner

suanmei commented Mar 3, 2019

近期ios版本qq禁止了scheme和universalLink唤起app,安卓不受影响 - 18年12月23日

这个我代码里有写过注释

如果你要添加他们家白名单,99.9%没戏,就走中间页吧

@SilentFlute
Copy link
Author

@suanmei 哦哦,好的,谢谢啦~~
这边和产品沟通了下走中间页了,再次感谢

@SilentFlute
Copy link
Author

@suanmei 大佬,关于微信唤端,安卓手机,这边又遇到点问题:点击唤端之后会跳到一个中间页面,应该是鹅厂自己的中间页,我这边没写过,然后会提示在浏览器中打开,我点击右上角接着选择在浏览器中打开,之后有的机子跳浏览器之后能打开应用,但是有的跳浏览器之后就停留在应用宝的页面那不动了,应用宝上也没有打开的字样,都是下载的字样。这是兼容性问题吗,这个应该怎么搞啊?求指点,感谢

@SilentFlute SilentFlute reopened this Mar 20, 2019
@suanmei
Copy link
Owner

suanmei commented Mar 20, 2019

我刚才自己调了下,那个不叫中间页,那个就是应用宝的地址,只不过你的微信手机里没有应用宝 app ,所以没法判断你是否安装了你的 app ,你如果安装了应用宝在微信中是可以直接唤起应用宝,然后通过应用宝唤起你的 app 的

@SilentFlute
Copy link
Author

确实,那个不是中间页,就是应用宝自己的页面, 是类似这样的一个地址:https://a.app.qq.com/o/simple.jsp?pkgname=包名&android_schema=我的url schema#,微信提示在浏览器打开,点击浏览器打开之后,浏览器会打开一个应用宝的页面,打开的就是这个页面。
然而到了这个页面之后:

  • 没装应用宝:有的手机会直接打开app,而有的手机就会停留在这个页面不动
  • 装了应用宝:停留在这个页面的手机会打开应用宝,然后点应用宝的“安全打开”可以打开app
    那这样保险的做法我觉得是不是:只要是微信,就直接提示用户用浏览器打开,然后再让用户点一遍打开app的按钮,这样就保险了,就能唤起了,不过这样体验就……🤣🤣

@suanmei
Copy link
Owner

suanmei commented Mar 20, 2019

微信安卓端唤端通过应用宝打开,算是业界的一个通用方法,这个方法我也觉得尚可,因为如果装了应用宝,是可以直接唤起你的app并且直接打开想要打开的页面的。

如果按你的那个做法,你得在你的页面里面,做一个 ua 判断,ua 是微信就展示遮罩层,提示用户在浏览器中打开。那你这部分就是唤端逻辑和页面逻辑耦合在一起了。

当然,具体怎么做也是看你啦

@suanmei
Copy link
Owner

suanmei commented Mar 20, 2019

下次再有问题直接开一个新的issue吧😂

@SilentFlute
Copy link
Author

@suanmei 下次不那么着急关问题,至少等上线之后经过百万PV验证再关,哈哈🤣🤣

  1. 话说我发现微信中点击打开app,如果出现了应用宝的页面,提示“点击右上角选择浏览器打开”的页面的时候,此时页面的urlhttps://a.app.qq.com/o/simple.jsp?pkgname=包名&android_schema=我的url schema,而如果在浏览器中点击打开app,则可能是https://a.app.qq.com/o/simple.jsp?pkgname=包名而没有后面的url schema部分,这个是因为唤端失败,跳转了我设置的fallback了对吧?前一种情况中url拼了url shcema是你这个库做的处理是吧?
  2. 微信安卓唤端通过应用宝打开,是业界的一个通用方法,如果用户装了应用宝,那自然是方便了,直接唤起应用宝,然后去应用宝中打开app,但是要是没有装应用宝呢?那就只有通过自己写一个遮罩一个中间页提示用户去浏览器中打开我的页面了对吧
  3. 另外还有一种情况就是:有的机子,只在部分浏览器中能成功唤端,其他的都不能唤起,也就是我通过遮罩/中间页的方式引导用户离开微信去浏览器打开,都会走到fallback这里停住,就是到了应用宝的界面,界面上都是下载的字样,没有打开的字样……这种是不是就没辙了呢?毕竟唤端的逻辑你的库都帮我们封装好了,但是还是走到了失败的回调
  4. 以及另一种情况:装了应用宝,原先不能唤起的浏览器能唤起了,甚至都不用先唤起应用宝,直接就能唤起app……但是这需要用户装过应用宝,如果没装过就不行,就会失败,走到应用宝下载应用的页面,但是装了应用宝卸载之后就又能直接唤起了,啊,头大,求指点🤣
    总之就是能不能有一种方法,能保证在浏览器中能唤起,不需要通过应用宝,毕竟应用宝不同于app store一样每个安卓机子上都一定有,能在浏览器中都唤起了,那么微信里啊,qq里啊都能通过遮罩/中间页引导用户到浏览器中打开,然后再唤起app

@SilentFlute
Copy link
Author

貌似我试了试,不能唤起app的,比如微信和某些浏览器,只要装了应用宝之后,都能通过唤起应用宝,再点击应用宝的打开按钮唤起app,或者能不经过应用宝,而直接打开app

@suanmei
Copy link
Owner

suanmei commented Mar 20, 2019

我看你把微信和浏览器的唤端混在一起了,浏览器是浏览器,微信是微信,微信用应用宝的策略是因为基本没有几个app能在微信中唤端。

scheme 在浏览器中唤端虽然有失败的情况,但你感觉是安装应用宝的人多还是能成功唤起app的浏览器多。

给你一个建议是让你们的安卓同学增加一点开发量支持一下 APP Link,效果等同于 ios中的 universal Link。这是最好的办法。

最后回答一下第一个问题,在浏览器中不可能出现应用宝的链接,因为只有在微信中才会打开应用宝🤔

@SilentFlute
Copy link
Author

啊,这么说貌似还真是,微信,浏览器,我混起来了🤣🤣
我觉得是能通过url schema唤起app的浏览器比安装应用宝的用户多吧,毕竟后者是用户的习惯,但是你后面说建议让安卓同学支持一下应用宝的APP Link,就意味着装应用宝的用户比能通过url schema唤起app的浏览器多了是吧?因为我看了你在掘金发的文章,APP Link是通过应用宝来打开指定页面用的,是和应用宝有关的东西;
用户如果安装了应用宝,那问题就不存在了,无论是通过微信唤端,还是浏览器唤端,都能通过唤起应用宝,然后通过应用宝来唤起app了,或者不通过应用宝而直接唤起app,总之最后都能唤起app了🤔🤔
可是就像你说的,有可能在浏览器中会存在唤端失败的情况,比如我引导用户离开微信到浏览器中打开,用户点了右上角,选择在浏览器中打开,结果浏览器中他点打开app,依旧唤起失败,这就尴尬了,毕竟没有办法判断哪个浏览器能唤端成功,然后让他选择那个浏览器。像这种有的浏览器唤起失败,有的唤起成功的,是不是就只能任其自生自灭了呢🤣🤣

@suanmei
Copy link
Owner

suanmei commented Mar 21, 2019

可能我没说清楚哈,我的意思是,应用宝的用户是远远小于 scheme 能成功唤起的浏览器的,而且 scheme 唤起可能不止在浏览器,有可能在钉钉、微博,是吧,都有可能。

然后 APP Link 和应用宝没有关系,它也是一种 url ,APP Link 之于andriod 如同 Universal Link 之于 ios,它是一种只要你安装了 app ,只要在安卓(现在市场大部分安卓系统版本都支持 APP Link)中,就 100% 可以唤起 app,现在还没看到有文章说微信禁止APP Link,你正好可以试验一下😂

至于你问的微信引导到浏览器还失败这种情况,目前就让它自生自灭了。原因有很多,比如,其实市场上现存的浏览器如果无法通过 scheme 唤端,有不少是因为它们也做了白名单限制,这是你无法跨过的

@SilentFlute
Copy link
Author

哦哦,原来这个app link不是应用宝的那个app link啊!我稍微看了下,安卓的app link就像你说的,类似iosuniversal link,另外还有一种是应用宝的app link,我看了下腾讯开放平台里的描述:应用宝AppLink,是移动互联网时代打通开发者App内资源与用户需求的一种新的模式。通过整合和索引合作APP的内部资源,将App内信息呈现给用户,用户通过点击相应内容可直接跳转至开发者Native App的指定页面,也就是你博文里面说的了。
然后的话这边还有几个问题要问下你🤣🤣:

  1. 我看了下你的这个库,里面没有关于安卓app link的配置, 这时候应该怎么使用安卓的app link呢?我判断如果是安卓,那我就window.location.href=app link来用?
  2. 如果安卓配置了app link,那配置里面的intent就不用传了对吧,毕竟不用这个了,而且文档里也说不是必填项
  3. 似乎有网友反映用安卓app link需要翻墙!?那不就呵呵了嘛,还是具体的你也不是太了解🤔🤔

@suanmei
Copy link
Owner

suanmei commented Mar 21, 2019

因为我们没实现 APP Link,所以我在 callapp-lib 库中没有添加。

关于你说的翻墙这点,我刚才看了下,好像是真的。怪不得国内关于 APP Link 应用的资料一直很少,后面我把这个更新到文章里,提醒大家注意一下😂

那看来没有更好的解决方法了,在安卓微信里就老老实实用应用宝吧

另外我看你的配置里没有配置 Universal Link,最好把这个能力配置上,唤端是真的强😏

@SilentFlute
Copy link
Author

omg……
安卓如果装了应用宝,那倒好说,微信直接打开应用宝,然后唤起app,可要是没装,就狗带了。
以及如果遇到没法唤起app的浏览器,那就只有让它自生自灭了。
啊,感觉这做了和没做差不多诶,这个功能太依赖环境了🤣🤣
另外就是iosuniversal link,配置起来好麻烦啊,又要跨域,又要重定向的,ios本身都会有app store,通过唤起app store再唤起app虽然不完美,universal link能直接唤起app,可以配置起来真的好麻烦啊,之前试了几次,一直各种失败🤣🤣

@suanmei
Copy link
Owner

suanmei commented Mar 21, 2019

你不能只考虑微信啊,兄dei

安卓微信没有更好的办法,各家手机厂牌都有自己的应用市场,谷歌应用商店没啥人用,同意不起来,微信又有点流氓。两全其美的方法目前是没有的,大家都在妥协

或者加把劲让腾讯爸爸收购了😂。。。

@SilentFlute
Copy link
Author

哈哈哈,大佬太幽默啦,让鹅厂爸爸收购,哈哈🤣
主要是微信现在用的人很多,所以我一直纠结在微信上
那所以最后就是:

  • 安卓微信就没辙了,就看用户有没有装应用宝了,有就唤起,没有就没法了(遇到没装应用宝也能唤起就是RP好了…)
  • 安卓的浏览器就看“命”了,遇到能唤起的浏览器就唤起(依旧是RP好…),遇到没法唤起的也是就没发了
    毕竟像你说的,有些是血缘的关系了🤣🤣

@suanmei
Copy link
Owner

suanmei commented Mar 21, 2019

可以考虑从小程序端发力解决,就是小程序从 APP 分享消息卡片的能力打通,从你们的 app 分享到微信以小程序卡片的形式,是可以从小程序中直接唤起 app 的。

@SilentFlute
Copy link
Author

emmm…你的意思是app中分享到微信中的内容是像分享一个小程序那样的,分享到微信中后是一个微信小程序卡片,然后再打开那个卡片再唤起app?
可是我这是要用网页唤起app啊,一开始是网页内容,然后才是app,就像淘宝手机页面,然后唤起淘宝手机客户端那样,你那个说法我不是太理解诶🤣🤣

@suanmei
Copy link
Owner

suanmei commented Mar 21, 2019

你用优酷或者即刻分享到微信就明白了,打开后的小程序里面有 '打开app' ,可以正常唤起app。

当然这个我也没操作过,不多瞎指点了,只是提供个思路

@SilentFlute
Copy link
Author

@suanmei 周一和PM沟通了下,不,应该是解释了一下,最后就只能维持现状了
微信打开看运气了,打不开一律到应用宝或者app store;
然后浏览器基本都能唤起,大佬666;
qq里面也基本都能唤起;
遇到换不起的都到应用宝或者app store。
这个问题就先关闭啦,有新的问题我再开一个issue,最后,再次感谢大佬提供的唤端库🤣🤣

@suanmei
Copy link
Owner

suanmei commented Mar 27, 2019

@SilentFlute 客气啦😁为人民服务

@SilentFlute
Copy link
Author

@suanmei 哈哈哈❤️❤️

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants