Aracılığıyla paylaş


API aracılığıyla karşıya yükleme kilitlenmeleri

Önemli

Visual Studio App Center 31 Mart 2025'te kullanımdan kaldırılıyor. Tamamen kullanımdan kaldırılana kadar Visual Studio App Center'ı kullanmaya devam edebilirsiniz ancak geçiş yapmayı düşünebileceğiniz birkaç önerilen alternatif vardır.

Destek zaman çizelgeleri ve alternatifleri hakkında daha fazla bilgi edinin.

SDK'mızı kullanmak veya özel bir platform için geliştirmek istemiyorsanız kilitlenme raporunu karşıya yükleyebilirsiniz. App Center'a kilitlenme, hata veya ek günlüğü yükleyin ve App Center Tanılama kullanıcı arabiriminde ayrıntıları görüntüleyin. Aşağıdaki bölümlerde kilitlenmelerin, hataların ve eklerin nasıl karşıya yüklendiği açıklanmaktadır.

Not

App Center, benzersiz uygulama başına dakikada en fazla 60 kilitlenme ve işleme hatası kabul eder. Bu sınırı aşan kilitlenmeleri veya hataları almayacağız.

Bir raporu karşıya yüklemek için app center alma uç noktasını https://in.appcenter.ms/logs?Api-Version=1.0.0 aşağıdaki üst bilgilerle çağırın:

  • Content-Type: gövdenin biçimini açıklar. App Center şu anda yalnızca JSON biçimini desteklemektedir.
  • App-Secret: her uygulama için benzersiz tanımlayıcı olan dize. Uygulama gizli dizisini bir uygulamanın ayarlarında bulabilirsiniz.
  • Install-ID: sayıları izlemek için kullanılan herhangi bir GUID olabilecek dize.

Günlük özellikleri:

  • type: günlük türüne sahip gerekli dize - Apple kilitlenmeleri için "appleError", diğer kilitlenmeler için "managedError", hatalar için "handledError" ve hata ekleri için "errorAttachment".
  • timestamp: "2017-03-13T18:05:42Z" gibi günlük zaman damgası tarih saatine sahip isteğe bağlı dize - ayarlandıysa, alım zamanının geleceğinde en fazla 72 saat olmalıdır
  • appLaunchTimestamp: uygulamanın başlatıldığı zaman damgası tarih-saatini belirten gerekli dize, örneğin "2017-03-13T18:05:42Z".
  • device: cihaz özelliklerine sahip gerekli nesne
    • appVersion: uygulama sürümü adıyla gerekli dize, örneğin "1.1.0"
    • appBuild: uygulama derleme numarasıyla gerekli dize, örneğin "42"
    • sdkName: SDK adıyla gerekli dize. SDK'nın ve platformun adından oluşur; örneğin, Android için "appcenter.android" ve özel platformlar için "appcenter.custom"
    • sdkVersion: SDK'nın anlamsal sürüm oluşturma biçimindeki sürümüyle gerekli dize, örneğin "1.2.0" veya "0.12.3-alfa.1"
    • osName: işletim sistemi adıyla gerekli dize, örneğin "android"
    • osVersion: İşletim sistemi sürümüyle gerekli dize, örneğin "9.3.0"
    • model: cihaz modeliyle isteğe bağlı dize, örneğin "iPad2"
    • locale: dil koduyla gerekli dize, örneğin "tr-TR"
    • timeZoneOffset: cihaz saat dilimi için Eşgüdümlü Evrensel Saat'ten (UTC) dakika cinsinden isteğe bağlı uzaklık (-840 ile 840 arasında). Yaz saati dahil, örneğin 120.
  • userId: günlükleri kullanıcılarla ilişkilendirmek için kullanılan isteğe bağlı dize
  • exception: özel durum ayrıntılarıyla gerekli nesne
    • type: özel durum türüne sahip gerekli dize
    • frame: yığın çerçeveli isteğe bağlı dizi
    • message: özel durum nedeni olan isteğe bağlı dize
    • stackTrace: ham yığın izlemeli isteğe bağlı dize
    • innerException: iç özel durumlarla isteğe bağlı dizi

Kilitlenme raporunu, hata raporunu ve eki karşıya yükleme örneklerini aşağıda bulabilirsiniz. Daha fazla belirtim için dosyanın tamamını burada bulabilirsiniz.

Not

