企业微信怎么才能自动打卡?算不算违规?

作者:鱼爪创媒网 点击:168 发布时间:2021-05-07

我相信没有哪个上班族喜欢上班打卡的,麻烦不说,最重要的是有一种被看管的感觉。于是开发微信自动打卡的念头就出现了,但是创意虽好,到底要如何才能实现呢?一时间这个话题引起了许多程序员的套路,甚至还有许多上班族也参与其中,好不热闹。

近日中国多家VPN供应商已收到了来自苹果公司的通知,通知主要告知这些供应商和开发者,他们的软件将从中国区App Store下架。对此苹果方面表示,工信部今年早些时候宣布,所有提供VPN服务的开发者必须获得政府的许可,我们被要求移除一些不符合新规定的VPN应用。苹果同时补充道:其它国家地区的帐单地址的用户将能够继续从App Store中访问这些软件。

思考

需求不容赘述,能找到这个文章的人,估计都心怀鬼胎,哈哈,只希望大家能够从技术的角度看待这个插件,切忌不要做“不好”的事情,年纪都不小了,应该做到是非分明。最后再警告大家,严格律己,遵守公司规章制度。

自动打卡,究竟如何自动化?

实现自动化,定要模拟用户操作,单击,长按,触摸等事件,那么....没错,就需要臭名昭著的 AccessibilityService。

打卡地点,究竟如何模拟?

1. Xposed框架,定位有三种方式,网络,基站和GPS,三者也有优先级,但也可简单粗暴直接拦截系统GPS定位,至于网络,基站定位都给 null。

2. 模拟器,主流的模拟器可以模拟地理位置,开发期间推荐使用模拟器进行调试;

多说一句使用 Xposed 框架,功能异常强大,但调试起来比较烦,虽说自带日志,但时不时就需要来次重启,着实有点闹心。所以在开发过程中,模拟地理位置,只是其中一环,所以为了不影响开发,可以先用模拟器去模拟地理位置,待到打卡功能完善了后再考虑定位的事情,毕竟这由涉及到了 Xposed 插件开发。

开发

了解API

至于 AccessService 如何配置,构造配置这个就不多说了,不是本文重点。如果不会,可以参考这个:

微信抢红包插件

http:blog.csdn.netdd864140130articledetails51794318

继承了 AccessService 后,我们需要实现 onAccessibilityEvent 方法,这个方法的意思就是在触发了事件进行回调,至于你想捕捉何种事件,详情参考API,这里只列举在本例使用到的事件:

AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED:当通知栏发生变化时,也就是当有新通知显示在通知栏时触发;

AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED:当窗体发生改变时触发,Activity,Fragment 的切换都会触发;

除此之外我们还需要关注 AccessibilityNodeInfo 实例的重要方法:

findAccessibilityNodeInfosByText:根据文本查找控件,可能会得到一个集合;

findAccessibilityNodeInfosByViewId:根据ID查找控件,会比较精准;

了解WXUI的构造

首先自己去搞一个企业WX的测试账号,成功登录后会进入如下界面:

了解代码

打卡功能是在工作台下的,所以需要先进入打卡模块,但这一系列操作都手动点击就失去了自动化的意义了,因此 AccessService 第一次介入,代码如下:

上述代码就能自动点击工作台按钮,这个代码是我们的核心部分。关于 findTagToClick() 是什么?等下介绍,先说几个需要注意的地方:

这是最重要的,如果想要一个控件响应单击事件,有几种办法?

1. OnClickListener

2. OnTouch() 处理 ActionDown 和 ActionUp 事件。

但重中之重就是该控件的属是 onClickable=true的也就是可以被点击的,如果该属性为 false,那么辅助服务不能执行单击事件,至少我遇到的是这样。我在开发自动点击工作台这个步骤时,心想只要通过文本内容,拿到指定控件,然后执行单击就可以了。但结果怎样?没有任何反应,原因肯定就是控件没有接收事件,这是我遇到的第一个问题。

多说一句,为何 setOnClickListener 后就看见单击了?

setClickable(true)原因就在这里。

怎么知道控件是否能响应点击呢?有两个方案:

1. 写递归,判断 node 是否能被点击,如果可以则执行,否则则向上传递,听起来有点像 touch 事件分发的流程;

