wildfirechat / wfc_flutter_plugins

野火flutter插件,包含即时通讯和实时音视频插件
Other
35 stars 26 forks source link

最新版本wfc_flutter_plugins未处理自定义消息 #32

Closed wyasher closed 1 year ago

wyasher commented 1 year ago

如上,android版本有这个问题,ios上自定义消息得到解决

wyasher commented 1 year ago
W/System.err(29275): java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object java.lang.Class.newInstance()' on a null object reference
W/System.err(29275):    at cn.wildfirechat.remote.ChatManager.messageContentFromPayload(ChatManager.java:8206)
W/System.err(29275):    at cn.wildfirechat.imclient.ImclientPlugin.messageContentFromMaps(ImclientPlugin.java:717)
W/System.err(29275):    at cn.wildfirechat.imclient.ImclientPlugin.sendMessage(ImclientPlugin.java:724)
W/System.err(29275):    at java.lang.reflect.Method.invoke(Native Method)
W/System.err(29275):    at cn.wildfirechat.imclient.ImclientPlugin.onMethodCall(ImclientPlugin.java:242)
W/System.err(29275):    at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:258)
W/System.err(29275):    at io.flutter.embedding.engine.dart.DartMessenger.invokeHandler(DartMessenger.java:295)
W/System.err(29275):    at io.flutter.embedding.engine.dart.DartMessenger.lambda$dispatchMessageToQueue$0$io-flutter-embedding-engine-dart-DartMessenger(DartMessenger.java:322)
W/System.err(29275):    at io.flutter.embedding.engine.dart.DartMessenger$$ExternalSyntheticLambda0.run(Unknown Source:12)
W/System.err(29275):    at android.os.Handler.handleCallback(Handler.java:873)
W/System.err(29275):    at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err(29275):    at android.os.Looper.loop(Looper.java:222)
W/System.err(29275):    at android.app.ActivityThread.main(ActivityThread.java:7448)
W/System.err(29275):    at java.lang.reflect.Method.invoke(Native Method)
W/System.err(29275):    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:500)
W/System.err(29275):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:865)

错误内容如上

wyasher commented 1 year ago
public MessageContent messageContentFromPayload(MessagePayload payload, String from) {
        MessageContent content = null;

        try {
            content = (MessageContent)((Class)this.messageContentMap.get(payload.type)).newInstance();
            if (content instanceof CompositeMessageContent) {
                ((CompositeMessageContent)content).decode(payload, this);
            } else {
                Log.e(TAG, "decode");
                ((MessageContent)content).decode(payload);
            }

            if (content instanceof NotificationMessageContent) {
                if (content instanceof RecallMessageContent) {
                    RecallMessageContent recallMessageContent = (RecallMessageContent)content;
                    if (recallMessageContent.getOperatorId().equals(this.userId)) {
                        ((NotificationMessageContent)content).fromSelf = true;
                    }
                } else if (from.equals(this.userId)) {
                    ((NotificationMessageContent)content).fromSelf = true;
                }
            }

            ((MessageContent)content).extra = payload.extra;
        } catch (Exception var5) {
            Log.e(TAG, "decode message error, fallback to unknownMessageContent. " + payload.type);
            var5.printStackTrace();
           //  这里自定义消息未处理 messageContentMap 中只注册了系统默认的消息
            if (content == null) {
                return null;
            }

            if (((MessageContent)content).getPersistFlag() != PersistFlag.Persist && ((MessageContent)content).getPersistFlag() != PersistFlag.Persist_And_Count) {
                return null;
            }

            content = new UnknownMessageContent();
            ((UnknownMessageContent)content).setOrignalPayload(payload);
        }

        return (MessageContent)content;
    }