Bekletme ilkeleri nedeniyle raporun timestamp son 25 günden veya gelecekte 3 günden fazla olmaması gerekir.

Kilitlenme raporunu karşıya yükleme

Kilitlenme raporunu karşıya yüklemek için aşağıdaki özellikler gereklidir:

  • processId: işlem tanımlayıcısı ile gerekli tamsayı
  • id: özel durum tanımlayıcısı olan gerekli dizenin bu rapor için benzersiz bir kimlik olması gerekir
  • fatal: özel durumun kilitlenmeye neden olup olmadığını belirten gerekli boole değeri
  • processName: işlem adıyla gerekli dize
  • appNamespace: Android uygulamaları için gereklidir; aksi takdirde hangi platformun kullanıldığına bağlı olarak paket tanımlayıcısı, paket tanımlayıcısı veya ad alanı ile isteğe bağlı dize.

Apple biçiminden başka bir kilitlenme raporunu karşıya yüklemek için günlük türünün "managedError" olarak ayarlandığından emin olun.

curl -X POST \
  'https://in.appcenter.ms/logs?Api-Version=1.0.0' \
  -H 'Content-Type: application/json' \
  -H 'app-secret: <app secret>' \
  -H 'install-id: 00000000-0000-0000-0000-000000000001' \
  -d '{
  "logs": [
    {
      "type": "managedError",
      "timestamp": "2019-10-08T04:22:23.516Z",
      "appLaunchTimestamp": "2019-09-29T22:22:23.516Z",
      "processId": "123",
      "id": "bca65f46-46ee-451b-83bb-2e358c3f45bf",
      "fatal": true,
      "processName": "com.microsoft.appcenter.demo.project",
      "device": {
        "appVersion": "12.0",
        "appBuild": "1",
        "sdkName": "custom.android",
        "sdkVersion": "1.0.0",
        "osName": "android",
        "osVersion": "9.3",
        "model": "Pixel",
        "locale": "en-US",
        "appNamespace": "com.contoso.myapp"
      },
      "userId": "TestID",
      "exception": {
        "type": "java.lang.RuntimeException",
        "frames": [
          {
            "className": "android.app.ActivityThread",
            "fileName": "ActivityThread.java",
            "lineNumber": 2575,
            "methodName": "performResumeActivity"
          },
          {
            "className": "android.app.ActivityThread",
            "fileName": "ActivityThread.java",
            "lineNumber": 2603,
            "methodName": "handleResumeActivity"
          },
          {
            "className": "android.app.ActivityThread",
            "fileName": "ActivityThread.java",
            "lineNumber": 2089,
            "methodName": "handleLaunchActivity"
          },
          {
            "className": "android.app.ActivityThread",
            "fileName": "ActivityThread.java",
            "lineNumber": 130,
            "methodName": "access$600"
          },
          {
            "className": "android.app.ActivityThread$H",
            "fileName": "ActivityThread.java",
            "lineNumber": 1195,
            "methodName": "handleMessage"
          },
          {
            "className": "android.os.Handler",
            "fileName": "Handler.java",
            "lineNumber": 99,
            "methodName": "dispatchMessage"
          },
          {
            "className": "android.os.Looper",
            "fileName": "Looper.java",
            "lineNumber": 137,
            "methodName": "loop"
          },
          {
            "className": "android.app.ActivityThread",
            "fileName": "ActivityThread.java",
            "lineNumber": 4745,
            "methodName": "main"
          }
        ],
        "innerExceptions": [
          {
            "type": "java.lang.RuntimeException",
            "frames": [
              {
                "className": "android.app.Activity",
                "fileName": "Activity.java",
                "lineNumber": 5084,
                "methodName": "performResume"
              },
              {
                "className": "android.app.ActivityThread",
                "fileName": "ActivityThread.java",
                "lineNumber": 2565,
                "methodName": "performResumeActivity"
              },
              {
                "className": "android.app.ActivityThread",
                "fileName": "ActivityThread.java",
                "lineNumber": 2603,
                "methodName": "handleResumeActivity"
              }
            ]
          }
        ]
      }
    }
  ]
}'

Apple kilitlenme günlüğünü karşıya yükleme

