iMessage是苹果公司的一款即时通讯软件,它可以在iPhone、iPad、Mac和Apple Watch等苹果设备上使用。iMessage可以通过Wi-Fi或蜂窝网络发送文本、图片、视频、语音消息和表情等多种类型的消息。iMessage还支持发送短信和彩信,与普通短信和彩信相比,iMessage消息可以更快速、更安全地传输,同时还可以实现端到端加密,保护用户的隐私。iMessage还可以创建群组聊天和发送位置等功能,方便用户与朋友、家人和同事之间进行沟通和协作。
研究怎么实现iMessage群发先是从XMPP协议开始的,因为Apple MAC os上的ichat是XMPP客户端,可以连接iMessage服务器,同时也可连接gtalk与weibo私信。但后面发现iMessage的服务器验证是加密,没办法实现非ichat XMPP客户端连接iMeesage服务器,那就自然没办法实现程序控制往iMeesage服务器批量发送信息。
只能通过MAC OS或者iOS自带的程序往iMeesage服务器发送信息,那要实现群发,自然只能想办法去调用自带的这ichat客户端,在MAC OS系统上Apple公司提供一种叫Apple script的脚本来自动实现任务。可能通过tell application "Messages"
就可以激活iMessage客户端自动发送信息。这样实现的群发的思路就很清楚了。
一、账户获取和如何实现iMessage群发
群发iMessage主要需要攻破两个技术难点,一个是iMessage账号的获取,另一个是群发iMessage。相关技术参考相关文章:https://blog.csdn.net
#账号获取
iMessage账号目前获取的方法主要是扫描手机号码。扫描手机号码可以通过代码自动扫描,也可以通过人工筛选。通过代码自动扫描,建议大家可以从以下两方面着手
1.编写AppleScript脚本控制Mac OS自带的iMessage客户端进行验证,类似于群发iMessage。发送一条iMessage之后,如果捕获到发送失败的异常则不是iMessage账号
2.研究iOS系统中Message framework中的私有api,通过私有api进行验证
实现iMessage群发
1.通过AppleScript实现批量注册itune帐号
2.通过AppleScript实现自动取一个itune帐号群发100个APPle ID的iMessage
set EMAIL to "EMAIL_DEL_DESTINATARI" -- el destinatari ha de tenir l'iMessage activat
set MSG to "COS_DEL_MISSATGE"
set N to the 1000 -- nombre de vegades que s'enviarà el missatge
set APPLE_ID to "E:" -- la teva Apple ID que ha de tenir iMessage activat
repeat N times
tell application "Messages"
send MSG to buddy EMAIL of service APPLE_ID
end tell
end repeat
二、iMessage群发
检验完所有账号后,可以从中选取出iMessage账号进行群发。群发有两个方法,一个还是通过iMessage客户端,另一个是通过AppleScript脚本控制iMessage客户端发送。
1.通过iMessage客户端发送,可直接将号码粘贴至地址栏,填写内容,发送即可。
2.通过ApplseScript控制iMessage客户端的脚本如下:以下代码可从一个csv文件中读取出iMessage账号,并通过iMessage客户端逐个发送iMessage消息。
需要注意如下问题:
1.由于该脚本是控制iMessage客户端进行发送,所以必须在MacOS 10.8以上的系统中运行,同时开启iMessage程序。
2.该脚本在发送iMessage时并不是后台发送,所以当发送量很大时,会导致iMessage客户端运行缓慢,甚至无法开启。可通过清空所有已发送的iMessage或注销账号解决。
3.通过脚本发送的iMessage账号必须是在当前iMessage客户端中检验过的,否则会报“不能获得“buddy id "C0B35E7F-A0FB-49E1-BDD7-C867BC06D920:+86136xxxx0000"”。
三个问题解决方案如下:
第一个问题用mac os系统或者黑苹果装10.8操作系统,会自带messages程序,这程序系统自带,千万不会发现打不开去删除Messages程序,删除就只能重装系统了。并且是先打开Messages程序,再启动apple script脚本,不然运行不正常。
第二个问题,在发送过程中加入同步删除的代码,但同步一条一条删除时有时会失败,所以再增加发一定量后再批量删除一次的操作,正常的流程应该是打开Messages程序->循环号码库->读取一个号码->发送一条信息->等待1秒->删除此条信息->判断是否未删除的超过100条,是批量删除->循环号码库。这样就可以保证Messages程序不会去占百分一百多的CPU或者几个G的内存。
第三个问题,在messages程序的imessage帐号中设置用来群发的imessage帐号。就没有问题了。
tell application "Messages"
set csvData to read "/Users/用户/Desktop/test.txt"
set csvEntries to paragraphs of csvData
repeat with i from 1 to count csvEntries
set phone to (csvEntries's item i)'s text
set myid to get id of first service
set theBuddy to buddy phone of service id myid
send "今天北京晴,气温16到23度;周三晴,气温16到23度,北风1-3级;周四晴,气温17到25度,微风<3" to theBuddy
delay 3 -延时三秒,不然取不到已发达的内容
set FailNum to (get count chat)
if FailNum>100 then
repeat with j from 1 to FailNum
set phone to (get name of chat (FailNum-j))
set DelMsg to "iMessage;-;" & phone
if exists (text chat id DelMsg) then
delete text chat id DelMsg
end if
end repeat
end if
end repeat
end tell