一、前置条件:
1.我们的音视频通话Android应用程序和对应的小程序均为发布版本,且微信小程序硬件框架应用也是发布版本。
2.小程序的胶囊按钮配置为closeButtonActionType=10,reloadButtonActionType=1
二、应用正常运行流程:
1.从首页进入联系人列表页面,然后打开小程序进行视频通话。
2.通话结束后关闭小程序,返回联系人列表页面。
3.我们的应用程序成为主屏幕应用,微信小程序硬件框架应用则在后台运行。(因为我们使用closeWxaApp接口关闭小程序时调用keepRunning参数传递true,以使小程序切至后台,与小程序胶囊按钮的行为一致)
三、Bug的出现:
当我们的应用程序发生过一次崩溃后,如下图:
应用进程终止,系统会回到小程序硬件框架应用的界面并自动进行通话,通话对象为上一次通话的对象,因为小程序硬件框架应用通话界面这里应该是有数据缓存的,然后挂断后,因为我们的应用程序进程已经结束了,所以就不会再收到小程序挂断电话后的消息了,而且因为胶囊按钮的配置,此时小程序也无法被手动关闭。
但是右上角胶囊按钮点击三个点按钮会弹出更多弹窗,如图所示:
点击菜单里的设置按钮会进入到一个页面里,如图:
再次返回后会又自动重新拨打电话, 如图所示:
挂断,回到通话结束页面,再次打开菜单点击分享按钮会出现一个弹窗,如图:
关闭该弹窗以后,又会去自动通话,如图:
这个Bug是百分之百会出现的,只要在小程序通话界面进行以上操作即可复现。
解决该Bug的方法是调用closeWxaApp接口,并将keepRunning参数传递为false,以强制停止小程序并回收相关系统资源。这样可以防止应用程序崩溃后返回到后台运行的小程序硬件框架应用界面时自动拨打电话的问题。
然而,这种解决方法会导致每次拨打电话都需要重新启动小程序,从而增加等待时间,带来一定的劣势。
打开分享页和设置页会触发小程序 App.onHide App.onShow,以及插件的 callPageOnShow事件,可以确认下小程序是否有在对应的生命周期里重新调用了通话接口?
请问下除了禁用胶囊按钮的退出小程序和三个点设置弹窗的功能,还有其他解决方案吗?
https://developers.weixin.qq.com/miniprogram/dev/framework/device/voip/call-wechat.html