Apple kilitlenme günlüğünü karşıya yüklemek için günlük türünün "appleError" olarak ayarlandığından emin olun. Aşağıdaki özellikler de gereklidir:

  • primaryArchitectureId: CPU birincil mimarisi ile gerekli tamsayı
  • applicationPath: uygulamanın yolunu içeren gerekli dize
  • osExceptionType: işletim sistemi özel durum türüne sahip gerekli dize
  • osExceptionCode: İşletim sistemi özel durum koduyla gerekli dize
  • osExceptionAddress: İşletim sistemi özel durum adresiyle gerekli dize
  • binaries: hatayla ilişkili ikili dosyaları olan gerekli dizi

Örnek:

curl -X POST \
  'https://in.appcenter.ms/logs?Api-Version=1.0.0' \
  -H 'Content-Type: application/json' \
  -H 'app-secret: <app secret>' \
  -H 'install-id: 00000000-0000-0000-0000-000000000001' \
  -d '{
  "logs":
  [
    {
        "type": "appleError",
        "timestamp": "2019-10-08T02:44:55.000Z",
        "appLaunchTimestamp": "2019-09-29T22:22:23.516Z",
        "id": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
        "applicationPath": "iOS/salesforce",
        "osExceptionType": "CustomerIssue (TestIssue)",
        "osExceptionCode": "0",
        "osExceptionAddress": "0x00",
        "processName": "salesforce",
        "fatal": true,
        "isTestMessage": false,
        "device": {
          "appVersion": "10.0",
          "appBuild": "1",
          "sdkName": "custom.ios",
          "sdkVersion": "1.0.0",
          "osName": "iOS",
          "osVersion": "9.3",
          "model": "iPhone9,1",
          "locale": "en-US"
        },
        "userId": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
        "fatal": true,
        "threads": [
         {
          "id": 0,
          "frames": [
            {
              "address": "0x000000018ada4d70",
              "code": "0x18ad87000 + 122224"
            },
            {
              "address": "0x0000000104463884",
              "code": "0x10445c000 + 30852"
            },
            {
              "address": "0x000000010438f640",
              "code": "0x104388000 + 30272"
            },
            {
              "address": "0x00000001b859fb64",
              "code": "0x1b8229000 + 3631972"
            }
          ]
        },
        {
          "id": 1,
          "frames": [
            {
              "address": "0x000000018bb4fce0",
              "code": "0x18baa2000 + 711904"
            },
            {
              "address": "0x000000018bbf7078",
              "code": "0x18baa2000 + 1396856"
            },
            {
              "address": "0x000000018baa8258",
              "code": "0x18baa2000 + 25176"
            },
            {
              "address": "0x000000018bb1c49c",
              "code": "0x18baa2000 + 500892"
            }
          ]
        },
        {
          "id": 3,
          "frames": [
            {
              "address": "0x000000018b755b9c",
              "code": "0x18b732000 + 146332"
            },
            {
              "address": "0x000000018b7dcd00",
              "code": "0x18b7ce000 + 60672"
            }
          ]
        }
      ],
      "binaries": [
        {
          "id": "d449e33d-7e74-379d-8b79-15ee104ed1df",
          "startAddress": "0x0000000104388000",
          "endAddress": "0x0000000104413fff",
          "name": "CrashProbeiOS",
          "path": "/var/containers/Bundle/Application/023013EA-0D58-4F6D-8B98-49E1372F4044/CrashProbeiOS.app/CrashProbeiOS",
          "primaryArchitectureId": 16777228,
          "architectureVariantId": 0
        },
        {
          "id": "5da23653-d126-39f0-bdcf-994b3019f92c",
          "startAddress": "0x000000010445c000",
          "endAddress": "0x0000000104467fff",
          "name": "CrashLibiOS",
          "path": "/private/var/containers/Bundle/Application/023013EA-0D58-4F6D-8B98-49E1372F4044/CrashProbeiOS.app/Frameworks/CrashLibiOS.framework/CrashLibiOS",
          "primaryArchitectureId": 16777228,
          "architectureVariantId": 0
        }
      ]
    }
  ]
}'

Özel kilitlenme günlüğünü karşıya yükleme

Özel platform için kilitlenmeyi karşıya yüklemek için günlük türünün "managedError" ve sdkName değerinin "appcenter.custom" olarak ayarlandığından emin olun. Örnek:

curl -X POST \
  'https://in.appcenter.ms/logs?Api-Version=1.0.0' \
  -H 'Content-Type: application/json' \
  -H 'app-secret: <app secret>' \
  -H 'install-id: 00000000-0000-0000-0000-000000000001' \
  -d '{
  "logs": [
    {
      "type": "managedError",
      "id": "a7bea41b-1e4d-4e42-ae76-1025f4fdfc4f",
      "userId": "TestID",
      "timestamp": "2019-11-26T02:00:04Z",
      "appLaunchTimestamp": "2019-11-26T02:00:04Z",
      "architecture": "armeabi-v7a",
      "fatal": true,
      "processId": 4871,
      "processName": "com.microsoft.appcenter.sasquatch.project",
      "sid": "bca65f46-46ee-451b-83bb-2e358c3f45bf",
      "errorThreadId": 1,
      "errorThreadName": "main",
      "device": {
        "appBuild": "1337",
        "appVersion": "7.1.0",
        "appNamespace": "com.microsoft.appcenter.sasquatch.project",
        "carrierCountry": "us",
        "locale": "en_US",
        "model": "Galaxy Nexus",
        "oemName": "samsung",
        "osApiLevel": 16,
        "osBuild": "JRO03O",
        "osName": "Android",
        "osVersion": "5.0.0",
        "screenSize": "720x1184",
        "sdkName": "appcenter.custom",
        "sdkVersion": "1.9.1",
        "timeZoneOffset": -480
      },
       "exception": {
        "frames": [
          {
            "className": "android.app.ActivityThread",
            "fileName": "ActivityThread.java",
            "lineNumber": 2575,
            "methodName": "performResumeActivity"
          },
          {
            "className": "android.app.ActivityThread",
            "fileName": "ActivityThread.java",
            "lineNumber": 2603,
            "methodName": "handleResumeActivity"
          },
          {
            "className": "android.app.ActivityThread",
            "fileName": "ActivityThread.java",
            "lineNumber": 2089,
            "methodName": "handleLaunchActivity"
          }
        ],
        "innerExceptions": [
          {
            "frames": [
              {
                "className": "android.app.CustomActivity",
                "fileName": "CustomActivity.java",
                "lineNumber": 8673,
                "methodName": "performCustomResume"
              },
              {
                "className": "android.app.ActivityThread",
                "fileName": "ActivityThread.java",
                "lineNumber": 2565,
                "methodName": "performResumeActivity"
              }
            ],
            "message": "Activity {com.microsoft.appcenter.sasquatch.project/com.microsoft.appcenter.sasquatch.activities.CrashSubActivity2} did not call through to super.onResume()",
            "type": "android.app.CustomNotCalledException"
          }
        ],
        "message": "Unable to resume activity {com.microsoft.appcenter.sasquatch.project/com.microsoft.appcenter.sasquatch.activities.CrashSubActivity2}: android.app.SuperNotCalledException: Activity {com.microsoft.appcenter.sasquatch.project/com.microsoft.appcenter.sasquatch.activities.CrashSubActivity2} did not call through to super.onResume()",
        "type": "java.lang.RuntimeException"
      },
      "threads": [
        {
          "frames": [
            {
              "className": "dalvik.system.NativeStart",
              "fileName": "NativeStart.java",
              "lineNumber": -2,
              "methodName": "run"
            }
          ],
          "id": 369,
          "name": "Binder_3"
        },
        {
          "frames": [
            {
              "className": "dalvik.system.NativeStart",
              "fileName": "NativeStart.java",
              "lineNumber": -2,
              "methodName": "run"
            }
          ],
          "id": 345,
          "name": "Compiler"
        }
      ]

    }
  ]
}'

Kesme Çubuğu kilitlenme günlüğünü ve Minidump'u karşıya yükleme

Android ve Windows için özel bir Breakpad kilitlenmesi yükleyebilirsiniz. Örnek:

