官方有示例代码,貌似很简单,一个a标签就实现了。官网https://qun.qq.com/join.html
授权登录,选择自己创建的某个QQ群后,会生成对应的url。
运行起来,PC端可以顺利调起QQ。
然而把页面放到app内打开,就无法唤起QQ了。
在Android和iOS上都无法唤起加群界面。
尝试 1: 升级QQ
不管用。不是QQ版本的问题。
尝试2:使用其它url
通过各种搜索,一共尝试了通过以下4种方式获得的url:(“保密”替换成群key,可从官网生成的代码获取):
<a href="//shang.qq.com/wpa/qunwpa?idkey=保密" target="_blank">官网网页代码</a>
<a href="https://jq.qq.com/?_wv=保密&k=保密" target="_blank">群资料-分享-复制加群链接</a>
<a href="mqqapi://card/show_pslcard?src_type=internal&version=1&uin=QQ群号&card_type=group&source=external">官网iPhone代码</a>
<a href="mqqopensdkapi://bizAgent/qm/qr?url=http%3A%2F%2Fqm.qq.com%2Fcgi-bin%2Fqm%2Fqr%3Ffrom%3Dapp%26p%3Dandroid%26k%3D保密">官网Android代码</a>
在app内仍然是无法唤起QQ。
尝试 3: 用手机自带浏览器打开
4种 url结果如下:
①官网网页代码→能唤起QQ,但没有唤起加群界面
②加群链接→成功唤起加群界面
③官网iPhone代码→成功唤起加群界面
④官网Android代码→成功唤起加群界面
在手机自带浏览器打开比app内打开多了这个弹层,猜想是否app内webview禁止了h5展示alert导致?
尝试4:让Android同学修改webview的设置,允许h5页面弹出alert。
alert是可以弹了,然而还是不管用。
客户端同学说,那就客户端实现吧,前端调桥就可以。
感觉还可以再抢救一下。
到了这里已经可以比较精确地定位到问题是:app内的webview不支持h5唤起另一个app。所以应该解决的问题是让客户端的webview能支持h5中的url以唤起app的方式打开。
尝试5:让Android端webview加上以下代码:
public boolean shouldOverrideUrlLoading(WebView view, String url) {if (URLUtil.isNetworkUrl(url)){view.loadUrl(url);return true;} else {try {startActivity(Intent.parseUri(url, Intent.URI_INTENT_SCHEME)); // 关键是这里} catch (Exception ex) {ex.printStackTrace();}return true;}}
并不是必须完全按以上代码,大概就是不同url不同打开方式。想要唤起app的话,跟h5页的打开方式是不同的。
由于Android同学认为不应该太过于放宽限制,所以判断以mqq开头的url就用唤醒app的方式打开,经测试,第三种第四种url都可以在Android唤起加群页面。
至此,就完成啦。这个功能前端开发量其实不多,只是需要客户端支持。