Open xueqiulou opened 8 years ago
我自己的问题,已经解决了...还有一个问题希望你提供一个思路 setFetchProfilesBlock 这个方法会调用好多次,好像联系人列表里的每个联系人都会调用一次,而不是获取到一个所有联系人的数组后调用一次,如果联系人太多我在这里发起网络请求感觉会有问题吧!
ChatKit 内部实现是使用异步加载的,另外你说的联系人列表,是第二个tabbarItem里的?这个实现时是只有一次请求, 实现在这里 https://github.com/leancloud/ChatKit-OC/blob/b9a772bc3a636200fef1171b2c0ca286f8c0dae8/ChatKit/Class/Module/ContactList/Controller/LCCKContactListViewController.m#L165 。你说的每个联系人调用一次,应该是第一个tabbarItem里的最近对话列表吧,你可以看下实现,也是异步加载的,实现在这里: https://github.com/leancloud/ChatKit-OC/blob/a3af0dea002d052270602f2a5fa6d05f607d35ff/ChatKit/Class/Module/ConversationList/Model/LCCKConversationListViewModel.m#L137
是最近联系人列表那会重复调用这个方法,不是在这里设置的用户体系吗,加载时就会每个联系人都调用一次这里的接口,点击进入聊天页面也会加载一次,这个逻辑对吗?
ChatKit 总是会传id 数组给你,你可以拿着这个数组,向自己的服务器批量请求用户信息,我在Demo实现-setFetchProfileBlock:
时使用的是一个id查询for循环查询,在你集成时是需要替换掉这个实现。
进入聊天界面的确会加载一次,这是为了获取当前所有成员的信息,这样一来,聊天过程中如果再需要成员的信息时就只会走内存缓存,不会走-fetchProfileBlock:
这个方法了,避免不必要的网络请求。
最近联系人之所以会每个会话都请求一次,是为了达到 “cache then net” 的效果,一进到这个页面不会先网络请求,而是先展示clientId,再挨个去做网络请求,再展示从服务端拉取到的用户信息。在弱网下,或者断网情况下,体验会好一点,即使请求不到用户信息,依然能展示最基本的 clientId 信息。其实这里也可以获取到所有对话的用户id,统一发送网络请求,在网络请求成功时再统一reload,ChatKit的实现是基于cell进行的网络请求。但我觉得基于cell用户体验好一点,需要请求的数据越多,差别越明显。
我知道Demo里是循环获取的,我现在接口已经是传id数组了,但是这个block本身会调用多次,数组里个数有一次是所有的userId,其他调用的次数里,数组里就只包含一个用户然后调用一次请求,感觉像是每一个userId请求一次,然后再总的用户数组请求一次, 分 ---- 总 的调用逻辑.可能说的不太清楚,你看一下我的请求结果就明白了.
( { avatarUrl = "http://v3.jianguojob.com/moren.png"; name = dd; userId = 3; } ) 2016-08-15 11:29:14.411 JianGuo[2944:4979978] __20-[AppDelegate login]_block_invoke_2 [Line 328]({ avatarUrl = "http://7xlell.com2.z0.glb.qiniucdn.com/FuqME5y5L1hzn1XFV8sdSuOcd3Nz"; name = "麦迪"; userId = 1; }) 2016-08-15 11:29:14.752 JianGuo[2944:4979978] __20-[AppDelegate login]_block_invoke_2 [Line 328]({ avatarUrl = "http://7xlell.com2.z0.glb.qiniucdn.com/FuqME5y5L1hzn1XFV8sdSuOcd3Nz"; name = "麦迪"; userId = 1; }, { avatarUrl = "http://7xlell.com2.z0.glb.qiniucdn.com/android_F23A1C731B1AE214CBA1DE80EDDD3519"; name = haibin; userId = 5; }, { avatarUrl = "http://v3.jianguojob.com/moren.png"; name = "订单"; userId = 2; }, { avatarUrl = "http://v3.jianguojob.com/moren.png"; name = dd; userId = 3; })
请另外再开一个issue,或者修改本issue的标题。
didReceiveRemoteNotification
具体指的哪个?是 ChatKit 的自定义方法还是系统的代理方法 ?