如何写一个自动抢微信红包的程序
一、基本原理
由于一个完整的发现红包、抢红包、拆红包流程需要10秒左右,而各种事件是以毫秒级的速度在不断触发,因此此类程序的核心问题是维护好一个全局的抢红包状态转换图,处理好各个事件处理任务的并发控制和相互协调,避免因状态走错而导致程序运行不稳定的情况。
二、主要流程
三、状态转换
鉴于整个抢红包流程耗时较长,本程序维护了一个全局的状态变量(供有七种状态),以控制任务流程,同时维护了一个全局的等待队列,以存放在此期间到达的新红包。对于由新通知消息触发的抢红包流程,其状态转换如下图所示。
四、关于红包唯一性识别
五、关于程序的健壮性 抢红包程序虽然简单,但是要使它有足够的健壮性,在各种情景下都能正常工作,还是挺不容易的。我试了网上几个主流的抢红包软件,都是只能在一部分场景下才正常工作。要考虑的场景至少有四种(以下两两组合形成):(1)红包来自当前聊天页面/其它页面;(2)当前屏幕状态为开启/熄灭。此外,还要考虑红包的并发到达问题、各种异常情况下的自我修复问题等等。 尤其是当红包来自当前聊天页面、且当前屏幕为熄灭状态时,此时系统仅触发通知到达事件,不触发窗口内容变动事件,而要执行Notification.contentIntent.send()又会走错页面,解决这个问题费了我好几天时间,最后绕了一个弯子才算是曲线解决了。
最后提醒一点,“辅助服务”的安全隐患还是挺大的,它启动后,理论上可以监听用户的任何操作,包括输入的银行卡密码等。因此,对于来路不明的软件,如果要求您开启辅助服务,您可千万要慎重,以免个人财物或隐私受到损失。
上一篇:
uniapp开发微信小程序-2.页面制作