第一版有详细描述了对whatsapp收发信息的截取。
我想尝试在微信上做类似的事情:找到别人发送消息过来的时候,我能够做自动回复。
(我现在做到从我这里发送文字信息OK了,是个msgwrap对象)
但没有能够想到怎么去找那个对方发过来消息的响应函数。
像whatsapp中didReceiveMessage:这种函数。
第一版当初是直接找到了delegate程序入口,但微信的delegate头文件看着和聊天内容并不直接相关(收到消息的通知?)。是不是我找的太大了?应该找专门用作聊天的delegate?
然后我就断了思路,书第二版是从UI一个一个不断往前挖,这里从UI应该从哪里切入?T T
求指教T T
从接收消息的那个UI(也就是你跟某人的聊天记录界面)切入,看看每一个cell的数据源是哪里,顺着这个线索找就可以找到了。
我提示你一点:不管你在不在聊天界面,你都是可以收到新消息的,所以这个函数跟UI应该是无关的,且是 异步 的。
最近在考试,每天时间不多;尽可能有些进展,但有些进展也伴随着迷路T T
今天通过Cell,然后找到BaseMsgContentViewController;目前这还在View层面;然后在头文件里找到
id <BaseMsgContentInBackgroundThreadDelgate> m_backgroundThreadDelegate;
估计这一个就是提示的UI无关且异步的delegate?
在LLDB运行时下面看到目前这个delegate是WeixinContentLogicController 而这个Delegate需要实现的方法是:
- (id)QueryMsgText:(id)arg1 FromID:(unsigned long)arg2 FromCreateTime:(unsigned long)arg3 Limit:(unsigned long)arg4 LeftCount:(unsigned int *)arg5;
这是未读消息队列是么0 0;虽然已经进到WeixinContentLogicController层面;但我还是怕自己迷路了。
我的目标Tweak是希望能够完成基本自动回复功能,即来一条消息,先不管是什么;我都能自动回复:“(自动回复)”。
目前的Tweak思路是:
1)找到从服务器接受new Msg 的函数(目前在做的尝试)
2)从Msg中提取 CContact 和 CMessageWrap;在自动回复中主要是CContact;
3)拿着Contact然后对应发送预先设置的文字消息。
其实我看到QueryMsgText是很晕的,我本以为是一个接受Msg的函数能直接提取Contact和Message;
请教到目前为止思路和方向是否正确?T T
今天已成功完成Tweak,找的是MainFrameLogicController中 onNewMessageArrived这个函数;虽然能完成目的,但是否还有更好的函数可以勾?因为在这里没用到异步,是因为被MainFrameLogicController嵌套了吗?在过程中还看到了CMessageMgr MainThreadExt 这样的方法,是否该往这个上走?