curl -X POST \
  'https://in.appcenter.ms/logs?Api-Version=1.0.0' \
  -H 'Content-Type: application/json' \
  -H 'app-secret: <app secret>' \
  -H 'install-id: 00000000-0000-0000-0000-000000000001' \
  -d '{
  "logs":
  [
    {
      "type": "managedError",
      "id": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
      "userId": "TestID",
      "processId": 9448,
      "processName": "Contoso.UWP.Puppet.exe",
      "fatal": true,
      "timestamp": "2019-10-08T06:22:23.530Z",
      "architecture": "X64",
      "timestamp": "2019-10-08T06:22:23.516Z",
      "sid": "d4608adf-83b9-4f69-90ad-8bb0234080a7",
      "device": {
        "sdkName": "appcenter.custom",
        "sdkVersion": "2.4.1-SNAPSHOT",
        "model": "Parallels Virtual Platform",
        "oemName": "Parallels Software International Inc.",
        "osName": "WINDOWS",
        "osVersion": "10.0.18363",
        "osBuild": "10.0.18363.418",
        "locale": "en-US",
        "timeZoneOffset": -300,
        "screenSize": "4608x2470",
        "appVersion": "1.0",
        "appBuild": "1.0",
        "appNamespace": "10805zumoTestUser.AppCenter-Contoso.UWP.Puppet",
        "carrierCountry": "us",
        "wrapperSdkName": "custom.ndk"
      },
      "exception": {
        "type": "minidump",
        "wrapperSdkName": "custom.ndk"
      }
    },
    {
      "contentType": "application/octet-stream",
      "errorId": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
      "fileName": "minidump.dmp",
      "id": "7b975468-5656-40a5-8242-c1907b26fc31",
      "sid": "03693776-cdd4-46b8-bbda-12af457f1732",
      "timestamp": "2019-10-08T06:22:23.516Z",
      "type": "errorAttachment",
       "device": {
        "sdkName": "appcenter.custom",
        "sdkVersion": "2.4.1-SNAPSHOT",
        "model": "Parallels Virtual Platform",
        "oemName": "Parallels Software International Inc.",
        "osName": "WINDOWS",
        "osVersion": "10.0.18363",
        "osBuild": "10.0.18363.418",
        "locale": "en-US",
        "timeZoneOffset": -300,
        "screenSize": "4608x2470",
        "appVersion": "1.0",
        "appBuild": "1.0",
        "appNamespace": "10805zumoTestUser.AppCenter-Contoso.UWP.Puppet",
        "carrierCountry": "us",
        "wrapperSdkName": "custom.ndk"
      },
      "data": "<base64 encoded minidump>"
    }
  ]
}'

Uyarılar

Kesme Çubuğu kilitlenmesini wrapperSdkName karşıya yüklemek için alanın "custom.ndk" olarak ayarlanması ve minidump dosyasını kilitlenme raporuna ek olarak eklemeniz gerekir. Bu sayfanın ekler bölümünde ek göndermeyi öğrenin.

Kilitlenmenizi sembolik hale getirmek için sembollerinizi API belgelerimize göre CLI veya API aracılığıyla karşıya yüklemeniz gerekir. Android ile Kesme Çubuğu kullanıyorsanız, Android NDK belgelerimizde belirtilen her iki seçenek de desteklenir; Windows ile Kesme Çubuğu kullanıyorsanız, yalnızca 2. seçenek: "Kesme Çubuğu simgelerini karşıya yükleme" desteklenir.

Not

Simgelerinizi macOS'tan karşıya yüklüyorsanız, simgelerinizi herhangi bir gereksiz klasörden temizlemeniz gerekir; örneğin, __MACOS oluşturulur ve bunu silmek için kullanabilirsiniz zip -d <symbols.zip> __MACOSX/\*.

Hata raporunu karşıya yükleme

İşlenen hatalar bugün yalnızca Android, Xamarin, Unity, UWP, WPF ve WinForms uygulamalarında desteklenir. Bir hata raporunu karşıya yüklemek için günlük türünün "handledError" olarak ayarlandığından emin olun.

