您当前的位置: 首页 > 知识百科 > 微信小程序抢红包怎么开发?

微信小程序抢红包怎么开发?

时间:2023-07-01 14:05 阅读数:141 人阅读 分类:知识百科

  每逢过年,很多土豪会在微信群里发红包,但是总不能时时刻刻守着吧,或许你可以开发一个小程序帮你抢红包。微信小程序抢红包怎么开发?一起来看看。

  一、基本原理

  目前网上已经有很多款自动抢红包软件,其基本原理都是一致的,都是实现一个Accessibility Service(即“辅助服务”),捕捉手机的通知栏变动事件、窗口切换事件、窗口内容变动事件,在收到微信红包通知消息时自动转到微信页面,搜索到红包节点,模拟点击操作。抢到红包后,再搜索“拆红包”节点,打开红包,取出红包金额。

  由于一个完整的发现红包、抢红包、拆红包流程需要10秒左右,而各种事件是以毫秒级的速度在不断触发,因此此类程序的核心问题是维护好一个全局的抢红包状态转换图,处理好各个事件处理任务的并发控制和相互协调,避免因状态走错而导致程序链接不稳定的情况。

  二、主要流程

  自动抢红包动作由两种场景触发:(1)发现一个微信红包消息通知;(2)在当前微信聊天页面发现一个新红包。两种场景的处理流程大体一致,现将新通知消息触发的抢红包流程说明如下。

  


  三、状态转换

  鉴于整个抢红包流程耗时较长,本程序维护了一个全局的状态变量(供有七种状态),以控制任务流程,同时维护了一个全局的等待队列,以存放在此期间到达的新红包。对于由新通知消息触发的抢红包流程,其状态转换如下图所示。

  


  四、关于红包唯一*识别

  抢红包程序的一个重要问题是鉴别红包的唯一*,既要避免漏抢红包,又要避免乱抢红包而干扰用户的正常操作。据我所知,这个问题实际上没有完美的解决方案。有的程序通过AccessibilityNodeInfo的ObjectId来标识各窗口组件,但实际上,Accessbility Service与相应的微信程序是在不同的进程里运行的,AccessibilityNodeInfo仅仅是对另一进程里的窗口组件的映射,而且这种映射关系是不稳定的,因此试图用AccessibilityNodeInfo的ObjectId来标识窗口组件无异于刻舟求剑。

  微信小程序数据库(EnMicroMsg.db)中有一个唯一的红包ID(select content from message where type=436207665),我怀疑这个数据放在View对象的TAG里面了,以便在用户点击时发送到后台服务器。但据我所知,通过AccessibilityNodeInfo是取不到对应的View对象里的这个数据的。

  我采用的方法是:

  (1)对于由消息通知触发的抢红包任务,直接相应页面的最后一个红包即可,没有误判问题。

  (2)对于由聊天页面触发的抢红包任务,取页面最后一个红包,如果该红包后面没有新的消息了,就抢一下试试;如果已经有新消息,说明是以前的红包,不再尝试。这种方法在特定场景下会引起一定的重复抢红包问题,对用户正常操作形成了一定干扰,但最大程度地避免了漏抢问题。

  五、关于程序的健壮*

  抢红包程序虽然简单,但是要使它有足够的健壮*,在各种情景下都能正常工作,还是挺不容易的。我试了网上几个主流的抢红包软件,都是只能在一部分场景下才正常工作。要考虑的场景至少有四种(以下两两组合形成):(1)红包来自当前聊天页面/其它页面;(2)当前屏幕状态为开启/熄灭。此外,还要考虑红包的并发到达问题、各种异常情况下的自我修复问题等等。

  尤其是当红包来自当前聊天页面、且当前屏幕为熄灭状态时,此时系统仅触发通知到达事件,不触发窗口内容变动事件,而要执行Notification.contentIntent.send()又会走错页面,解决这个问题费了我好几天时间,最后绕了一个弯子才算是曲线解决了。

  最后提醒一点,“辅助服务”的安全隐患还是挺大的,它启动后,理论上可以监听用户的任何操作,包括输入的银行卡密码等。因此,对于来路不明的软件,如果要求您开启辅助服务,您可千万要慎重,以免个人财物或隐私受到损失。

  以上就是关于微信小程序抢红包的全部内容了,希望对你有所帮助。了解这小程序的相关原理再进行开发,你就不会错过任何人发的红包了!只更多相关教程请关注微信程序素材网。

  

  微信小程序适合应用于哪些场景?

  到底是做微信小程序还是服务号?

  微信小程序盈利模式是怎样的?微信小程序如何盈利?