// ---------------------------------------- // // BuglyCallbackDelegate.cs // // Author: // bugly, // // Copyright (c) 2023 Bugly, Tencent. All rights reserved. // // ---------------------------------------- // using UnityEngine; using System.Collections; public class BuglyCallback { #if UNITY_ANDROID && !UNITY_EDITOR // 定义 C# 端的接口,对外隐藏 Java 相关代码 public interface ICrashHandleListener { byte[] getCrashExtraData(bool isNativeCrashed, string crashType, string crashAddress, string crashStack, int nativeSiCode, long crashTime); string getCrashExtraMessage(bool isNativeCrashed, string crashType, string crashAddress, string crashStack, int nativeSiCode, long crashTime); void onCrashHandleStart(bool isNativeCrashed); bool onCrashHandleEnd(bool isNativeCrashed); bool onCrashSaving(bool isNativeCrashed, string crashType, string crashAddress, string crashStack, int nativeSiCode, long crashTime, string userId, string deviceId, string crashUuid, string processName); } // 定义Adapter 来适配 AndroidJavaProxy 对象和 ICrashHandleListener public class ListenerAdapter : AndroidJavaProxy { private readonly ICrashHandleListener _listener; public ListenerAdapter(ICrashHandleListener listener) : base("com.tencent.feedback.eup.CrashHandleListener") { _listener = listener; } // 继承自 AndroidJavaProxy 的对象可以直接按照 Java 中的方法签名 // 写出对应的 C# 方法,参数类型遵循上文提到的数据类型转换规则。 // 当 Java 调用接口方法时,对应的 C# 方法会自动调用,非常方便。 byte[] getCrashExtraData(bool isNativeCrashed, string crashType, string crashAddress, string crashStack, int nativeSiCode, long crashTime) { return _listener.getCrashExtraData(isNativeCrashed, crashType, crashAddress, crashStack, nativeSiCode, crashTime); } string getCrashExtraMessage(bool isNativeCrashed, string crashType, string crashAddress, string crashStack, int nativeSiCode, long crashTime) { return _listener.getCrashExtraMessage(isNativeCrashed, crashType, crashAddress, crashStack, nativeSiCode, crashTime); } void onCrashHandleStart(bool isNativeCrashed) { _listener.onCrashHandleStart(isNativeCrashed); } bool onCrashHandleEnd(bool isNativeCrashed) { return _listener.onCrashHandleEnd(isNativeCrashed); } bool onCrashSaving(bool isNativeCrashed, string crashType, string crashAddress, string crashStack, int nativeSiCode, long crashTime, string userId, string deviceId, string crashUuid, string processName) { return _listener.onCrashSaving(isNativeCrashed, crashType, crashAddress, crashStack, nativeSiCode, crashTime, userId, deviceId, crashUuid, processName); } } public static ListenerAdapter GetCrashListenerAdapter(ICrashHandleListener listener) { ListenerAdapter listenerAdapter = null; if (listener != null) { listenerAdapter = new ListenerAdapter(listener); } return listenerAdapter; } #else // 定义 C# 端的接口 public interface ICrashHandleListener { string OnBuglyCrashCallback(string name, string reason, string user_info); } public class ListenerAdapter { private readonly ICrashHandleListener listener; public ListenerAdapter(ICrashHandleListener listener) { this.listener = listener; } public string OnBuglyCrashCallback(string name, string reason, string user_info) { return listener.OnBuglyCrashCallback(name, reason, user_info); } } public static ListenerAdapter GetCrashListenerAdapter(ICrashHandleListener listener) { ListenerAdapter listenerAdapter = null; if (listener != null) { listenerAdapter = new ListenerAdapter(listener); } return listenerAdapter; } #endif }