最近在研究微信的消息机制,因为微信消息种类比较多,先从最简单的文字研究起,通过网上各路大神的分析,我直接就定位到CMessageMgr
类,
发送消息 - (void)AddMsg:(id)arg1 MsgWrap:(id)arg2;'
接受消息或发送消息 - (void)AsyncOnModMsg:(id)arg1 MsgWrap:(id)arg2;
通过简单的尝试,知道了消息的关键在于arg2,我验证的时候通过log或cycript来进行调试的,arg2的类型是CMessageWrap
,然后打印arg2的参数,了解到关键性参数作用后,就试着尝试自己new一个,代码如下
`id wrap = [NSClassFromString(@“CMessageWrap”) alloc];
((id(*)(id,SEL,id))objc_msgSend)(wrap, @selector(initWithMsgType:),@1);
[wrap setValue:m_nsFromUsr forKey:@“m_nsToUsr”];
[wrap setValue:m_nsFromUsr forKey:@“m_nsFromUsr”];
[wrap setValue:@“测试” forKey:@“m_nsContent”];
((void (*)(id, SEL,id,id))objc_msgSend)(self,@selector(AddMsg:MsgWrap:),m_nsFromUsr,wrap);`自己给自己成功发送消息,成功后还是比较振奋人心的,接着往下观察,试了其他的消息类型,觉得还是从简单入手,通过网上资料得到微信各个消息类型type,决定从49开始研究,49对应的是分享链接,按我自己所想,这个应该跟文字消息类似,应该可以手到擒来,
先随便打开一个网页,分享给自己,然后观察log,把所有可用参数记录下来,在new一个CMessageWrap
因为代码比较多,所有直接贴图
content是直接复制之前分享链接的conten,据我观察还有个data,猜测是分享链接的图片,就在微信里面随便找了个图片代替,其他参数和之前分享链接的参数一模一样,运行后却发现在手机本地,这条消息是已链接的方式发送成功,然后再电脑端接受的消息却是content里面的消息,以文字的形式显示出来,
求各路大神指点下,到底是哪里不对,还是方向错了,不胜感激!!!