2.使用IDE自带工具, Android devic monitor 来看当前 Activity 的UI层级,进入的步骤,以 A.S 为例:Tools->Android->Android Device Monitor。

简单介绍一下 使用 Android Device Monitor 分析UI结构:

我们可以知道"工作台"控件是一个Textview,坐标和 clickable 属性,因为是 false,所以不能执行单击,再找!

查看其父容器,RelativeLayout, clickable=true ,难道是统一给父容器设置的单击事件?再找!

同种方式在查一下 其他tag按钮 的结构,如出一辙,那么很有可能就是将事件统一由其父容器处理。继续我们的开发工作,介绍一下最为关心的方法:

上面的方法都是用来找控件的,基本的循环和判断。

logAllNodeInfo 这个方法,主要是为了遍历某个节点下的控件,便于参考,其实与业务关系不大,但有人会问为啥要加?想要找控件看UI结构,不是可以通过过 Android device monitor 那个工具看嘛。对,的确,但我用这个是为了排查问题,至于何种问题,后面会有介绍。经过上面的代码洗礼,来到下面这个界面:

故技重施,发现"打卡"这个控件,又把事件设置到了父容器上。那么好了,继续完善我们的代码,如下:

截止到这步,当我们启动服务时,如果顺利,就会看到界面在自动执行,直到跳转到下面这个界面:

来到这里,如果想自动打卡,需要怎么做?对,就是获取到打卡的那个控件,然后模拟器操作,是不是再调用一次 findTagToClick("工作台") 就可以了?理论上的确是,但此时这个界面里面有两个“打卡”字样,会查到多个控件,虽然我上面的代码是从查询到的结果集中取第一个 node 元素,但为了避免不必要的麻烦,还是尽量找具备唯一性的文字,那查找包含“次”字样的控件如何?当然可以,至少这个字在当前界面是唯一的,既然考虑到唯一,那为何不用ID,所以

直接传入这个id,但是要注意,不同机器手机这个id可能不一样,所以以最终显示的为准,一定要自己去查,代码如下:

此时运行项目,运行微信,发现界面正常跳转,并成功打卡,非常好!再多试几次,也许会发现问题,就是在打卡界面也就是上图,会出现打卡无效的问题,具体效果就是:从工作台到打卡模块都可以自动完成,十分飘逸,但到了需要单击打卡按钮时,按钮外围的黄色圆圈有时只会转动一次,但不执行打卡业务,再简单点说就是:没打上卡。这究竟是什么问题?当时猜测三个原因:

1. 腾讯做了打卡限制,指定周期内不能连续打卡;

2. 单击动作短促,以至于打卡控件不认为这是一个有效的单击;

3. 代码执行过快,还没有来得及找到对应控件;

在开发中,我们会遇到各式各样,匪夷所思的问题,鉴于这种情况,我个人的方法是将整个流程或者业务的执行过程在脑中过一遍,然后枚举出所以可能出现问题的环节,在依次排除。

#1 尝试几次手动人工连续频度较高的打卡行为,没有发现限制的情况,所以初步排除这个情况;

#2使用了长按事件,情况依旧;

#3还记得之前提到过的 logAllNode() 方法吗,这个方法就是在这个阶段加入的,主要是对某节点的控件信息进行输出,对业务没有太多意义,通过对打印日志的分析,发现在渲染打卡界面的时候,会先输出“正在获取管理信息”的 Textview A(速率很快,一闪而过,很容易忽略),然后才会显示打卡控件和其他信息控件,那么可能是在执行 findTagToClick 这个方法时,界面显示的还是 Textview A 控件,所以才没有获取到。那么只要延迟执行即可,我用的是 postDelay,当然这种方式可能还是不够严谨,但排除问题是够用了。代码如下:

再次运行,试了几次正常了,也没有出现异常问题。关于 postDelay 把时间写死这种做法,不够严谨,应该写入一个回调函数,当获取管理信息结束后,执行回调,这时才会精准,当然后续完善。

截止到现在,自动打卡插件的制作,我们已经完成了一多半,现在需要做的就是智能。

1. 定时任务,比如设置早上8点,自动启动应用,并进行打卡。使用的技术肯定是 Alarmmanger,但也有个问题,辅助服务是一个进程,定时任务服务又是另外一个进程,两者如何建立关系?

