本文解决一个问题:如何让第三方程序自动化的运作。
(一)批量添加好友的效果
小编用奇哥的账号,在某个群里面向所有人请求加好友,程序运作的效果是这样的:
同样,如果是附近的人,也是可以自动批量的:
小白:这样也行?那我不是可以在每个群里面都批量自动地添加好友了?我最喜欢加好友了!
叶孤城:但是,微信对群里面添加好友的数量是有上限的,一般一天只能添加30个左右。如果你超过了这个上限,你发送的请求是不会去到别人那里的!而且,你这个账号还会被限制,比如要过一个星期或更长时间,才能正常发送添加请求。
小白:哦!那奇哥的账号不是给你玩坏了?!
叶孤城:号不坏,女不爱嘛,不要太在意嘛。
注意,由于微信限制发送添加好友的请求数量,并对违规者作出处罚,所以要慎用批量添加的功能。
(二)如何实现
办法上没有特别的地方,还是class-dump/lldb/theos之类工具的使用,但有一些技巧,或注意点还是值得提一下的。
(1)群成员列表的界面类是什么?
由此可见,ChatRoomInfoViewController是一个目标,它的结构是这样的:
注意m_arrMemberList这个变量,它就是所有群成员数组,每一个成员是一个CContact。
(2)点击每一个群成员
点击成员,就是调用- (void)openContactInfo:(id)arg1 这个函数,传入的就是成员。
可以想像,只要循环调用这个函数,并传入不同的成员,就可以达到批量点击成员的目的。
(3)触发添加成员
到了兴奋的环节了,但先要知道触发的函数是什么。先看一下,成员详细资料所在类:
再作一些猜测与调试分析,就可以知道,点击“添加到通讯录”,触发的函数是ContactInfoViewController::onSendVerifyMsg。
(4)发送请求
到了这一步,就是填写打招呼的内容了。一个好的招呼应该是带上对方昵称的,而这个昵称可以从成员信息中取得。如果微信的UITextField有长度限制(有些版本作了限制),我们还可以重写文本框的回调以取消限制。
发送请求的类:
(三)总结
这里面给出一个批量自动化的思路,仅供学习:
* 手动进到群成员列表,然后进入自动化流程。
* 在ChatRoomInfoViewController::viewDidLoad完成时,取得m_arrMemberList即成员列表,循环打开每个成员。
* 使用CContact::isMyContact,判断成员是否已经添加过了,如果是则下一个成员。
* 每点击一个成员时,设置一个变量的状态,然后进入等待,直到这个变量的状态变化,再进入下一个成员的点击。
* 点击成员,进入到“详细资料”界面,同时,UINavigationController进入等待若干秒(比如4秒),若干秒后执行返回操作(不管最终是否添加成功)。
* 进入验证界面,在SendVerifyMsgViewController::viewDidLoad时,设置好UITextField的内容,再触发onSendVerifyMsg的调用。
* 验证如果成功,则验证界面会自动消失,如果失败(失败有回调)则需要主动调用一下成功时的调用使得验证界面消失。这时即使有alertview弹框也不影响后续的操作。
* UINavigationController执行返回操作,并设置可以下一个成员。
* ChatRoomInfoViewController执行下一个成员。
小白:叶城主,你讲了一大堆,我还是不知道你说什么呢!而且,你似乎没有讲,怎么主动触发一个按钮的点击,怎么主动切到下一个页面,难道这些不重要吗?
叶孤城:这些都是细节,不重要!如果你真要了解,那么……
小白:stop!我知道你想说什么!
https://mp.weixin.qq.com/s/8GlI_yZnPi-486BfZA9RpQ