@@ -64,6 +64,7 @@ public class NativeBugsnag {
6464 public static extern void SetUser ( string userId , string userName , string userEmail ) ;
6565#elif UNITY_ANDROID && ! UNITY_EDITOR
6666 public static AndroidJavaClass Bugsnag = new AndroidJavaClass ( "com.bugsnag.android.Bugsnag" ) ;
67+ public static AndroidJavaClass BugsnagUnity = new AndroidJavaClass ( "com.bugsnag.android.unity.UnityClient" ) ;
6768 public static Regex unityExpression = new Regex ( "(\\ S+)\\ s*\\ (.*?\\ )\\ s*(?:(?:\\ [.*\\ ]\\ s*in\\ s|\\ (at\\ s*\\ s*)(.*):(\\ d+))?" , RegexOptions . IgnoreCase | RegexOptions . Multiline ) ;
6869
6970 public static void Register ( string apiKey ) {
@@ -72,7 +73,12 @@ public static void Register(string apiKey) {
7273 AndroidJavaObject activity = unityPlayerClass . GetStatic < AndroidJavaObject > ( "currentActivity" ) ;
7374 AndroidJavaObject app = activity . Call < AndroidJavaObject > ( "getApplicationContext" ) ;
7475
75- Bugsnag . CallStatic < AndroidJavaObject > ( "init" , app , apiKey ) ;
76+ jvalue [ ] args = new jvalue [ 2 ] {
77+ new jvalue ( ) { l = app . GetRawObject ( ) } ,
78+ new jvalue ( ) { l = AndroidJNI . NewStringUTF ( apiKey ) } ,
79+ } ;
80+ IntPtr methodId = AndroidJNI . GetStaticMethodID ( BugsnagUnity . GetRawClass ( ) , "init" , "(Landroid/content/Context;Ljava/lang/String;)V" ) ;
81+ AndroidJNI . CallStaticVoidMethod ( BugsnagUnity . GetRawClass ( ) , methodId , args ) ;
7682 Notify ( "errorClass" , "error message" , "error" , "" , new System . Diagnostics . StackTrace ( 1 , true ) . ToString ( ) , null , true ) ;
7783 }
7884
@@ -126,39 +132,19 @@ public static void Notify(string errorClass, string errorMessage, string severit
126132 severityInstance = Severity . GetStatic < AndroidJavaObject > ( "WARNING" ) ;
127133 }
128134
129- // Add unity exception to meta data
130- var metaData = new AndroidJavaObject ( "com.bugsnag.android.MetaData" ) ;
131- jvalue [ ] args = new jvalue [ 3 ] {
132- new jvalue ( ) { l = AndroidJNI . NewStringUTF ( "Unity" ) } ,
133- new jvalue ( ) { l = AndroidJNI . NewStringUTF ( "unityException" ) } ,
134- new jvalue ( ) { l = AndroidJNI . NewStringUTF ( "true" ) } ,
135- } ;
136- IntPtr addToTabMethodId = AndroidJNI . GetMethodID ( metaData . GetRawClass ( ) , "addToTab" , "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V" ) ;
137- AndroidJNI . CallVoidMethod ( metaData . GetRawObject ( ) , addToTabMethodId , args ) ;
138-
139- if ( ! String . IsNullOrEmpty ( type ) ) {
140- // Add unity log level
141- args = new jvalue [ 3 ] {
142- new jvalue ( ) { l = AndroidJNI . NewStringUTF ( "Unity" ) } ,
143- new jvalue ( ) { l = AndroidJNI . NewStringUTF ( "unityLogLevel" ) } ,
144- new jvalue ( ) { l = AndroidJNI . NewStringUTF ( type ) } ,
145- } ;
146- AndroidJNI . CallVoidMethod ( metaData . GetRawObject ( ) , addToTabMethodId , args ) ;
147- }
148-
149135 // Build the arguments
150- args = new jvalue [ 6 ] {
136+ jvalue [ ] args = new jvalue [ 6 ] {
151137 new jvalue ( ) { l = AndroidJNI . NewStringUTF ( errorClass ) } ,
152138 new jvalue ( ) { l = AndroidJNI . NewStringUTF ( errorMessage ) } ,
153139 new jvalue ( ) { l = AndroidJNI . NewStringUTF ( context ) } ,
154140 new jvalue ( ) { l = ( IntPtr ) stackFrameArrayObject } ,
155141 new jvalue ( ) { l = severityInstance . GetRawObject ( ) } ,
156- new jvalue ( ) { l = metaData . GetRawObject ( ) }
142+ new jvalue ( ) { l = String . IsNullOrEmpty ( type ) ? IntPtr . Zero : AndroidJNI . NewStringUTF ( type ) }
157143 } ;
158144
159145 // Call Android's notify method
160- IntPtr clientConstructorId = AndroidJNI . GetStaticMethodID ( Bugsnag . GetRawClass ( ) , "notify" , "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/StackTraceElement;Lcom/bugsnag/android/Severity;Lcom/bugsnag/android/MetaData ;)V" ) ;
161- if ( warmup == false ) AndroidJNI . CallStaticVoidMethod ( Bugsnag . GetRawClass ( ) , clientConstructorId , args ) ;
146+ IntPtr clientConstructorId = AndroidJNI . GetStaticMethodID ( BugsnagUnity . GetRawClass ( ) , "notify" , "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/StackTraceElement;Lcom/bugsnag/android/Severity;Ljava/lang/String ;)V" ) ;
147+ if ( warmup == false ) AndroidJNI . CallStaticVoidMethod ( BugsnagUnity . GetRawClass ( ) , clientConstructorId , args ) ;
162148 }
163149 }
164150
@@ -428,7 +414,11 @@ private void InitInternal(string apiKey) {
428414 NativeBugsnag . AddToTab ( "Unity" , "platform" , Application . platform . ToString ( ) ) ;
429415 NativeBugsnag . AddToTab ( "Unity" , "osLanguage" , Application . systemLanguage . ToString ( ) ) ;
430416#if UNITY_5_OR_NEWER
417+ #if UNITY_5_6_OR_NEWER
431418 NativeBugsnag . AddToTab ( "Unity" , "bundleIdentifier" , Application . identifier . ToString ( ) ) ;
419+ #else
420+ NativeBugsnag . AddToTab ( "Unity" , "bundleIdentifier" , Application . bundleIdentifier . ToString ( ) ) ;
421+ #endif
432422 NativeBugsnag . AddToTab ( "Unity" , "version" , Application . version . ToString ( ) ) ;
433423 NativeBugsnag . AddToTab ( "Unity" , "companyName" , Application . companyName . ToString ( ) ) ;
434424 NativeBugsnag . AddToTab ( "Unity" , "productName" , Application . productName . ToString ( ) ) ;
@@ -529,7 +519,8 @@ void HandleLog (string logString, string stackTrace, LogType type) {
529519 errorClass = match . Groups [ "errorClass" ] . Value ;
530520 errorMessage = match . Groups [ "message" ] . Value . Trim ( ) ;
531521 } else {
532- errorClass = logString ;
522+ errorClass = "UnityLog" + type ;
523+ errorMessage = logString ;
533524 }
534525
535526 if ( stackTrace == null || stackTrace == "" ) {
0 commit comments