iMessage小游戏实现机制研究
iMessage小游戏(Game Pigeon),当我第一次玩到它,就立即被它独特的机制吸引。游戏居然可以穿插在对话中,你一言我一语,就像写纸条一样,收到纸条,打开,写上我的对策,再折好传给你,全程竟无需经过游戏服务器,因为纸上写的就是全部游戏数据!并且由于其实现机制,你甚至可以同时和多个人玩相同或不同的游戏,没有任何限制。正因为此,我尝试深入研究一下这种小游戏背后的实现机制
网上关于iMessage扩展的文章不多,官网有一个很不错的Demo,在这个demo中我找到了答案,记录如下
基本的类
1 | MSSession: 一条消息的标识 |
保存对局信息
没有游戏服务器,对局状态放在哪?
每次都发送对局的全部状态数据,所以直接保存在MSMessage内
MSMessage包含url:URL属性,可以将对局数据保存在此- 点击消息进入时,从
MSMessagesAppViewController.activeConversation.selectedMessage:MSMessage获取到点击的消息,再解析url,恢复对局状态
保持对话框简洁
一个对局的进行是来来回回相互发消息(游戏的状态),那对话会不会很乱?会有很多图片?答案是不会
- 用
MSSession初始化的MSMessage,发送后会更新对应session的旧消息并移动至底部,之前的位置会留下一行字 - 由于一个对局始终都是同一个消息,相当于只保留最后一份snapshot,不会过多占用本地存储
一些重要函数
1 | // 提交一个message,这个消息会添加到输入框内,未发送 |
关于调试
- 调试extension与app是不同的Scheme,调试时需注意,如果搞错了会没有日志也没有断点
其他
- iOS 16 扩展消息不可撤回和编辑