118 lines
3.8 KiB
C#
118 lines
3.8 KiB
C#
|
|
using System;
|
|||
|
|
using System.Collections;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using UnityEngine;
|
|||
|
|
using System.Text;
|
|||
|
|
using System.Diagnostics;
|
|||
|
|
using System.Reflection;
|
|||
|
|
|
|||
|
|
namespace ThinkingAnalytics.TaException
|
|||
|
|
{
|
|||
|
|
public interface TaExceptionHandler
|
|||
|
|
{
|
|||
|
|
void InvokeTaExceptionHandler(string eventName, Dictionary<string, object> properties);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public class ThinkingSDKExceptionHandler
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
public void SetTaExceptionHandler(TaExceptionHandler handler)
|
|||
|
|
{
|
|||
|
|
this.taExceptionHandler = handler;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private TaExceptionHandler taExceptionHandler;
|
|||
|
|
|
|||
|
|
//是否退出程序当异常发生时
|
|||
|
|
public bool IsQuitWhenException = false;
|
|||
|
|
|
|||
|
|
public void RegisterTaExceptionHandler ()
|
|||
|
|
{
|
|||
|
|
//注册异常处理委托
|
|||
|
|
try {
|
|||
|
|
#if UNITY_5
|
|||
|
|
Application.logMessageReceived += _LogHandler;
|
|||
|
|
#else
|
|||
|
|
Application.RegisterLogCallback (_LogHandler);
|
|||
|
|
#endif
|
|||
|
|
AppDomain.CurrentDomain.UnhandledException += _UncaughtExceptionHandler;
|
|||
|
|
}
|
|||
|
|
catch {
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void UnregisterTaExceptionHandler ()
|
|||
|
|
{
|
|||
|
|
//清除异常处理委托
|
|||
|
|
try {
|
|||
|
|
#if UNITY_5
|
|||
|
|
Application.logMessageReceived -= _LogHandler;
|
|||
|
|
#else
|
|||
|
|
Application.RegisterLogCallback (null);
|
|||
|
|
#endif
|
|||
|
|
System.AppDomain.CurrentDomain.UnhandledException -= _UncaughtExceptionHandler;
|
|||
|
|
}
|
|||
|
|
catch {
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
private void _LogHandler( string logString, string stackTrace, LogType type )
|
|||
|
|
{
|
|||
|
|
if( type == LogType.Error || type == LogType.Exception || type == LogType.Assert )
|
|||
|
|
{
|
|||
|
|
//发送异常日志
|
|||
|
|
string reasonStr = "exception_type: " + type.ToString() + " <br> " + "exception_message: " + logString + " <br> " + "stack_trace: " + stackTrace + " <br> " ;
|
|||
|
|
Dictionary<string, object> properties = new Dictionary<string, object>(){
|
|||
|
|
// {ThinkingSDKConstant.CRASH_REASON, reasonStr}
|
|||
|
|
{"#app_crashed_reason", reasonStr}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
taExceptionHandler.InvokeTaExceptionHandler("ta_app_crash",properties);
|
|||
|
|
|
|||
|
|
//退出程序,bug反馈程序重启主程序
|
|||
|
|
if( IsQuitWhenException )
|
|||
|
|
{
|
|||
|
|
Application.Quit();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void _UncaughtExceptionHandler (object sender, System.UnhandledExceptionEventArgs args)
|
|||
|
|
{
|
|||
|
|
if (args == null || args.ExceptionObject == null) {
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
try {
|
|||
|
|
if (args.ExceptionObject.GetType () != typeof(System.Exception)) {
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
catch {
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
System.Exception e = (System.Exception)args.ExceptionObject;
|
|||
|
|
|
|||
|
|
//发送异常日志
|
|||
|
|
string reasonStr = "exception_type: " + e.GetType().Name + " <br> " + "exception_message: " + e.Message + " <br> " + "stack_trace: " + e.StackTrace + " <br> " ;
|
|||
|
|
Dictionary<string, object> properties = new Dictionary<string, object>(){
|
|||
|
|
// {ThinkingSDKConstant.CRASH_REASON, reasonStr}
|
|||
|
|
{"#app_crashed_reason", reasonStr}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
taExceptionHandler.InvokeTaExceptionHandler("ta_app_crash",properties);
|
|||
|
|
|
|||
|
|
//退出程序,bug反馈程序重启主程序
|
|||
|
|
if( IsQuitWhenException )
|
|||
|
|
{
|
|||
|
|
Application.Quit();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|