curl -X POST \
  'https://in.appcenter.ms/logs?Api-Version=1.0.0' \
  -H 'Content-Type: application/json' \
  -H 'app-secret: <app secret>' \
  -H 'install-id: 00000000-0000-0000-0000-000000000001' \
  -d '{
  "logs":
  [
    {
      "type": "handledError",
      "timestamp": "2019-10-08T06:22:23.516Z",
      "appLaunchTimestamp": "2019-09-29T22:22:23.516Z",
      "id": "118dee14-9193-4ac3-9ef0-f6c11b43f2c4",
      "device": {
        "appVersion": "11.0",
        "appBuild": "1",
        "sdkName": "custom.android",
        "sdkVersion": "1.0.0",
        "osName": "android",
        "osVersion": "9.3",
        "model": "Pixel",
        "locale": "en-US"
      },
      "userId": "TestID",
      "exception": {
        "type": "System.IO.IOException",
        "message": "Server did not respond",
        "stackTrace": "  at Contoso.Forms.Puppet.FakeService+<>c.<DoStuffInBackground>b__0_0 () [0x00000] in <7ad93f134a5d4c00a8db8be9aa9c0f76>:0 \n  at System.Threading.Tasks.Task`1[TResult].InnerInvoke () [0x0000f] in <b38d4262627948c1b945a72f56ce6466>:0 \n  at System.Threading.Tasks.Task.Execute () [0x00010] in <b38d4262627948c1b945a72f56ce6466>:0 \n--- End of stack trace from previous location where exception was thrown ---\n  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <b38d4262627948c1b945a72f56ce6466>:0 \n  at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0003e] in <b38d4262627948c1b945a72f56ce6466>:0 \n  at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <b38d4262627948c1b945a72f56ce6466>:0",
        "innerExceptions": [
          {
            "type": "System.IO.IOException",
            "message": "Network down",
            "stackTrace": "  at Contoso.Forms.Demo.CrashesContentPage.SendHttp () [0x00002] in <4fd9174f6e18457b9721bfba2cd78098>:0 ",
            "wrapperSdkName": "appcenter.xamarin"
          },
          {
            "type": "System.ArgumentException",
            "message": "Invalid parameter",
            "innerExceptions": [
              {
                "type": "System.ArgumentOutOfRangeException",
                "message": "It is over 9000!",
                "stackTrace": "  at Contoso.Forms.Demo.CrashesContentPage.ValidateLength () [0x00002] in <4fd9174f6e18457b9721bfba2cd78098>:0 ",
              }
            ],
          }
        ],
      }
    }
  ]
}'

Eki karşıya yükleme

Tüm ekler bir kilitlenme raporuyla ilişkilendirilmelidir. Bir çağrıda veya iki ayrı çağrıda kilitlenme raporu içeren bir eki karşıya yükleyebilirsiniz.

Eke özgü özellikler:

  • contentType: içerik türüne sahip gerekli dize; örneğin, metin için "metin/düz". Desteklenen türe ait örnekleri burada bulabilirsiniz
  • data: temel 64 olarak kodlanmış verilerle gerekli dize
  • errorId: ekin ilişkili hata raporunun benzersiz tanımlayıcısını içeren gerekli dize
  • fileName: "minidump.dmp" olarak ayarlanan NDK kilitlenmeleri için gerekli dize

Not

Ekler için boyut sınırı şu anda 7 MB'tır. Daha büyük bir ek göndermeye çalışmak bir hatayı tetikler.

Aşağıda bir kilitlenme raporunu ve bir eki tek bir çağrıda karşıya yükleme örneği verilmiştir.

curl -X POST \
  'https://in.appcenter.ms/logs?Api-Version=1.0.0' \
  -H 'Content-Type: application/json' \
  -H 'app-secret: <app secret>' \
  -H 'install-id: 00000000-0000-0000-0000-000000000001' \
  -d '{
  "logs": [
    {
      "type": "managedError",
      "timestamp": "2019-10-01T02:22:23.516Z",
      "appLaunchTimestamp": "2019-09-29T22:22:23.516Z",
      "id": "bca65f46-46ee-451b-83bb-2e358c3f45bf",
      "fatal": true,
      "processName": "com.microsoft.appcenter.sasquatch.project",
      "device": {
        "appVersion": "13.0",
        "appBuild": "1",
        "sdkName": "appcenter.android",
        "sdkVersion": "1.0.0",
        "osName": "android",
        "osVersion": "9.3",
        "model": "Pixel",
        "locale": "en-US"
      },
      "userId": "118dee14",
      "fatal": true,
      "exception": {
          "type": "CustomerIssue",
          "frames": []
      }
    },
    {
      "type": "errorAttachment",
      "contentType": "text/plain",
      "timestamp": "2019-10-01T02:22:23.516Z",
      "data": "aGVsbG8=",
      "errorId": "bca65f46-46ee-451b-83bb-2e358c3f45bf",
      "id": "7caaea8e-dab1-4588-993c-95de2d9a4fd1",
      "device": {
        "appVersion": "13.0",
        "appBuild": "1",
        "sdkName": "appcenter.android",
        "sdkVersion": "1.0.0",
        "osName": "android",
        "osVersion": "9.3",
        "model": "Pixel",
        "locale": "en-US"
      }
    }
  ]
}'