im_flutter_sdk icon indicating copy to clipboard operation
im_flutter_sdk copied to clipboard

接收好友邀请回调不正常

Open ixre opened this issue 2 years ago • 5 comments

自定义并注册EMContactManagerListener, 当接收好友邀请时, 回调onContactInvited 会出现反复推送, 之前判断时间可以避免, 如下代码:

  int lastUnix = 0;
  @override
  onContactInvited(String? username, String? reason) async {
    int newTime = unix(DateTime.now());
    if (newTime - lastUnix > 1000) {
       ............
    }
}

但现在出现发送了好友请求, 延迟很久才回调的情况.

ixre avatar Apr 27 '22 09:04 ixre

@ixre 新增了控制回调的入口。ui创建好后,调用

EMClient.getInstance.startCallback();

这个方法,sdk才会开始回调通讯录相关的操作。 还有就是反复推送,这个我还没遇到过,能确定收到的都是同一个回调么?可以描述下具体是什么时候出现的。

dujiepeng avatar Apr 30 '22 12:04 dujiepeng

@dujiepeng ui创建好后调用指的是什么?我现在在main都完成调用了 等用户登陆后再触发的,也是有这样的情况,时有时无,有的时候一次触发很多次,看到console里有打日志 但sdk里就是不触发,我是在一个单例里统一管理所有监听的 按你demo试了一下 放在具体界面 startCallback各种位置换 都不行

abellee avatar May 24 '22 03:05 abellee

@abellee 是指你进入你app的首页后调用的,因为sdk一旦初始化后就会开始给你回调不在线期间的好友申请,而这个时候你的ui可能还没有准备好,所以当app启动后,并且你的sdk监听都实现好以后就需要调用这个方法。

dujiepeng avatar May 24 '22 18:05 dujiepeng

@dujiepeng 这个我能明白 但不论ui有没有反应,console不是应该能输出的吗 但也完全没有输出,然后sdk的debug信息里 其实是有打出来的 但是sdk的回调却没反应,我试着进到sdk源码里print 也是没有输出的 然后时有时无,然后一旦触发 就会一次性发七八次 不知道我有没有说明白

abellee avatar May 28 '22 10:05 abellee

@abellee 这个是两个问题吧,先说@ixre的,sdk是多播,也就会只要AddDelegate了,这个组件就会收到回调,所以需在destroy中删除监听。因为flutter 支持 hotload,所以有可能存在reload的时候没有执行destroy。这样的结果就是sdk中会持有多个对象,每收到一个回调就会向这些对象中回调。但是因为代码时一份,所以可能会让人认为是执行了多次。

dujiepeng avatar May 29 '22 12:05 dujiepeng