NevoDecoratorService. getArchivedNotifications(final String key, final int limit)的实现不够完善
notxx opened this issue · 5 comments
在改进微信撤回通知的过程中,我发现消息撤回后getArchivedNotifications的结果与预期不一致。
1. 发送1
2. 发送2
3. 发送3
4. 发送4
5. 发送5
6. 发送6
7. 撤回2
8. 撤回5
那么getArchivedNotifications的结果应该是操作日志式(1、2、3、4、5、6、撤回2、撤回5)的或者操作结果式的(1、3、4、6)。
但是现在的情况是返回值更接近于操作日志式的,但是存在两个问题:
- 撤回的消息中没有与之前消息的对应关系,也就是最终只知道发送了123456然后撤回了两条,但是哪两条不知道;
- 有的时候返回结果会不包括在一些没有被撤回的消息,这是通过与android auto消息对比得出的结果;
以下附上日志
06-06 00:24:50.272 24145 24164 D Nevo.Decorator[WeChat]: archive 11
06-06 00:24:50.272 24145 24164 D Nevo.Decorator[WeChat]: [X]: 0, [X]: 0, 1559751734358
06-06 00:24:50.272 24145 24164 D Nevo.Decorator[WeChat]: [X]: 1, [2条][X]: 1, 1559751745028
06-06 00:24:50.272 24145 24164 D Nevo.Decorator[WeChat]: [X]: 2, [3条][X]: 2, 1559751746614
06-06 00:24:50.272 24145 24164 D Nevo.Decorator[WeChat]: [X]: 3, [4条][X]: 3, 1559751748067
06-06 00:24:50.272 24145 24164 D Nevo.Decorator[WeChat]: [X]: 4, [5条][X]: 4, 1559751749290
06-06 00:24:50.272 24145 24164 D Nevo.Decorator[WeChat]: [X]: 5, [6条][X]: 5, 1559751750722
06-06 00:24:50.272 24145 24164 D Nevo.Decorator[WeChat]: [X]: 6, [7条][X]: 6, 1559751751851
06-06 00:24:50.272 24145 24164 D Nevo.Decorator[WeChat]: null, [6条]"❌" 撤回了一条消息, 1559751756958
06-06 00:24:50.272 24145 24164 D Nevo.Decorator[WeChat]: null, [5条]"❌" 撤回了一条消息, 1559751806277
06-06 00:24:50.272 24145 24164 D Nevo.Decorator[WeChat]: [X]: 8, [7条][X]: 8, 1559751875553
06-06 00:24:50.272 24145 24164 D Nevo.Decorator[WeChat]: [X]: 9, [8条][X]: 9, 1559751890243
06-06 00:24:50.273 24145 24164 D Nevo.Decorator[WeChat]: messages 8
06-06 00:24:50.273 24145 24164 D Nevo.Decorator[WeChat]: message.text 0
06-06 00:24:50.273 24145 24164 D Nevo.Decorator[WeChat]: message.text 1
06-06 00:24:50.273 24145 24164 D Nevo.Decorator[WeChat]: message.text 2
06-06 00:24:50.273 24145 24164 D Nevo.Decorator[WeChat]: message.text 4
06-06 00:24:50.273 24145 24164 D Nevo.Decorator[WeChat]: message.text 6
06-06 00:24:50.273 24145 24164 D Nevo.Decorator[WeChat]: message.text 7
06-06 00:24:50.273 24145 24164 D Nevo.Decorator[WeChat]: message.text 8
06-06 00:24:50.274 24145 24164 D Nevo.Decorator[WeChat]: message.text 9
其中7就是神秘失踪的消息
-
因为微信的撤回消息通知本身是无相关信息的,决定了 Nevolution 引擎以及插件都无法建立可靠的对应关系。目前的确只能靠对比加以推测。
-
可能是由于消息发送的间隔较短,微信在接收端的通知被合并了。
注:getArchivedNotifications() 这个 API 计划 deprecate,因为 Nevolution 引擎为保存 history 的资源消耗(内存、CPU)比较高,但其实只有非常低比例的 history 实际被用到(大部分插件不需要),对移动设备上有限的资源造成了较大的浪费。因此建议插件开发者后续自行在插件侧根据实际需要保存精简的 history。
合理,我来试试按照自己的需要在微信插件实现历史记录
我试了一下,在两个onNotificationRemoved()里面都抓不到撤回的时候微信对消息历史记录做了什么,但是从getArchivedNotifications()看每次撤回微信历史记录确实会少一行,这中间是有什么问题吗
getArchivedNotifications() 只是通知的历史记录,不是微信消息的历史记录。onNotificationRemoved() 不可能包含撤回动作(这是一条新通知),因为它收到的只是被移除的那条通知。
确实。我这边有个实现对撤回做标记的做法,但是遇到比较复杂的情况(比如连续撤回)就炸了