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

9158APP 0

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

我相信没有哪个上班族喜欢上班打卡。不说麻烦,最重要的是有一种被人监视的感觉。于是就产生了开发微信自动签到的想法,但是想法虽然好,但是如何实现呢?一时间,这个话题引起了很多程序员的套路,甚至很多上班族也参与其中,热闹非凡。

近期,国内多家VPN提供商均收到了苹果公司的通知。该通知主要告知这些提供商和开发者,他们的软件将从中国的App Store中下架。

存储已删除。对此,苹果表示,工信部今年早些时候宣布,所有提供VPN 服务的开发者都必须获得政府许可,并要求我们下架一些不符合新规定的VPN 应用。苹果还补充说:帐单地址位于其他国家/地区的用户将能够继续通过该应用程序付款

在商店中访问这些软件。

思考

无需赘述。任何人能找到这篇文章,很可能是别有用心。哈哈,只是希望大家能够从技术的角度来看待这个插件。不要做“坏”事。你已经不年轻了,该做对的事,该做错的事。清楚的。最后,告诫大家要严格自律,遵守公司的规章制度。

自动打卡,如何实现自动化?

要实现自动化,就需要模拟用户操作,点击、长按、触摸等事件,那么……是的,你需要臭名昭著的AccessibilityService。

如何模拟打卡地点?

1. Xpose框架,有三种定位方式,网络、基站和GPS。三者也有优先级,但同样可以简单粗暴地拦截系统GPS定位。至于网络,给出了基站定位

无效的。

2.模拟器。主流模拟器可以模拟地理位置。开发时建议使用模拟器进行调试。

关于使用Xpose 的说明

该框架功能极其强大,但调试起来比较麻烦。虽然自带日志,但时不时需要重启,确实很烦人。因此,在开发过程中,模拟地理位置只是其中的一部分。因此,为了不影响开发,可以先用模拟器模拟一下地理位置,等打卡功能完善后再考虑定位。毕竟这涉及到

Xpose插件开发。

发展

了解API

至于如何配置AccessService,我不会详细介绍其结构和配置,因为这不是本文的重点。如果没有的话可以参考这个:

微信抢红包插件

http://blog.csdn.net/dd864140130/article/details/51794318

继承AccessService后,我们需要实现onAccessibilityEvent

方法,这个方法的意思是当事件触发时回调。至于你想捕获什么样的事件,请参考API了解详情。这里仅列出本例中使用的事件:

AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED:通知栏发生变化时触发,即通知栏显示新通知时触发

AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED:表单变化时触发,Activity、Fragment

将触发切换

另外,我们还需要关注AccessibilityNodeInfo实例的重要方法:

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

findAccessibilityNodeInfosByViewId:根据ID查找控件,这样会更准确。

了解WXUI的结构

首先,自己创建一个企业WX测试账户。登录成功后,您将进入以下界面:

理解代码

签到功能在工作台下,所以需要先进入签到模块。但如果这一系列操作都是手动点击,就失去了自动化的意义。因此,访问服务

第一次介入,代码如下:

上面的代码可以自动点击工作台按钮。这段代码是我们的核心部分。什么是findTagToClick()?让我们一起期待小编的介绍吧。首先我们来说一下需要注意的几个事项:

这是最重要的。如果想让一个控件响应点击事件,有多少种方法呢?

1.点击监听器

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

但最重要的是,该控件的属性是onClickable=true,即可以点击。如果属性是

false,那么辅助服务无法执行点击事件,至少我遇到的是这样的。我在开发自动点击工作台这一步的时候,以为只需要通过文本内容获取指定的控件,然后执行点击即可。但结果如何呢?什么都没发生。原因肯定是控件没有接收到事件。这是我遇到的第一个问题。

还有一件事,为什么我在设置OnClickListener后看到点击?

etClickable(true) 的原因就在这里。

如何知道控件是否能够响应点击?有两种解决方案:

1、编写递归判断节点是否可以点击。如果有则执行,否则向上传递。听起来有点像触摸事件分发的过程。

2.使用IDE自带的工具,Android设备监视器查看当前Activity的UI级别,用A.S进入步骤

例如:工具-Android-Android 设备监视器。

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

我们可以知道“Workbench”控件是一个Textview,具有坐标和可点击属性。因为是false,所以无法进行点击。再找找吧!

检查其父容器RelativeLayout,clickable=true。是为父容器统一设置的点击事件吗?再看看!

以同样的方式检查其他标签按钮的结构。它们是完全相同的,因此很可能事件由它们的父容器统一处理。继续我们的开发工作,我们将介绍我们最关心的方法:

以上方法都是用于查找控件、基本循环和判断。

记录所有节点信息

该方法主要用于遍历某个节点下的控件,方便引用。其实和业务关系不大,但是有人会问为什么要加呢?如果你想找到控件来查看UI结构,则不能使用Android设备

查看监控工具。是的,确实如此,但我用它来解决问题。至于什么样的问题,我稍后再介绍。经过上面的代码洗礼,我们来到了如下界面:

重复老把戏,我发现了“签入”控件并将事件设置为父容器。好,我们继续完善我们的代码,如下:

至此,当我们启动服务时,如果一切顺利的话,我们会看到界面自动执行,直到跳转到如下界面:

来到这里,如果你想自动打卡,你需要做什么?是的,就是获取打卡的控制权,然后操作模拟器,再次调用findTagToClick('Workbench')

够了吗?理论上确实如此,但此时界面中出现了“签到”两个字,并且会发现多个控件。虽然上面的代码是从查询结果集中获取第一个节点

元素,但为了避免不必要的麻烦,尽量寻找独特的文字。搜索包含单词“times”的控件怎么样?当然,至少这个词在当前界面中是独一无二的。既然考虑唯一性,为什么呢?没有使用ID,所以

直接传入ID,但注意不同机器和手机上ID可能不同,以最终显示为准。你必须亲自检查一下。代码如下:

这时候运行项目,运行微信,发现界面跳转正常,签到成功,非常好!如果你多尝试几次,你可能会发现问题。在签到界面,也就是上图,会出现签到无效的问题。具体效果就是:从工作台到打卡模块一切都可以自动完成,非常优雅。但当到了点击打卡按钮的时候,按钮周围的黄色圆圈有时只会旋转一圈,但打卡业务并不会被执行。简单来说:没有点击。卡片。这个问题到底是什么?当时猜测有三个原因:

1、腾讯对签到有限制,在规定时间内不能连续签到。

2. 单击动作太短,签入控件不认为这是一次有效的单击。

3、代码执行速度太快,还没有找到对应的控件。

在开发过程中,我们会遇到各种不可思议的问题。针对这种情况,我个人的方法是在脑海中过一遍整个流程或者业务执行流程,然后将所有可能出现的问题列举出来。链接一一删除。

#1 我多次尝试手动频繁签入,但没有发现限制,所以初步排除了这种情况。

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

#3 还记得之前提到的logAllNode()吗

方法?这个方法是在这个阶段添加的。主要输出某个节点的控制信息,对于业务没有太大意义。通过打印日志分析,发现在渲染签到界面时,“正在获取管理信息”

Textview A(速度很快,一闪而过,容易忽略),然后会显示签到控件等信息控件,那么可能正在执行findTagToClick

该方法中界面仍然显示Textview A控件,所以没有获取到。那么就推迟执行吧。我用

postDelay,当然这个方法可能不够严谨,但是足以排除问题了。代码如下所示:

再次运行试几次,一切正常,没有出现异常问题。关于延迟后

死亡时间的书写方法不够严谨。你应该写一个回调函数。当获取到管理信息后,执行回调。只有这样,它才会准确。当然,未来会改进。

截至目前,我们已经完成了自动签到插件的制作一半以上。现在要做的就是智能化。

1、定时任务,比如设置早上8点的时间自动启动应用并签到。所使用的技术必须是

Alarmmanger,但是也有一个问题。辅助服务是一个进程,定时任务服务是另一个进程。如何建立两者之间的关系?

我没有使用IPC,而是使用了一个技巧,那就是

通知,之所以使用它,是因为辅助服务有一个监听通知栏变化的方法,前面提到过,也就是说,你只需要在任务到期后创建一个通知,然后辅助服务监听并捕获目标通知。就这样处理吗?

2. 打卡成功后自动退出程序。一个进程将关闭另一进程。

我想了很多finish、kill、exit等方法,但一一尝试后都不起作用。所以我该怎么做?使用linux命令即可,前提是需要su权限。

没有其他办法可以root。

完整代码如下:

到目前为止,我们实现的效果是设置签到日期,比如早上8点30分,到了这个时间之后自动启动Enterprise WX,自动执行签到,完成后退出应用,等待以供下一步任务执行。很喜庆,你再也不用担心早上迟到被罚款了,因为那个时间你总是会打卡的。

总结

整个插件的开发思路非常简单,代码也非常简单。基本的要求已经满足了,但是想要变得更加聪明,还需要花费一些精力。比如服务进程守护,如何按时执行报警,更智能的IPC通信等等,虽然都是老生常谈,但是还是值得玩一玩的,所以给大家留下“胡思乱想”的空间。