-
-
Save vlkam/807151a99872240918a1b3351db8cb56 to your computer and use it in GitHub Desktop.
// https://support.hockeyapp.net/kb/api/api-crashes | |
public static async Task<bool> SendHandledException(CaughtExceptionModel model) | |
{ | |
string version = DeviceInfo.AppVersion; | |
var arr = version.Split('.'); | |
string short_ver = arr[arr.Length - 1]; | |
var deviceInfo = Plugin.DeviceInfo.CrossDeviceInfo.Current; | |
StringBuilder sb = new StringBuilder(12000); | |
switch (Device.RuntimePlatform) | |
{ | |
case Device.Android: | |
sb | |
.Append("Package: ").AppendLine(AppConfig.PackageId) | |
.Append("Version Code: ").AppendLine(short_ver) | |
.Append("Version Name: ").AppendLine(version) | |
.Append("Android: ").AppendLine(DeviceInfo.OsVersion) | |
.Append("Android Build: ").AppendLine(DeviceInfo.OsBuild) | |
.Append("Manufacturer: ").AppendLine(DeviceInfo.Manufacturer) | |
.Append("Model: ").Append(deviceInfo.Model).Append(" ").AppendLine(deviceInfo.Idiom.ToString()) | |
.Append("Thread: Thread-unknown").AppendLine() | |
.Append("CrashReporter Key: ").AppendLine(AppConfig.HockeyAppCrashReporterKey) | |
.Append($"Start Date: {model.DateTime.ToUniversalTime().ToString("r")} {model.DateTime.ToString("yyyy")}").AppendLine() | |
.Append($"Date: {model.DateTime.ToUniversalTime().ToString("r")} {model.DateTime.ToString("yyyy")}").AppendLine() | |
.Append("Format: Xamarin").AppendLine() | |
.AppendLine("Caught: true") | |
.Append("").AppendLine() | |
.Append(exception.ToString()).AppendLine(); | |
break; | |
case Device.iOS: | |
sb | |
.Append("Package: ").AppendLine(AppConfig.PackageId) | |
.Append("Version Code: ").AppendLine(DeviceInfo.AppVersion) | |
.Append("Version Name: ").AppendLine("iOS") | |
.Append("Android: ").AppendLine(DeviceInfo.OsVersion) | |
.Append("Android Build: ").AppendLine(DeviceInfo.OsBuild) | |
.Append("Manufacturer: ").AppendLine("Apple") | |
.Append("Model: ").AppendLine(DeviceInfo.DeviceName) | |
.Append("Thread: Thread-unknown").AppendLine() | |
.Append("CrashReporter Key: ").AppendLine(UserSettings.AppUUID) | |
.Append($"Start Date: {model.DateTime.ToUniversalTime().ToString("r")} {model.DateTime.ToString("yyyy")}").AppendLine() | |
.Append($"Date: {model.DateTime.ToUniversalTime().ToString("r")} {model.DateTime.ToString("yyyy")}").AppendLine() | |
.Append("Format: Xamarin").AppendLine() | |
.AppendLine("Caught: true") | |
.Append("").AppendLine() | |
.Append(exception.ToString()).AppendLine(); | |
break; | |
} | |
HttpClient client = new HttpClient(); | |
var content1 = new MultipartFormDataContent(); | |
var stringContent = new StringContent(sb.ToString()); | |
stringContent.Headers.Add("Content-Disposition", "form-data; name=\"log\"; filename=\"log.txt\""); | |
RemoveQuotes(stringContent); | |
content1.Add(stringContent); | |
RemoveQuotes(content1); | |
try | |
{ | |
using (var message = await client.PostAsync($"https://rink.hockeyapp.net/api/2/apps/{AppConfig.HockeyAppId}/crashes/upload?userID={WebUtility.UrlEncode(UserSettings.LastLogin)}", content1)) | |
{ | |
return message.StatusCode == System.Net.HttpStatusCode.Created; | |
} | |
} | |
catch (Exception ex) | |
{ | |
Debug.WriteLine(ex); | |
} | |
return false; | |
} | |
static void RemoveQuotes(HttpContent content) | |
{ | |
var contentTypeString = content.Headers.ContentType.ToString().Replace("\"", ""); | |
content.Headers.Remove("Content-Type"); | |
content.Headers.TryAddWithoutValidation("Content-Type", contentTypeString); | |
} |
Crash log for iOS
Package: com.fsjunior.junior
Version Code: 1.0.51
Version Name: iOS
Android: 10.3.3
Android Build: iOS
Manufacturer: Apple
Model: iPhone 6S
Thread: Thread-unknown
CrashReporter Key: 9de38b4f-ac81-4908-b081-83d7b1fd9639
Start Date: Fri, 17 Nov 2017 03:04:14 GMT 2017
Date: Fri, 17 Nov 2017 03:04:14 GMT 2017
Format: Xamarin
Caught: true
System.Exception: Key NewsModel4406 already exists in the dictionary
at Realms.WeakCache.Add (System.String key, Realms.RealmObject value) <0x100fa4c70 + 0x00090> in <e72842efb5114c67a23b3befbbd43568#9025f1ceeb0870726cc46b222d796511>:0
at Realms.Realm.AddInternal (Realms.RealmObject obj, System.Type objectType, System.Boolean update) <0x100fa6c50 + 0x0038b> in <e72842efb5114c67a23b3befbbd43568#9025f1ceeb0870726cc46b222d796511>:0
at Realms.Realm.Add[T] (T obj, System.Boolean update) <0x100fa6b90 + 0x0003b> in <e72842efb5114c67a23b3befbbd43568#9025f1ceeb0870726cc46b222d796511>:0
at CoreXF.DefaultDataAccessManager1[T].AddRange (System.Collections.Generic.IEnumerable
1[T] range, System.Boolean update) <0x100912bc0 + 0x000e3> in <0069b4424c1f487c98987f9fe5ac4f68#9025f1ceeb0870726cc46b222d796511>:0
at JCabinet.SyncManager+SyncNewsManager+d__3.MoveNext () <0x100347f30 + 0x009f3> in <95bf17ad64f94bd5a1a4004966e84ec9#9025f1ceeb0870726cc46b222d796511>:0
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () <0x1001f6eb0 + 0x00028> in <6314851f133e4e74a2e96356deaa0c6c#9025f1ceeb0870726cc46b222d796511>:0
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) <0x1001fa080 + 0x000d3> in <6314851f133e4e74a2e96356deaa0c6c#9025f1ceeb0870726cc46b222d796511>:0
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) <0x1001f9fe0 + 0x0007f> in <6314851f133e4e74a2e96356deaa0c6c#9025f1ceeb0870726cc46b222d796511>:0
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) <0x1001f9f80 + 0x00047> in <6314851f133e4e74a2e96356deaa0c6c#9025f1ceeb0870726cc46b222d796511>:0
at System.Runtime.CompilerServices.TaskAwaiter1[TResult].GetResult () <0x1002ad290 + 0x0001b> in <6314851f133e4e74a2e96356deaa0c6c#9025f1ceeb0870726cc46b222d796511>:0 at CoreXF.HttpRequestManager
1+d__7[T].MoveNext () <0x1008fe0f0 + 0x00533> in <0069b4424c1f487c98987f9fe5ac4f68#9025f1ceeb0870726cc46b222d796511>:0
@vlkam Thanks man for your work on this - but in my case I cannot make it work =(
I receive 201 from HockeyApp with
as feedback.
Where you can look for those reports on HockeyApp ? thx
@vlkam your solution is working for me. Thanks.
Nice one! Worked for me! (y)
Result output for Android :
Package: com.fsjunior.jrcabinet
Version Code: 51
Version Name: 1.0.0.51
Android: N
Android Build: 7.0
Manufacturer: HUAWEI
Model: KOB-L09 Phone
Thread: Thread-unknown
CrashReporter Key: F3663F20-8681-B3F3-8B27-F5014EC7DE779C607866
Start Date: Wed, 15 Nov 2017 15:18:23 GMT 2017
Date: Wed, 15 Nov 2017 15:18:23 GMT 2017
Format: Xamarin
Caught: true
System.Exception: Key NewsModel3387 already exists in the dictionary
at Realms.WeakCache.Add (System.String key, Realms.RealmObject value) [0x00019] in :0
at Realms.Realm.AddInternal (Realms.RealmObject obj, System.Type objectType, System.Boolean update) [0x0012f] in :0
at Realms.Realm.Add[T] (T obj, System.Boolean update) [0x00006] in :0
at CoreXF.DefaultDataAccessManager
1[T].AddRange (System.Collections.Generic.IEnumerable
1[T] range, System.Boolean update) [0x0001f] in :0at JCabinet.SyncManager+SyncNewsManager+d__3.MoveNext () [0x002d3] in <761e88532552498eb13d828f6f314abc>:0
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <48b3919ce4d64a99829bcce51bedc89c>:0
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0003e] in <48b3919ce4d64a99829bcce51bedc89c>:0
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <48b3919ce4d64a99829bcce51bedc89c>:0
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in <48b3919ce4d64a99829bcce51bedc89c>:0
at System.Runtime.CompilerServices.TaskAwaiter
1[TResult].GetResult () [0x00000] in <48b3919ce4d64a99829bcce51bedc89c>:0 at CoreXF.HttpRequestManager
1+d__7[T].MoveNext () [0x0015f] in :0