我没有用IPC,而是用了一个取巧的办法,就是 Notification,用它的理由就是辅助服务有一个监测通知栏变化的方法,前文提到过,那也就是说,只需要任务到期后,创建一个通知,然后辅助服务去监听,捕捉到目标通知做处理就行了呢?

2. 打卡成功后自动退出程序,一个进程,关闭另外一个进程;

想到了一大堆了方法什么finish,kill,exit,但一一试过都不行,那怎么办?只要动用linux命令了,前提是要 su权限,需要 root,也是没有办法的办法。

完善的代码如下:

截止到目前,我们实现的效果就是,设置打卡日期,比如早上8点半,到时后自动启动企业WX,自动执行打卡,完成后退出应用,等待下一次任务执行。很喜庆,再也不用担心早上迟到了罚钱了,因为你总会在那个时间打卡。

总结

整个插件的开发思路很简单,代码也很简单,基础需求已经满足,但如何想要更加智能,就需要花费点精力了。比如,service进程守护,alarm的如何准时执行,更聪明的IPC通信等。虽说都是老生常谈,但还是值得玩玩的,所以给大家留个“瞎想”的空间。

扩展阅读

关于流量统计

流量统计是指通过各种科学的方式,准确的纪录来访某一页面的访问者的流量信息,目前而言,必须具备可以统计。

1、统计独立的访问者数量(独立用户、独立访客);2、可以统计独立的IP地址数量;3、可以统计页面被刷新的数量。4、访客数量,即来了多少访客?他们是哪里人?IP多少? 5.访客来源,即访客来自哪些网站?百度?天涯?还是163邮箱? 6. 软文营销效果:我贴的链接和软文的效果到底怎么样? 7.访客的站内移动路径(即站内行为):访客进入网站后,浏览了哪些网页? 8.关键词广告的效果跟踪:百度竞价广告与Google的广告哪个效果更好? 9.广告恶意点击(也称“点击欺诈”)的源头跟踪 - 谁(哪个IP)恶意点击了我的广告? ...等等的网站诸般流量情况。

内容

网站流量统计是一种可以准确的分析访客用户的来源,便于网站管理者根据访客的需求增加或者修改网站的相关内容,便于更好的提升网站转换率,提高网站流量。

一 网站流量统计可以精确的统计访客的具体来源地区和ip地址

二 网站流量统计可以精确的统计目前网站在线多少人,具体访问了哪些页面

三 网站流量统计可以精确的统计访客是通过哪些页面,搜索关键词访客的网站,访客浏览的是哪些页面

四 网站流量统计可以精确的统计访客的浏览器是什么版本,ie6 ie7 还是火狐

五 网站流量统计可以精确的统计网站黏粘率,回头率是多少,浏览多少页面

六 网站流量统计可以精确的统计网站的分时统计,分日统计,分月统计,实时统计,在线访问哪个页面。

七 网站流量统计可以精确的统计访客的操作系统是什么,分辨率是多少。

营销意义

(1)及时掌握网站推广的效果,减少盲目性;

(2)分析各种网络营销手段的效果,为制定和修正网络营销策略提供依据;

(3)通过网站访问数据分析进行网络营销诊断,包括对各项网站推广活动的效果分析、网站优化状况诊断等;

(4)了解用户访问网站的行为,为更好地满足用户需求提供支持;

(5)作为网络营销效果评价的参考指标。

(6) 帮助了解网站的访问情况,提前应对系统负荷问题

(7) 根据监测的到的访问客户端的信息来优化网站设计和功能

以上就是今天鱼爪创媒网小编给大家带来的企业微信怎么才能自动打卡?算不算违规?的内容,如果真的可以开发出自动大卡这种功能,那可真的是省了不少事,大家不用每天都打开微信自己打卡签到了,本来上班就很累了,这下终于可以稍微轻松一些。

鱼爪创媒是一家专业提供公众号交易、公众号迁移、公众号增粉、公众号买卖交易的平台,如果您有这方面的需求,欢迎电话咨询:13018202357。有任何疑问,可以 【立即咨询】 我们平台的客服或者添加微信号 【13018202357】 。此文章来源于网络,如有侵权,请联系删除

资金保障

提供买卖双方资金担保交易
更放心

法律保障

交易签订具有法律效益合同
提供法律支持

急速退款

专属资金通道,快速拿到
钱款

全资公司

全资控股公司,大平台交易
有保障

服务优质

3500+专业团队,为您提供24
小时一对一贴心服务