设置消息提醒点击跳转
更新时间: 2024/03/07 11:12:17
云信 Flutter 端的在线消息提醒点击跳转功能由于平台限制,需要依赖原生 Android SDK 来实现。
本文将简要描述如何在 Android 端实现 Flutter 平台的在线消息提醒点击跳转功能。
-
在 dart 层指定跳转的 Activity,Flutter 应用中一般跳转到 MainActivity。示例代码如下:
//构建如下Config //请注意此处的className 需要是全名 var config = NIMStatusBarNotificationConfig(notificationEntranceClassName: 'com.netease.yunxin.app.flutter.im.MainActivity', notificationExtraType:NIMNotificationExtraType.jsonArrStr); //可以在初始化的时候设置到Option中如下 NimCore.instance.initialize(NIMAndroidSDKOptions(appKey: 'appKey',notificationConfig: config)); //也可以单独配置 NimCore.instance.settingsService.updateNotificationConfigAndroid(config);
-
在原生层对应的 Activity 中获取 notify 的数据,并解析传给 dart 层处理。示例代码如下:
消息提醒的使用场景(应用在前台还是在后台)不同,通过 notify 点击跳转 Activity 时产生的回调也会不同,因此需要同时处理 onNewIntent 和 onCreate 回调。
// MethodChannel的名称,自定义 private val channelName = "com.netease.yunxin.app.flutter.im/channel" private val methodName = "pushMessage" override fun onNewIntent(intent: Intent) { super.onNewIntent(intent) parseIntent(intent) } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) parseIntent(intent) } private fun parseIntent(intent: Intent){ if (intent.hasExtra("com.netease.nim.EXTRA.NOTIFY_SESSION_CONTENT")){ val messageStr: String? = intent.getStringExtra("com.netease.nim.EXTRA.NOTIFY_SESSION_CONTENT") messageStr?.let { try { val jsonArray = JSONArray(messageStr) val firstObj = jsonArray.getJSONObject(0); val sessionId = firstObj["sessionId"] as String val sessionType = firstObj["sessionType"] as Int //注意,此处需要将sessionType转成String传到dart层,示例仅考虑p2p 和 team,如有其他业务场景,请参考 //int P2P = 0; int Team = 1; int Ysf = 2; int CUSTOM_PERSON = 2; int CUSTOM_TEAM = 3; //int TEMP = 4; int SUPER_TEAM = 5; val sessionTypeStr = if(sessionType == 0 ) "p2p" else "team" Log.i("MainActivity","sessionId = $sessionId sessionType = $sessionTypeStr") // 将数据传递给Flutter端 flutterEngine?.dartExecutor?.let { MethodChannel(it,channelName).setMethodCallHandler{ call, result -> if(call.method == methodName){ result.success(mapOf<String,String>( "sessionId" to sessionId, "sessionType" to sessionTypeStr )) } } } }catch (e:JSONException){ Log.e("MainActivity",e.message.toString()) } } } }
-
在 Flutter 层的主页面,使用 methodChannel 获取
sessionId
,sessionType
等信息,用于跳转到自定义页面。示例代码如下:void _getMessageFromAndroid() { const channelName = "com.netease.yunxin.app.flutter.im/channel"; const methodName = "pushMessage"; const channel = MethodChannel(channelName); channel.invokeMapMethod<String,dynamic>(methodName).then((value){ print("Message from Android is = $value}"); //todo 跳转到指定的页面 }); }
此文档是否对你有帮助?