AppBlade / AppBladeSDK

The SDK for AppBlade; iOS and Android
https://appblade.com
MIT License
23 stars 14 forks source link

"Error creating Access Token" message in log #103

Closed y-polek closed 7 years ago

y-polek commented 7 years ago

I've integrated AppBlade SDK in my project and registered exception handler. Problem is that crashes are not reported and I can't see them in application console.

When application starts I see "Error creating Access Token" error thrown by AppBlade.register(this, token, secret, uuid, issuance) (see ### Log 1).

Also there is some FileNotFoundException related to custom_params after test exception thrown in application (see ### Log 2)

Log 1:

Using a endpoint URL, https://appblade.com Error creating Access Token java.io.FileNotFoundException: /data/user/0/x.x.x/files/8e220da93680de70f619543970179d01: open failed: ENOENT (No such file or directory) at libcore.io.IoBridge.open(IoBridge.java:452) at java.io.FileInputStream.(FileInputStream.java:76) at android.app.ContextImpl.openFileInput(ContextImpl.java:386) at android.content.ContextWrapper.openFileInput(ContextWrapper.java:178) at com.appblade.framework.authenticate.RemoteAuthHelper.getAccessToken(RemoteAuthHelper.java:102) at com.appblade.framework.AppBlade.register(AppBlade.java:172) at com.appblade.framework.AppBlade.register(AppBlade.java:106) at x.x.x.App.registerAppBlade(App.java:58) at x.x.x.App.onCreate(App.java:25) at com.android.tools.fd.runtime.BootstrapApplication.onCreate(BootstrapApplication.java:370) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1021) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4787) at android.app.ActivityThread.access$1600(ActivityThread.java:154) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1441) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:152) at android.app.ActivityThread.main(ActivityThread.java:5497) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory) at libcore.io.Posix.open(Native Method) at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186) at libcore.io.IoBridge.open(IoBridge.java:438) at java.io.FileInputStream.(FileInputStream.java:76)  at android.app.ContextImpl.openFileInput(ContextImpl.java:386)  at android.content.ContextWrapper.openFileInput(ContextWrapper.java:178)  at com.appblade.framework.authenticate.RemoteAuthHelper.getAccessToken(RemoteAuthHelper.java:102)  at com.appblade.framework.AppBlade.register(AppBlade.java:172)  at com.appblade.framework.AppBlade.register(AppBlade.java:106)  at x.x.x.App.registerAppBlade(App.java:58)  at x.x.x.App.onCreate(App.java:25)  at com.android.tools.fd.runtime.BootstrapApplication.onCreate(BootstrapApplication.java:370)  at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1021)  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4787)  at android.app.ActivityThread.access$1600(ActivityThread.java:154)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1441)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:152)  at android.app.ActivityThread.main(ActivityThread.java:5497)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  getAccessToken File:8e220da93680de70f619543970179d01, token: AppBlade.setDeviceId:

Log 2:

Test AppBlade crash reporting

--------- beginning of crash FATAL EXCEPTION: main Process: x.x.x, PID: 32629 java.lang.RuntimeException: Test AppBlade crash reporting at x.x.x.cart.CartActivity$6.onResponse(CartActivity.java:317) at x.x.x.cart.CartActivity$6.onResponse(CartActivity.java:305) at x.x.x.transport.volley.StringRequestBuilder$WrapperResponseListener.onResponse(StringRequestBuilder.java:120) at x.x.x.transport.volley.StringRequestBuilder$WrapperResponseListener.onResponse(StringRequestBuilder.java:106) at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:60) at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30) at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:152) at android.app.ActivityThread.main(ActivityThread.java:5497) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) App Event: crash Force finishing activity x.x.x/.cart.CartActivity writing to /data/user/0/x.x.x/files/app_blade_exceptions/ex-1480522717659-4179.txt wrote to ex-1480522717659-4179.txt RegisterTcmMonitor from: org.apache.http.impl.conn.TcmIdleTimerMonitor sending exception in file ex-1480522442445-6063.txt java.io.FileNotFoundException: /data/user/0/x.x.x/files/app_blade_params/custom_params.json: open failed: ENOENT (No such file or directory) at libcore.io.IoBridge.open(IoBridge.java:452) at java.io.FileInputStream.(FileInputStream.java:76) at java.io.FileInputStream.(FileInputStream.java:103) at java.io.FileReader.(FileReader.java:66) at com.appblade.framework.customparams.CustomParamDataHelper.getCustomParamsAsJSON(CustomParamDataHelper.java:65) at com.appblade.framework.customparams.CustomParamDataHelper.getCustomParamsAsJSON(CustomParamDataHelper.java:112) at com.appblade.framework.crashreporting.CrashReportHelper.sendExceptionData(CrashReportHelper.java:115) at com.appblade.framework.crashreporting.CrashReportHelper.postExceptionsToServer(CrashReportHelper.java:65) at com.appblade.framework.crashreporting.CrashReportHelper.postCrashes(CrashReportHelper.java:51) at com.appblade.framework.crashreporting.PostCrashReportTask.doInBackground(PostCrashReportTask.java:32) at com.appblade.framework.crashreporting.PostCrashReportTask.doInBackground(PostCrashReportTask.java:14) at android.os.AsyncTask$2.call(AsyncTask.java:295) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) at java.lang.Thread.run(Thread.java:818) Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory) at libcore.io.Posix.open(Native Method) at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186) at libcore.io.IoBridge.open(IoBridge.java:438) ... 16 more Text in custom_params.json: null Custom Parameters have not yet been inititalized. Dismiss app error dialog : x.x.x An error occurred while executing doInBackground()

mtjhax commented 7 years ago

Checking into this Yury... could be an auth configuration or app permissions error.

y-polek commented 7 years ago

I have following permissions declared in AndroidManifest.xml:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />

Also I ensured that WRITE_EXTERNAL_STORAGE is granted before calling AppBlade.register()

y-polek commented 7 years ago

I found out that above error messages appear in log because application is not authorized (AppBlade.authorize() never called) and are not related to problem with crash reporting.

Reporting of caught exception with AppBlade.notify(ex) works fine, but uncaught exceptions are never sent to server. I can see that exceptions are written to disk with CrashReportHelper.writeExceptionToDisk(ex) but CrashReportHelper.sendExceptionData(file) never finishes successfully (probably because application terminates before network request finishes).

In CrashReportHelper.postExceptionsToServer() I observe that number of files with saved exceptions constantly increases and never goes down. Saved exceptions have chance to be reported only if AppBlade.notify(ex) is called without following application crash.

I thought that logged exception should be sent to server on next application launch (from AppBlade.register() or AppBlade.registerExceptionHandler()), but looks like AppBlade sends previous exceptions only when new exception is thrown.

y-polek commented 7 years ago

Seems like above problem occurs only on my device (OnePlus 2, android 6.0.1). On other devices crash reporting works fine.

Usually after crash system shows 'Crash dialog' and while it is shown background thread has chance to send crash report. On my device, for some reason, there is no 'Crash dialog' and application shuts down immediately after exception, which causes issue with sending crash report to server.

OnePlus 2 crash dialog issue: https://forums.oneplus.net/threads/android-development-oneplus-2-does-not-give-proper-crash.362323/