更新时间: 2021-03-10
# 功能描述
Flutter 基于融云 iOS/Android 平台的 IMLib SDK
,所以该功能具体详情参见 iOS/Android 的文档
# 本地通知的实现
1.依赖 flutter_local_notifications 2.在 main.dart 实现并监听 WidgetsBindingObserver ,获取 APP 生命周期状态并保存 3.在 main.dart 中监听消息接收,如果在后台,发本地通知,否则通过 EventBus 通知会话列表和聊天页面收到了消息
详细可以参见示例代码中 main.dart
的处理,示例代码 (opens new window)
# 常见问题
示例代码
示例代码参见此处 (opens new window)
iOS 如何获取 deviceToken
参考 Runner 中 AppDelegate.m
中的实现方法, 如果是 Swift
, 请参考 AppDelegate.swift (opens new window)
iOS/Android 如何将本地通知或者远程推送的内容传递至 Flutter 层
参考 示例代码 中 AppDelegate.m
中的 sendDataToFlutter
实现方法。如果是 Swift
, 请参考 AppDelegate.swift (opens new window)
Android 参考 MainActivity.java
中的 sendDataToFlutter
实现
Dart 接收 iOS/Android 数据的回调
RongIMClient.onDataReceived = (Map map) { developer.log("object onDataReceived " + map.toString(), name: pageName); };
已复制
2
3
Android 设备按返回键退出 APP,收不到消息,无法做本地通知
此时收到消息报如下错误
D/FlutterNativeView(15798): FlutterView.send called on a detached view, channel=rongcloud_im_plugin
已复制
这个问题的原因可以看一下 这个 Issue (opens new window) ,上面提到的像是 Flutter 本身的问题
出现这个问题本质原因是 APP 被系统回收了,用来和 Android IMLib SDK 沟通的 MethodChannel 也被回收了,但是 Android IMLib 的 IM 通道还存在,此时有消息来, Android IMLib 通过 IM 通道能够收到,但是因为 MethodChannel 被销毁,无法通知给 Flutter APP,也就无法弹本地通知
这个问题目前的建议是当按返回键退出 APP 的时候,调用 disconnect 接口主动断开 IM 通道,这样就可以走推送通道