jpush和jmessage的Flutter插件在flutter1.6.x以上版本上崩溃(安卓)

标签: #<Tag:0x00007f657f047428> #<Tag:0x00007f657f047270> #<Tag:0x00007f657f047130> #<Tag:0x00007f657f046fa0> #<Tag:0x00007f657f046e38>


在安卓设备上,如图,在设置alias等操作,但凡有callback回调操作的地方,都会崩溃,原因是flutter1.6.0+版本之后修改了机制,要求相关操作不得在子线程,而必须在ui主线程中完成。

另外jpush_flutter 0.0.11和jmessage_flutter 0.0.16所引用的原生sdk版本过低,目前发现部分问题,
比如安卓上面的getConversations不能实时返回,必须间隔3秒后,重复调用,才能获得会话列表;
比如安卓上的getHistoryMessages,在超过一段时间后,再次调用,由于云端数据已经清空,而原生java代码未作保护,引起空指针错误

请问这些问题是否在最新的jpush和jcore中解决?如果解决的话,什么时候可以更新jpush_flutter和jmessage_flutter?

1赞

问题已反馈给研发。

请问这个要求有官方说明吗?

你目前使用的 Flutter 版本是?从何处取得该版本信息?

目前我线上app版本已经降级到flutter1.5.4-hotfix.2也就是stable分支,其他3个分支变动较快,目前应该是1.7.0+的版本了,回调机制的话官方似乎没有一个完整的文档说明,但可以参考https://github.com/flutter/flutter/issues。
另外版本太老的问题,可以升级一下,包括web端的im sdk,2018年1月到现在没更新过

我们用的是flutter 稳定分支 stable的代码 1.5.4,1.6.0 还并非稳定版本,非稳定版本的暂时不适配

但是现在flutter插件跟android和ios插件版本有点差距,有蛮多问题,什么时候可以升级flutter sdk呢

你说的是插件 未和最新的极光原生 SDK 版本适配吗?

是的,flutter插件未与最新原生sdk版本匹配,而且是差了个大版本

另外,现在flutter的stable分支直接升级到了1.7.8+hotfix.2版本,你们的插件已经无法使用了,之前提醒过让尽早适配1.6.0+,你们开发还说只适配stable分支,现在直接到了1.7.8版本,是不是工作量更大了?

java.lang.RuntimeException: Methods marked with @UiThread must be executed on the main thread. Current thread: MessageReceiver

jpush_flutter: “^0.0.11”
jmessage_flutter: “^0.0.17”

android崩溃

请问你是在做什么操作的时候crash 的?

描述下具体的情况

我们刚刚升级到了 Flutter 最新版本用插件的时候,没有发现你说的异常

setAlias
getConversations

只在安卓上崩溃

已反馈给研发

发现同样问题,在稳定版v1.7.8+hotfix.3-stable android崩溃

请问啥时候能更新呢,现在也等着更新 flutter 版本

发现同样问题,在稳定版v1.7.8+hotfix.3-stable android崩溃

一样。用最新的fluttersdk ,我也遇到了android直接奔溃

@memorry_dream @Simeon @zsm2019

麻烦给出你们的操作步骤,和崩溃信息

我来描述下
目前接入项目是 jpush_flutter 0.0.12 和 jmessage_flutter 0.0.20
目前安卓还是会崩溃,问题出在老久的 jpush_flutter 0.0.12 上
初步问题:出现在 jpush_flutter 0.0.12中调用JPush().setAlias(alias)和JPush().deleteAlias()会直接崩溃,其他setTags,addTags,deleteTags,getAllTags,cleanTags等等很多方法不知道是否有这问题。
深入问题:出现在这些崩溃背后,都提示
java.lang.RuntimeException: Methods marked with @UiThread must be executed on the main thread. Current thread: MessageReceiver
E/AndroidRuntime(27382): at io.flutter.embedding.engine.FlutterJNI.ensureRunningOnMainThread(FlutterJNI.java:794)
E/AndroidRuntime(27382): at io.flutter.embedding.engine.FlutterJNI.invokePlatformMessageResponseCallback(FlutterJNI.java:727)
E/AndroidRuntime(27382): at io.flutter.embedding.engine.dart.DartMessenger$Reply.reply(DartMessenger.java:140)
E/AndroidRuntime(27382): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler$1.success(MethodChannel.java:225)
E/AndroidRuntime(27382): at com.jiguang.jpush.JPushEventReceiver.onAliasOperatorResult(JPushEventReceiver.java:107)
E/AndroidRuntime(27382): at cn.jpush.android.a.b.run(Unknown Source:90)
E/AndroidRuntime(27382): at android.os.Handler.handleCallback(Handler.java:873)
E/AndroidRuntime(27382): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(27382): at android.os.Looper.loop(Looper.java:214)
E/AndroidRuntime(27382): at android.os.HandlerThread.run(HandlerThread.java:65)

也就是说,这些方法在接收回调的地方,原本需要在UI线程执行,而在子线程中执行,导致崩溃。

另外,看 jpush_flutter 0.0.12 和 jmessage_flutter 0.0.20插件引用的原生sdk,居然不一致
jpush_flutter 0.0.12 引用的是
implementation ‘cn.jiguang.sdk:jpush:3.1.6’
implementation ‘cn.jiguang.sdk:jcore:1.2.5’

jmessage_flutter 0.0.20 引用的是
implementation ‘cn.jiguang.sdk:jmessage:2.9.0’
implementation ‘cn.jiguang.sdk:jcore:2.1.0’

老哥哥,这2个插件,是2个团队的人维护的么,速速修正啊

如上。。。。