Coder Social home page Coder Social logo

appboy-android-sdk's Introduction

This repository has been permanently moved to https://github.com/braze-inc/braze-android-sdk.


Braze Logo

Android SDK

Successful marketing automation is essential to the future of your mobile app. Braze helps you engage your users beyond the download. Visit the following links for details and we'll have you up and running in no time!

Version Information

  • The Braze Android SDK supports Android 4.1+ / API 16+ (Jelly Bean and up).
  • Last Target SDK Version: 33
  • Kotlin version: org.jetbrains.kotlin:kotlin-stdlib:1.6.0
  • Last Compiled Firebase Cloud Messaging Version: 23.0.0
  • Braze uses Font Awesome 4.3.0 for in-app message icons. Check out the cheat sheet to browse available icons.

Components

  • android-sdk-base - the Braze SDK base analytics library.
  • android-sdk-ui - the Braze SDK user interface library for in-app messages, push, and the news feed.
  • android-sdk-location - the Braze SDK location library for location and geofences.
  • droidboy - a sample app demonstrating how to use Braze in-depth.
  • android-sdk-unity - a library that enables Braze SDK integrations on Unity.
  • samples - a folder containing several sample apps for various integration options.

Remote repository for gradle

The version should match the git version tag, or the most recent version noted in the changelog. An example dependency declaration is:

allprojects {
  repositories {
    maven { url "https://appboy.github.io/appboy-android-sdk/sdk" }
    ...
  }
}
dependencies {
  implementation 'com.appboy:android-sdk-ui:24.3.+'
  implementation 'com.appboy:android-sdk-location:24.3.+'
  ...
}

Installing android-sdk-ui to Your Local Maven Repository

To install the UI library as an AAR file to your local maven repository, run the install task with ./gradlew install. You can reference it with groupId com.appboy and artifactId android-sdk-ui. The version should match the git version tag, or the most recent version noted in the changelog. An example dependency declaration is:

repositories {
  mavenLocal()
  ...
}
dependencies {
  implementation 'com.appboy:android-sdk-ui:24.3.+'
}

Questions?

If you have questions, please contact [email protected].

appboy-android-sdk's People

Contributors

billmag avatar briancaw avatar bryanlogan avatar bucimis avatar catacom avatar christorbraze avatar davidbielik avatar gkaffka avatar marchy avatar martinmcroyappboy avatar matrixy avatar mnonnenmacher avatar radixdev avatar tobiblas avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

appboy-android-sdk's Issues

How to fetch campaign_id from IAM?

Hi guys,
I have a CustomIInAppMessageManagerListener and trying to log all IAM related events to our servers.

Retrieving the campaign_id from IInAppMessage.forJsonPut().getString(AppboyGcmReceiver.CAMPAIGN_ID_KEY);
returns null.

I am not sure if i am doing something wrong here, but seems to be true since there is no KEY with AppboyGcmReceiver.CAMPAIGN_ID_KEY in the IInAppMessage Json below.

{"message":"Nulla consequat massa quis enim. Donec pede justo,\nfringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut,\nimperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium.\nInteger tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate\neleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac,","type":"MODAL","text_color":4280624421,"text_align_message":"CENTER","click_action":"NEWS_FEED","message_close":"SWIPE","header":"This is how to share","header_text_color":4280624421,"text_align_header":"CENTER","image_url":"https:\/\/appboy-images.com\/appboy\/communication\/marketing\/slide_up\/slide_up_message_parameters\/images\/584fdd8656ec317ebe6cc4d9\/6727b80948ccfe3ba042da1a670c1fc9f2ca1703\/original.?1481629066","image_style":"TOP","close_btn_color":4291085508,"bg_color":4294440951,"frame_color":3207803699,"btns":[{"text":"OK","bg_color":4279990479,"text_color":4294967295,"click_action":"NONE","id":0}],"trigger_id":"NTg0ZmRkODY1NmVjMzE3ZWJlNmNjNGNmXzU4NGZkZDg2NTZlYzMxN2ViZTZjYzRkNV9jbXA="}

I suspect the trigger_id to be the campaign_id, am I that correct?
With that said, what is the different between Push campaign_id & IAM trigger_id?

Please stop spamming the logcat

Example:

04-09 17:41:36.859: I/http://Appboy.bo.app.o(5115): http://bo.app.bf fired: http://bo.app.bf@42b15d00
04-09 17:41:36.859: I/http://Appboy.bo.app.o(5115): bo.app.jr fired: bo.app.jr@42b15568
04-09 17:41:36.859: I/http://Appboy.bo.app.o(5115): http://bo.app.ee fired: http://bo.app.ee@42b152f8
04-09 17:41:46.257: I/http://Appboy.bo.app.o(5115): http://bo.app.de fired: http://bo.app.de@42b14b58
04-09 17:41:56.257: I/http://Appboy.bo.app.o(5115): http://bo.app.de fired: http://bo.app.de@42b14668
04-09 17:42:06.257: I/http://Appboy.bo.app.o(5115): http://bo.app.de fired: http://bo.app.de@42b143f0
04-09 17:42:16.257: I/http://Appboy.bo.app.o(5115): http://bo.app.de fired: http://bo.app.de@42b14150
04-09 17:42:26.257: I/http://Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42b13ee8
04-09 17:42:36.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42b13c80
04-09 17:42:46.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42b137a0
04-09 17:42:56.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42b13268
04-09 17:43:06.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42b12cd8
04-09 17:43:16.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42b12a48
04-09 17:43:26.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42b127c8
04-09 17:43:36.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42b12540
04-09 17:43:46.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42b12038
04-09 17:43:56.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42b11f30
04-09 17:44:06.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42b11c70
04-09 17:44:16.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42b00e20
04-09 17:44:26.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42b003b8
04-09 17:44:36.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42b00138
04-09 17:44:46.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42aff4f0
04-09 17:44:56.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42afe9c8
04-09 17:45:06.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42aea8a0
04-09 17:45:16.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42aea618
04-09 17:45:26.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42ae9c10
04-09 17:45:36.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42ae8b98
04-09 17:45:46.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42ae88a8
04-09 17:45:56.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42ae84a8
04-09 17:46:06.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42ae5860
04-09 17:46:16.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42ae5048
04-09 17:46:26.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42ae3d40
04-09 17:46:36.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42ae3560
04-09 17:46:46.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42ae2850
04-09 17:46:56.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42ae1fc8
04-09 17:47:06.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42ae1b50
04-09 17:47:16.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42ae07b0
04-09 17:47:26.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42adeba0
04-09 17:47:36.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42ade2e8
04-09 17:47:46.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42ade078
04-09 17:47:56.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42adde10
04-09 17:48:06.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42ad9c98
04-09 17:48:16.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42ad9628
04-09 17:48:26.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42ad8480
04-09 17:48:36.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42ad8060
04-09 17:48:46.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42ad17a8
04-09 17:48:56.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42ad0a90
04-09 17:49:06.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42ad0648
04-09 17:49:16.288: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42acf5d8
04-09 17:49:26.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42accf70
04-09 17:49:36.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42acc550
04-09 17:49:46.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42acc2e0
04-09 17:49:56.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42acbfa0
04-09 17:50:06.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42acbd30
04-09 17:50:16.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42acb1b8
04-09 17:50:26.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42aca690
04-09 17:50:36.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42aca1a0
04-09 17:50:46.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42ac9190
04-09 17:50:56.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42ab6c40
04-09 17:51:06.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42ab69d8
04-09 17:51:16.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42ab6770
04-09 17:51:26.265: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42ab6508
04-09 17:51:36.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42ab6288
04-09 17:51:46.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42ab6000
04-09 17:51:56.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42ab5d90
04-09 17:52:06.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42ab5b20
04-09 17:52:16.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42ab5868
04-09 17:52:26.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42ab55f8
04-09 17:52:36.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42ab5368
04-09 17:52:46.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42ab50e8
04-09 17:52:56.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42aad158
04-09 17:53:06.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42aace20
04-09 17:53:16.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42aacca8
04-09 17:53:26.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42aacba8
04-09 17:53:36.257: I/Appboy.bo.app.o(5115): bo.app.de fired: bo.app.de@42aac930

failure to run gradew install

when trying to build our project via gradle and when trying to run gradlew install the script terminates and gives me a faliure message:

FAILURE: Build failed with an exception.

* What went wrong:
Gradle build daemon disappeared unexpectedly (it may have been stopped, killed or may have crashed)

the full log for gradlew install -debug is:

13:43:10.280 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire shared lock on daemon addresses registry.
13:43:10.284 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired.
13:43:10.313 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry.
13:43:10.314 [INFO] [org.gradle.launcher.daemon.client.DefaultDaemonConnector] Starting Gradle daemon
13:43:10.336 [DEBUG] [org.gradle.launcher.daemon.client.DefaultDaemonStarter] Using daemon opts: [-XX:MaxPermSize=256m, -XX:+HeapDumpOnOutOfMemoryError, -Xmx1024m, -Dfile.encoding=US-ASCII]
13:43:10.339 [INFO] [org.gradle.launcher.daemon.client.DefaultDaemonStarter] Starting daemon process: workingDir = /Users/thepoosh/.gradle/daemon/1.11, daemonArgs: [/Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home/bin/java, -XX:MaxPermSize=256m, -XX:+HeapDumpOnOutOfMemoryError, -Xmx1024m, -Dfile.encoding=US-ASCII, -cp, /Users/thepoosh/.gradle/wrapper/dists/gradle-1.11-bin/4h5v8877arc3jhuqbm3osbr7o7/gradle-1.11/lib/gradle-launcher-1.11.jar, org.gradle.launcher.daemon.bootstrap.GradleDaemon, 1.11, /Users/thepoosh/.gradle/daemon, 10800000, ecb23617-c5e2-4a5b-ac2d-aef807578d0b, -XX:MaxPermSize=256m, -XX:+HeapDumpOnOutOfMemoryError, -Xmx1024m, -Dfile.encoding=US-ASCII]
13:43:10.356 [INFO] [org.gradle.process.internal.DefaultExecHandle] Starting process 'Gradle build daemon'. Working directory: /Users/thepoosh/.gradle/daemon/1.11 Command: /Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home/bin/java -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError -Xmx1024m -Dfile.encoding=US-ASCII -cp /Users/thepoosh/.gradle/wrapper/dists/gradle-1.11-bin/4h5v8877arc3jhuqbm3osbr7o7/gradle-1.11/lib/gradle-launcher-1.11.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 1.11 /Users/thepoosh/.gradle/daemon 10800000 ecb23617-c5e2-4a5b-ac2d-aef807578d0b -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError -Xmx1024m -Dfile.encoding=US-ASCII
13:43:10.357 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Environment for process 'Gradle build daemon': {TERM=xterm-256color, JAVA_MAIN_CLASS_782=org.gradle.wrapper.GradleWrapperMain, TERM_PROGRAM_VERSION=343, SHLVL=1, GREP_OPTIONS=--color=auto --exclude-dir=.cvs --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn, TERM_PROGRAM=Apple_Terminal, __CF_USER_TEXT_ENCODING=0x1F5:0x0:0x0, PYTHONPATH=/usr/local/lib/python2.7/site-packages/, XPC_FLAGS=0x0, PWD=/Users/thepoosh/Downloads/appboy-android-sdk-master, JAVA_ARCH=x86_64, APP_NAME_782=Gradle, TERM_SESSION_ID=F298C99C-15E2-4C17-B76D-ED030538F558, APP_ICON_782=/Users/thepoosh/Downloads/appboy-android-sdk-master/media/gradle.icns, LOGNAME=thepoosh, GREP_COLOR=1;32, SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.QlPw25OitD/Listeners, OLDPWD=/Users/thepoosh/Downloads/appboy-android-sdk-master, SHELL=/bin/zsh, LC_CTYPE=, TMPDIR=/var/folders/fc/4d9f33ld7838n5ts53clblh40000gn/T/, SECURITYSESSIONID=186a5, PATH=/usr/local/heroku/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/git/bin:/usr/local/git/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/Applications/Android/sdk/tools/proguard/bin:/Users/thepoosh/Downloads/gradle-1.12/bin???/???:/Users/thepoosh/binmkd, DISPLAY=/private/tmp/com.apple.launchd.8K5vcuSApn/org.macosforge.xquartz:0, USER=thepoosh, LESS=-R, PAGER=less, com.apple.java.jvmTask=CommandLine, HOME=/Users/thepoosh, XPC_SERVICE_NAME=0, Apple_PubSub_Socket_Render=/private/tmp/com.apple.launchd.i7vZbUARUD/Render, LSCOLORS=Gxfxcxdxbxegedabagacad, ANDROID_HOME=/Applications/Android/sdk}
13:43:10.359 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: STARTING
13:43:10.361 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Waiting until process started: Gradle build daemon.
13:43:10.367 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: STARTED
13:43:10.367 [DEBUG] [org.gradle.process.internal.ExecHandleRunner] waiting until streams are handled...
13:43:10.367 [INFO] [org.gradle.process.internal.DefaultExecHandle] Successfully started process 'Gradle build daemon'
13:43:10.368 [DEBUG] [org.gradle.launcher.daemon.bootstrap.DaemonOutputConsumer] Starting consuming the daemon process output.
13:43:10.368 [DEBUG] [org.gradle.launcher.daemon.client.DefaultDaemonStarter] Gradle daemon process is starting. Waiting for the daemon to detach...
13:43:10.625 [DEBUG] [org.gradle.launcher.daemon.bootstrap.DaemonOutputConsumer] daemon out: 13:43:10.621 [main] DEBUG o.g.l.daemon.bootstrap.DaemonMain - Assuming the daemon was started with following jvm opts: [-XX:MaxPermSize=256m, -XX:+HeapDumpOnOutOfMemoryError, -Xmx1024m, -Dfile.encoding=US-ASCII]
13:43:10.884 [DEBUG] [org.gradle.launcher.daemon.bootstrap.DaemonOutputConsumer] daemon out: 13:43:10.883 [main] DEBUG o.g.l.daemon.server.DaemonServices - Creating daemon context with opts: [-XX:MaxPermSize=256m, -XX:+HeapDumpOnOutOfMemoryError, -Xmx1024m, -Dfile.encoding=US-ASCII]
13:43:10.929 [DEBUG] [org.gradle.launcher.daemon.bootstrap.DaemonOutputConsumer] daemon out: 13:43:10.928 [INFO] [org.gradle.launcher.daemon.server.Daemon] start() called on daemon - DefaultDaemonContext[uid=ecb23617-c5e2-4a5b-ac2d-aef807578d0b,javaHome=/Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home,daemonRegistryDir=/Users/thepoosh/.gradle/daemon,pid=789,idleTimeout=10800000,daemonOpts=-XX:MaxPermSize=256m,-XX:+HeapDumpOnOutOfMemoryError,-Xmx1024m,-Dfile.encoding=US-ASCII]
13:43:10.933 [DEBUG] [org.gradle.launcher.daemon.bootstrap.DaemonOutputConsumer] daemon out: 13:43:10.932 [DEBUG] [org.gradle.launcher.daemon.server.DaemonStateCoordinator] updating lastActivityAt to 1417693390932
13:43:10.945 [DEBUG] [org.gradle.launcher.daemon.bootstrap.DaemonOutputConsumer] daemon out: 13:43:10.943 [DEBUG] [org.gradle.messaging.remote.internal.inet.InetAddressFactory] Adding IP addresses for network interface awdl0
13:43:10.946 [DEBUG] [org.gradle.launcher.daemon.bootstrap.DaemonOutputConsumer] daemon out: 13:43:10.944 [DEBUG] [org.gradle.messaging.remote.internal.inet.InetAddressFactory] Is this a loopback interface? false
13:43:10.947 [DEBUG] [org.gradle.launcher.daemon.bootstrap.DaemonOutputConsumer] daemon out: 13:43:10.945 [DEBUG] [org.gradle.messaging.remote.internal.inet.InetAddressFactory] Adding non-loopback address /fe80:0:0:0:c810:b5ff:fe33:4d40%9
13:43:10.948 [DEBUG] [org.gradle.launcher.daemon.bootstrap.DaemonOutputConsumer] daemon out: 13:43:10.945 [DEBUG] [org.gradle.messaging.remote.internal.inet.InetAddressFactory] Adding IP addresses for network interface en3
13:43:10.948 [DEBUG] [org.gradle.launcher.daemon.bootstrap.DaemonOutputConsumer] daemon out: 13:43:10.946 [DEBUG] [org.gradle.messaging.remote.internal.inet.InetAddressFactory] Is this a loopback interface? false
13:43:10.949 [DEBUG] [org.gradle.launcher.daemon.bootstrap.DaemonOutputConsumer] daemon out: 13:43:10.947 [DEBUG] [org.gradle.messaging.remote.internal.inet.InetAddressFactory] Adding non-loopback address /fe80:0:0:0:aa20:66ff:fe2b:3230%5
13:43:10.950 [DEBUG] [org.gradle.launcher.daemon.bootstrap.DaemonOutputConsumer] daemon out: 13:43:10.948 [DEBUG] [org.gradle.messaging.remote.internal.inet.InetAddressFactory] Adding non-loopback address /192.168.61.57
13:43:10.952 [DEBUG] [org.gradle.launcher.daemon.bootstrap.DaemonOutputConsumer] daemon out: 13:43:10.948 [DEBUG] [org.gradle.messaging.remote.internal.inet.InetAddressFactory] Adding IP addresses for network interface lo0
13:43:10.952 [DEBUG] [org.gradle.launcher.daemon.bootstrap.DaemonOutputConsumer] daemon out: 13:43:10.949 [DEBUG] [org.gradle.messaging.remote.internal.inet.InetAddressFactory] Is this a loopback interface? true
13:43:10.953 [DEBUG] [org.gradle.launcher.daemon.bootstrap.DaemonOutputConsumer] daemon out: 13:43:10.949 [DEBUG] [org.gradle.messaging.remote.internal.inet.InetAddressFactory] Ignoring non-loopback address on loopback interface /fe80:0:0:0:0:0:0:1%1
13:43:10.954 [DEBUG] [org.gradle.launcher.daemon.bootstrap.DaemonOutputConsumer] daemon out: 13:43:10.950 [DEBUG] [org.gradle.messaging.remote.internal.inet.InetAddressFactory] Adding loopback address /0:0:0:0:0:0:0:1
13:43:10.955 [DEBUG] [org.gradle.launcher.daemon.bootstrap.DaemonOutputConsumer] daemon out: 13:43:10.950 [DEBUG] [org.gradle.messaging.remote.internal.inet.InetAddressFactory] Adding loopback address /127.0.0.1
13:43:10.955 [DEBUG] [org.gradle.launcher.daemon.bootstrap.DaemonOutputConsumer] daemon out: 13:43:10.951 [DEBUG] [org.gradle.messaging.remote.internal.inet.TcpIncomingConnector] Listening on [4e625814-077b-4f9a-a347-f6e697a7c116 port:49904, addresses:[/0:0:0:0:0:0:0:1, /127.0.0.1]].
13:43:10.957 [DEBUG] [org.gradle.launcher.daemon.bootstrap.DaemonOutputConsumer] daemon out: 13:43:10.954 [DEBUG] [org.gradle.launcher.daemon.server.Daemon] Daemon starting at: Thu Dec 04 13:43:10 EET 2014, with address: [4e625814-077b-4f9a-a347-f6e697a7c116 port:49904, addresses:[/0:0:0:0:0:0:0:1, /127.0.0.1]]
13:43:10.958 [DEBUG] [org.gradle.launcher.daemon.bootstrap.DaemonOutputConsumer] daemon out: 13:43:10.955 [INFO] [org.gradle.launcher.daemon.server.DomainRegistryUpdater] Advertising the daemon address to the clients: [4e625814-077b-4f9a-a347-f6e697a7c116 port:49904, addresses:[/0:0:0:0:0:0:0:1, /127.0.0.1]]
13:43:10.959 [DEBUG] [org.gradle.launcher.daemon.bootstrap.DaemonOutputConsumer] daemon out: 13:43:10.955 [DEBUG] [org.gradle.launcher.daemon.server.DomainRegistryUpdater] Advertised daemon context: DefaultDaemonContext[uid=ecb23617-c5e2-4a5b-ac2d-aef807578d0b,javaHome=/Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home,daemonRegistryDir=/Users/thepoosh/.gradle/daemon,pid=789,idleTimeout=10800000,daemonOpts=-XX:MaxPermSize=256m,-XX:+HeapDumpOnOutOfMemoryError,-Xmx1024m,-Dfile.encoding=US-ASCII]
13:43:10.961 [DEBUG] [org.gradle.launcher.daemon.bootstrap.DaemonOutputConsumer] daemon out: 13:43:10.956 [DEBUG] [org.gradle.launcher.daemon.registry.PersistentDaemonRegistry] Storing daemon address: [4e625814-077b-4f9a-a347-f6e697a7c116 port:49904, addresses:[/0:0:0:0:0:0:0:1, /127.0.0.1]], context: DefaultDaemonContext[uid=ecb23617-c5e2-4a5b-ac2d-aef807578d0b,javaHome=/Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home,daemonRegistryDir=/Users/thepoosh/.gradle/daemon,pid=789,idleTimeout=10800000,daemonOpts=-XX:MaxPermSize=256m,-XX:+HeapDumpOnOutOfMemoryError,-Xmx1024m,-Dfile.encoding=US-ASCII]
13:43:10.967 [DEBUG] [org.gradle.launcher.daemon.bootstrap.DaemonOutputConsumer] daemon out: 13:43:10.965 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire exclusive lock on daemon addresses registry.
13:43:10.971 [DEBUG] [org.gradle.launcher.daemon.bootstrap.DaemonOutputConsumer] daemon out: 13:43:10.970 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired.
13:43:11.010 [DEBUG] [org.gradle.launcher.daemon.bootstrap.DaemonOutputConsumer] daemon out: 13:43:11.009 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry.
13:43:11.010 [DEBUG] [org.gradle.launcher.daemon.bootstrap.DaemonOutputConsumer] daemon out: 13:43:11.010 [LIFECYCLE] [org.gradle.launcher.daemon.bootstrap.DaemonMain] Daemon server started. Pid: 789.
13:43:11.011 [DEBUG] [org.gradle.launcher.daemon.bootstrap.DaemonOutputConsumer] daemon out: Daemon started. About to close the streams. Daemon details: ;:789;:/Users/thepoosh/.gradle/daemon/1.11/daemon-789.out.log
13:43:11.012 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: DETACHED
13:43:11.014 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Process 'Gradle build daemon' finished with exit value 0 (state: DETACHED)
13:43:11.014 [DEBUG] [org.gradle.launcher.daemon.client.DefaultDaemonStarter] Gradle daemon process is now detached.
13:43:11.015 [INFO] [org.gradle.launcher.daemon.client.DefaultDaemonStarter] An attempt to start the daemon took 0.675 secs.
13:43:11.016 [DEBUG] [org.gradle.launcher.daemon.client.DefaultDaemonConnector] Started Gradle Daemon: {uid='ecb23617-c5e2-4a5b-ac2d-aef807578d0b', diagnostics={pid=789, daemonLog=/Users/thepoosh/.gradle/daemon/1.11/daemon-789.out.log}}
13:43:11.017 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire shared lock on daemon addresses registry.
13:43:11.017 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired.
13:43:11.026 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry.
13:43:11.027 [DEBUG] [org.gradle.messaging.remote.internal.inet.TcpOutgoingConnector] Attempting to connect to [4e625814-077b-4f9a-a347-f6e697a7c116 port:49904, addresses:[/0:0:0:0:0:0:0:1, /127.0.0.1]].
13:43:11.028 [DEBUG] [org.gradle.messaging.remote.internal.inet.TcpOutgoingConnector] Trying to connect to address /0:0:0:0:0:0:0:1.
13:43:11.032 [DEBUG] [org.gradle.messaging.remote.internal.inet.TcpOutgoingConnector] Connected to address /0:0:0:0:0:0:0:1:49904.
13:43:11.040 [INFO] [org.gradle.launcher.daemon.client.DaemonClient] Connected to the daemon. Dispatching Build{id=d08690e7-da8a-46b7-90f1-090596bed5cd.1, currentDir=/Users/thepoosh/Downloads/appboy-android-sdk-master} request.
13:43:11.040 [DEBUG] [org.gradle.launcher.daemon.client.DaemonClientConnection] thread 1: dispatching class org.gradle.launcher.daemon.protocol.Build
13:43:11.530 [ERROR] [org.gradle.launcher.daemon.client.DaemonClient] The message received from the daemon indicates that the daemon has disappeared.
Build request sent: Build{id=d08690e7-da8a-46b7-90f1-090596bed5cd.1, currentDir=/Users/thepoosh/Downloads/appboy-android-sdk-master}
Attempting to read last messages from the daemon log...
13:43:11.537 [ERROR] [org.gradle.launcher.daemon.client.DaemonClient] Daemon pid: 789
  log file: /Users/thepoosh/.gradle/daemon/1.11/daemon-789.out.log
----- Last  20 lines from daemon log file - daemon-789.out.log -----
13:43:11.011 [DEBUG] [org.gradle.launcher.daemon.bootstrap.DaemonStartupCommunication] Completed writing the daemon greeting. Closing streams...
13:43:11.011 [DEBUG] [org.gradle.launcher.daemon.server.Daemon] requestStopOnIdleTimeout(10800000 MILLISECONDS) called on daemon
13:43:11.012 [DEBUG] [org.gradle.launcher.daemon.server.DaemonStateCoordinator] waiting for daemon to stop or be idle for 10800000ms
13:43:11.013 [DEBUG] [org.gradle.launcher.daemon.server.DaemonStateCoordinator] Daemon is idle, sleeping until state change or idle timeout at Thu Dec 04 16:43:10 EET 2014
13:43:11.033 [DEBUG] [org.gradle.messaging.remote.internal.inet.TcpIncomingConnector] Accepted connection from /0:0:0:0:0:0:0:1:49905 to /0:0:0:0:0:0:0:1:49904.
13:43:11.074 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 14: received class org.gradle.launcher.daemon.protocol.Build
13:43:11.074 [DEBUG] [org.gradle.launcher.daemon.server.DefaultDaemonConnection] Received non-IO message from client: Build{id=d08690e7-da8a-46b7-90f1-090596bed5cd.1, currentDir=/Users/thepoosh/Downloads/appboy-android-sdk-master}
13:43:11.075 [INFO] [org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler] Received command: Build{id=d08690e7-da8a-46b7-90f1-090596bed5cd.1, currentDir=/Users/thepoosh/Downloads/appboy-android-sdk-master}.
13:43:11.076 [DEBUG] [org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler] Starting executing command: Build{id=d08690e7-da8a-46b7-90f1-090596bed5cd.1, currentDir=/Users/thepoosh/Downloads/appboy-android-sdk-master} with connection: socket connection at /0:0:0:0:0:0:0:1:49904 with /0:0:0:0:0:0:0:1:49905.
13:43:11.083 [DEBUG] [org.gradle.launcher.daemon.server.DaemonStateCoordinator] onStartCommand(DaemonCommandExecution[command = Build{id=d08690e7-da8a-46b7-90f1-090596bed5cd.1, currentDir=/Users/thepoosh/Downloads/appboy-android-sdk-master}, connection = org.gradle.launcher.daemon.server.DefaultDaemonConnection@12b13004]) called after 0.0 minutes of idle
13:43:11.084 [INFO] [org.gradle.launcher.daemon.server.DomainRegistryUpdater] Marking the daemon as busy, address: [4e625814-077b-4f9a-a347-f6e697a7c116 port:49904, addresses:[/0:0:0:0:0:0:0:1, /127.0.0.1]]
13:43:11.084 [DEBUG] [org.gradle.launcher.daemon.registry.PersistentDaemonRegistry] Marking busy by address: [4e625814-077b-4f9a-a347-f6e697a7c116 port:49904, addresses:[/0:0:0:0:0:0:0:1, /127.0.0.1]]
13:43:11.085 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire exclusive lock on daemon addresses registry.
13:43:11.086 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired.
13:43:11.099 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry.
13:43:11.100 [DEBUG] [org.gradle.launcher.daemon.server.DaemonStateCoordinator] updating lastActivityAt to 1417693391100
13:43:11.100 [DEBUG] [org.gradle.launcher.daemon.server.DaemonStateCoordinator] Daemon is busy, sleeping until state changes.
13:43:11.100 [INFO] [org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy] Daemon is about to start building: Build{id=d08690e7-da8a-46b7-90f1-090596bed5cd.1, currentDir=/Users/thepoosh/Downloads/appboy-android-sdk-master}. Dispatching build started information...
13:43:11.102 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 13: dispatching class org.gradle.launcher.daemon.protocol.BuildStarted
13:43:11.106 [DEBUG] [org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment] Configuring env variables: {TERM=xterm-256color, JAVA_MAIN_CLASS_782=org.gradle.wrapper.GradleWrapperMain, TERM_PROGRAM_VERSION=343, SHLVL=1, GREP_OPTIONS=--color=auto --exclude-dir=.cvs --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn, TERM_PROGRAM=Apple_Terminal, __CF_USER_TEXT_ENCODING=0x1F5:0x0:0x0, PYTHONPATH=/usr/local/lib/python2.7/site-packages/, XPC_FLAGS=0x0, PWD=/Users/thepoosh/Downloads/appboy-android-sdk-master, JAVA_ARCH=x86_64, APP_NAME_782=Gradle, TERM_SESSION_ID=F298C99C-15E2-4C17-B76D-ED030538F558, LOGNAME=thepoosh, APP_ICON_782=/Users/thepoosh/Downloads/appboy-android-sdk-master/media/gradle.icns, GREP_COLOR=1;32, SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.QlPw25OitD/Listeners, OLDPWD=/Users/thepoosh/Downloads/appboy-android-sdk-master, SHELL=/bin/zsh, LC_CTYPE=, TMPDIR=/var/folders/fc/4d9f33ld7838n5ts53clblh40000gn/T/, SECURITYSESSIONID=186a5, PATH=/usr/local/heroku/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/git/bin:/usr/local/git/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/Applications/Android/sdk/tools/proguard/bin:/Users/thepoosh/Downloads/gradle-1.12/bin???/???:/Users/thepoosh/binmkd, DISPLAY=/private/tmp/com.apple.launchd.8K5vcuSApn/org.macosforge.xquartz:0, USER=thepoosh, LESS=-R, PAGER=less, com.apple.java.jvmTask=CommandLine, HOME=/Users/thepoosh, XPC_SERVICE_NAME=0, Apple_PubSub_Socket_Render=/private/tmp/com.apple.launchd.i7vZbUARUD/Render, LSCOLORS=Gxfxcxdxbxegedabagacad, ANDROID_HOME=/Applications/Android/sdk}
----- End of the daemon log -----

13:43:11.541 [DEBUG] [org.gradle.launcher.daemon.client.DaemonClientInputForwarder] Dispatching close input message: CloseInput[id=d08690e7-da8a-46b7-90f1-090596bed5cd.2]
13:43:11.541 [DEBUG] [org.gradle.launcher.daemon.client.DaemonClientConnection] thread 15: dispatching class org.gradle.launcher.daemon.protocol.CloseInput
13:43:11.543 [DEBUG] [org.gradle.launcher.daemon.client.DaemonClientConnection] thread 1: connection stop
13:43:11.548 [ERROR] [org.gradle.BuildExceptionReporter] 
13:43:11.549 [ERROR] [org.gradle.BuildExceptionReporter] FAILURE: Build failed with an exception.
13:43:11.550 [ERROR] [org.gradle.BuildExceptionReporter] 
13:43:11.550 [ERROR] [org.gradle.BuildExceptionReporter] * What went wrong:
13:43:11.550 [ERROR] [org.gradle.BuildExceptionReporter] Gradle build daemon disappeared unexpectedly (it may have been stopped, killed or may have crashed)
13:43:11.554 [ERROR] [org.gradle.BuildExceptionReporter] 
13:43:11.554 [ERROR] [org.gradle.BuildExceptionReporter] * Exception is:
13:43:11.555 [ERROR] [org.gradle.BuildExceptionReporter] org.gradle.launcher.daemon.client.DaemonDisappearedException: Gradle build daemon disappeared unexpectedly (it may have been stopped, killed or may have crashed)
13:43:11.555 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.client.DaemonClient.handleDaemonDisappearance(DaemonClient.java:232)
13:43:11.556 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.client.DaemonClient.monitorBuild(DaemonClient.java:210)
13:43:11.556 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.client.DaemonClient.executeBuild(DaemonClient.java:182)
13:43:11.557 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.client.DaemonClient.execute(DaemonClient.java:151)
13:43:11.557 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.daemon.client.DaemonClient.execute(DaemonClient.java:74)
13:43:11.557 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:50)
13:43:11.558 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:171)
13:43:11.558 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:201)
13:43:11.559 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:174)
13:43:11.559 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:170)
13:43:11.560 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:139)
13:43:11.560 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
13:43:11.561 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
13:43:11.561 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.Main.doAction(Main.java:46)
13:43:11.562 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
13:43:11.562 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.Main.main(Main.java:37)
13:43:11.563 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:50)
13:43:11.563 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:32)
13:43:11.563 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
13:43:11.564 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:30)
13:43:11.564 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:127)
13:43:11.565 [ERROR] [org.gradle.BuildExceptionReporter]    at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:55)

AppboyFeedFragment as nested fragment and compatible with CoordinatorLayout

I'm using a ViewPager inside a Fragment with each tab associated with a nested fragment (getChildFragmentManager).
Sadly, I can't add AppboyFeedFragment as a child because you're using setRetainInstance (not recommended with UI fragments)

Second issue is with CoordinatorLayout, which is not compatible with ListView.
A temporary solution is to use setNestedScrollingEnabled but it's only working with Android Marshmallow. A better solution would be to use RecyclerView.

There is my quick workaround to fix these 2 issues:

public class FeedFragment extends AppboyFeedFragment {

    @Override
    public void setRetainInstance(boolean retain) {
        super.setRetainInstance(retain && getParentFragment() == null);
    }

    @Override
    public View onCreateView(LayoutInflater layoutInflater, ViewGroup container, Bundle savedInstanceState) {
        View view = super.onCreateView(layoutInflater, container, savedInstanceState);
        ViewCompat.setNestedScrollingEnabled(view.findViewById(android.R.id.list), true);
        return view;
    }
}

Sadly, ViewCompat.setNestedScrollingEnabled is not working with Android <= 5.0

Proguard Rules

Do you have a recommended list of what can be safely proguarded/ignored/etc?

I get a lot of warnings from various classes related to .gms.wearable.*, com.facebook.fresco.*, etc.

Service Intent must be explicit - Android L Preview

Getting the following exception when testing your SDK with our app with the Android L preview:

Caused by: java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=com.google.android.c2dm.intent.REGISTER (has extras) }
at android.app.ContextImpl.validateServiceIntent(ContextImpl.java:1603)
at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1632)
at android.app.ContextImpl.startService(ContextImpl.java:1616)
at android.content.ContextWrapper.startService(ContextWrapper.java:505)
at bo.app.do.a(SourceFile:56)
at com.appboy.Appboy.(SourceFile:160)
at com.appboy.Appboy.getInstance(SourceFile:108)

Javadoc outdated

The linked javadoc is outdated and does not include the new AppboySlideupManager

React Native 0.31 & Android In-App Messages

I've implemented your platform into both iOS & Android, and managed to get Push Noficiations working on both iOS & Android pretty easy. I finished up adding In-App messaging to iOS yesterday and today moved on to Android, which for some reason doesn't appear to work. I'm using:

React 0.31
Appboy SDK 1.14.1
Android Min SDK Version 19 
Testing on Device Android v6.0.1

Please Note: I'm not using Appboy.getInstance(this).requestInAppMessageRefresh(); as it says its Deprecated here even though it says to use it your documentation

On my MainActivity.java I added:

    @Override
    public void onResume() {
      super.onResume();
      AppboyInAppMessageManager.getInstance().registerInAppMessageManager(this);
      Log.e("MainActivity", "registerInAppMessageManager");
    }

    @Override
    public void onPause() {
      super.onPause();
      AppboyInAppMessageManager.getInstance().unregisterInAppMessageManager(this);
      Log.e("MainActivity", "unregisterInAppMessageManager");
    }

Which I've checked correctly registers and unregisters the AppboyInAppMessageManager. However, In-App messages don't show, you can see there received:

Received broadcast message. Message: Intent { act=com.google.android.c2dm.intent.RECEIVE flg=0x10 pkg=com.xxx cmp=com.xxx/com.appboy.AppboyGcmReceiver (has extras) }

If you click on the noficiation Appboy Test Send it will correctly show the In-App message. I decided to see if I could get the function beforeInAppMessageDisplayed to run like we've used on iOS so I created a ReactContextBaseJavaModule:

public class AppboyInAppMessagesModule extends ReactContextBaseJavaModule implements IInAppMessageManagerListener {

    public AppboyInAppMessagesModule(ReactApplicationContext reactContext) {
        super(reactContext);
    }

    @Override
    public String getName() {
        return "AppboyInAppMessages";
    }

    @Override
    public boolean onInAppMessageReceived(IInAppMessage inAppMessage) {
      return false;
    }

    @Override
    public InAppMessageOperation beforeInAppMessageDisplayed(IInAppMessage inAppMessage) {
      Log.e("AppboyInAppMessagesModule", "beforeInAppMessageDisplayed");
      return InAppMessageOperation.DISPLAY_NOW;
    }

    @Override
    public boolean onInAppMessageClicked(IInAppMessage inAppMessage, InAppMessageCloser inAppMessageCloser) {
      return true;
    }

    @Override
    public boolean onInAppMessageButtonClicked(MessageButton button, InAppMessageCloser inAppMessageCloser) {
      return true;
    }

    @Override
    public void onInAppMessageDismissed(IInAppMessage inAppMessage) {}

}

But unfortunately beforeInAppMessageDisplayed is never fired. Any advice you could offer would be great, pehraps I've missed something small. Thanks

Better Proguard Rules

In 1.13.3 you added consumer proguard rules - but they aren't really good ones. Rules like -keep class com.appboy.** { *; } keeps everything in the com.appboy namespace - which means that features that might not be used cannot be stripped by proguard.

v1.3.2 does not build

There are methods called in com.appboy.ui.AppboySlideupManager:195 and com.appboy.ui.widget.SlideupDrawerView:202 that are not present in appboy.jar, namely logSlideupShown() and logSlideupClicked().

Error:Execution failed for task ':libraries:Appboy:library:compileReleaseJava'.
> Compilation failed; see the compiler error output for details.
/Users/carlbenson/dev/android/androidstudio/libraries/AppBoy/library/src/com/appboy/ui/AppboySlideupManager.java
Error:(195, 60) error: cannot find symbol method logSlideupShown()
/Users/carlbenson/dev/android/androidstudio/libraries/AppBoy/library/src/com/appboy/ui/widget/SlideupDrawerView.java
Error:(202, 37) error: cannot find symbol method logSlideupClicked()

How to switch API keys in different build variants?

Lowly question - I want to use a different API key in different build variants of our app, i.e. dev/staging use one Appboy key, production uses another.

Since the key goes in res/values/appboy.xml I'm a bit confused as to how to do that properly. Any ideas?

error: Attribute "maxHeight" has already been defined

Hi - There seems to be an issue integrating the appboy SDK on Android Studio. I followed the instructions on the documentation and added the below to my project build.gradle files:

Proejct Level:
maven { url "http://appboy.github.io/appboy-android-sdk/sdk" }
SubModule level:
compile 'com.appboy:android-sdk-ui:1.5.+'

Gradle was throwing the error "error: Attribute "maxHeight" has already been defined". I found this attribute being defined under "appboy-android-sdk\android-sdk-ui\res\values\attrs.xml"

<declare-styleable name="SlideupDrawerView"> <attr name="bottomOffset" format="dimension"/> <attr name="topOffset" format="dimension"/> <attr name="allowSingleTap" format="boolean"/> <attr name="animateOnClick" format="boolean"/> <attr name="handle" format="reference"/> <attr name="content" format="reference"/> <attr name="maxHeight" format="dimension"/> </declare-styleable>

Coincidentally I had the same attribute defined in my project.

<declare-styleable name="SizeFrame"> <attr name="maxHeight" format="dimension"/> </declare-styleable>

The gradle build was successful after I renamed my project's attribute so having attributes with the same name somehow fails to build. Below was the exception thrown.

    Caused by: com.android.ide.common.internal.LoggedErrorException: Failed to run command:
            C:\tools\Android\android-sdk\build-tools\20.0.0\aapt.exe package -f --no-crunch -I C:\tools\Android\android-sdk\platforms\android-20\android.jar -M C:\Users\john\git\Project\MyModule\gradle-b
    uild\intermediates\manifests\full\GoogleMobileAMPProd\debug\AndroidManifest.xml -S C:\Users\john\git\Project\MyModule\gradle-build\intermediates\res\GoogleMobileAMPProd\debug -A C:\Users\john\git
    \Project\MyModule\gradle-build\intermediates\assets\GoogleMobileAMPProd\debug -m -J C:\Users\john\git\Project\MyModule\gradle-build\generated\source\r\GoogleMobileAMPProd\debug -F C:
    \Users\john\git\Project\MyModule\gradle-build\intermediates\res\resources-Google-Mobile-AMPProd-debug.ap_ -G C:\Users\john\git\Project\MyModule\gradle-build\intermediates\proguar
    d\GoogleMobileAMPProd\debug\aapt_rules.txt --debug-mode --custom-package com.clearchannel.MyModule.controller -0 apk --output-text-symbols C:\Users\john\git\Project\MyModule\gradle-build\intermedi
    ates\symbols\GoogleMobileAMPProd\debug
    Error Code:
            1
    Output:
    C:\Users\john\git\Project\MyModule\gradle-build\intermediates\res\GoogleMobileAMPProd\debug\values\values.xml:395: error: Attribute "maxHeight" has already been defined

    at com.android.ide.common.internal.CommandLineRunner.runCmdLine(CommandLineRunner.java:123)
    at com.android.ide.common.internal.CommandLineRunner.runCmdLine(CommandLineRunner.java:96)
    at com.android.ide.common.internal.CommandLineRunner.runCmdLine(CommandLineRunner.java:76)
    at com.android.builder.core.AndroidBuilder.processResources(AndroidBuilder.java:1129)
    at com.android.builder.core.AndroidBuilder$processResources$5.call(Unknown Source)
    at com.android.builder.core.AndroidBuilder$processResources$5.call(Unknown Source)
    at com.android.build.gradle.tasks.ProcessAndroidResources.doFullTaskAction(ProcessAndroidResources.groovy:99)
    at com.android.build.gradle.internal.tasks.IncrementalTask.taskAction(IncrementalTask.groovy:64)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63)
    ... 75 more


    BUILD FAILED

Displaying IAM within a DialogFragment

I am testing an on-boarding feature with Appboy IAM, but doesn't seem to work as expected even after reading through #57.
I have a single FragmentActivity which initialise the Appboy instance as suggested in the documentation, a browse fragment with a list of items and a DialogFragment as detail page.
I have two action based IAMs campaigns and both IAMs are said to be cached when the app starts as seen in the Log output.

Expected behaviour:
Show first IAM after user accepts terms of service (works fine)
Show second IAM when detail page previewed for the first time. (not working when in the detail page, but on exiting)

I am not sure but does this have to do with the use of DialogFragment?
If not how can i display IAM on within a DialogFragment without out calling requestInAppMessageRefresh since it has been deprecated!

Android Studio - android-sdk-ui not downloading properly with Gradle

I've been trying to install android-sdk-ui with Gradle following the steps detailed here. However, the downloaded package is not android-sdk-ui but android-sdk-jar.

Because of this, I'm not being able to use, for example, AppboyFeedbackFragment.

More info: I don't know if it has to do with this issue, but in this maven-metadata file, the artifactId is android-sdk-jar, (not "ui").

Thanks in advance!

com.appboy.Appboy is leaking memory

Leak Canary is popping because the activity context that is getting passed into com.appboy.Appboy is never getting released. When calling getInstance, the activity context is getting passed in and a new Appboy(context) object is created. The issue lies in the fact that I never see j = new Appboy(context) ever destroyed so it holds onto the activity context.

12-15 19:50:55.200 15585-16325/com.aetnaboost D/LeakCanary: * Device: unknown generic_x86 Android SDK built for x86 sdk_google_phone_x86
12-15 19:50:55.200 15585-16325/com.aetnaboost D/LeakCanary: * Android Version: 5.0.2 API: 21 LeakCanary: 1.4-beta2 3799172

This is the where the issue could lie, j is never destroyed when the activity is destroyed:

public static Appboy getInstance(Context context) {
        if(j == null) {
            Class var1 = Appboy.class;
            synchronized(Appboy.class) {
                if(j == null) {
                    j = new Appboy(context);
                }
            }
        }

        return j;
    }

Here is the leak canary dump, GC Root is static com.appboy.Appboy.j:

12-15 19:50:55.200 15585-16325/com.aetnaboost D/LeakCanary: In com.aetnaboost:1.0:1.
12-15 19:50:55.200 15585-16325/com.aetnaboost D/LeakCanary: * com.aetnaboost.activity.HomePageActivity has leaked:
12-15 19:50:55.200 15585-16325/com.aetnaboost D/LeakCanary: * GC ROOT static com.appboy.Appboy.j
12-15 19:50:55.200 15585-16325/com.aetnaboost D/LeakCanary: * references com.appboy.Appboy.m
12-15 19:50:55.200 15585-16325/com.aetnaboost D/LeakCanary: * references bo.app.bc.c
12-15 19:50:55.200 15585-16325/com.aetnaboost D/LeakCanary: * references java.util.concurrent.ConcurrentHashMap.table
12-15 19:50:55.200 15585-16325/com.aetnaboost D/LeakCanary: * references array java.util.concurrent.ConcurrentHashMap$Node[].[12]
12-15 19:50:55.200 15585-16325/com.aetnaboost D/LeakCanary: * references java.util.concurrent.ConcurrentHashMap$Node.val
12-15 19:50:55.200 15585-16325/com.aetnaboost D/LeakCanary: * references java.util.concurrent.CopyOnWriteArraySet.al
12-15 19:50:55.200 15585-16325/com.aetnaboost D/LeakCanary: * references java.util.concurrent.CopyOnWriteArrayList.elements
12-15 19:50:55.200 15585-16325/com.aetnaboost D/LeakCanary: * references array java.lang.Object[].[0]
12-15 19:50:55.200 15585-16325/com.aetnaboost D/LeakCanary: * references com.aetnaboost.activity.HomePageActivity$3.this$0 (anonymous implementation of com.appboy.events.IEventSubscriber)
12-15 19:50:55.200 15585-16325/com.aetnaboost D/LeakCanary: * leaks com.aetnaboost.activity.HomePageActivity instance
12-15 19:50:55.200 15585-16325/com.aetnaboost D/LeakCanary: * Retaining: 39KB.
12-15 19:50:55.200 15585-16325/com.aetnaboost D/LeakCanary: * Reference Key: 8641a985-867c-4318-962f-de7be79e7e12
12-15 19:50:55.200 15585-16325/com.aetnaboost D/LeakCanary: * Device: unknown generic_x86 Android SDK built for x86 sdk_google_phone_x86
12-15 19:50:55.200 15585-16325/com.aetnaboost D/LeakCanary: * Android Version: 5.0.2 API: 21 LeakCanary: 1.4-beta2 3799172
12-15 19:50:55.200 15585-16325/com.aetnaboost D/LeakCanary: * Durations: watch=5143ms, gc=118ms, heap dump=536ms, analysis=5359ms
12-15 19:50:55.200 15585-16325/com.aetnaboost D/LeakCanary: * Details:
12-15 19:50:55.200 15585-16325/com.aetnaboost D/LeakCanary: * Class com.appboy.Appboy
12-15 19:50:55.200 15585-16325/com.aetnaboost D/LeakCanary: | static i = java.util.HashSet@316854928 (0x12e2d290)
12-15 19:50:55.201 15585-16325/com.aetnaboost D/LeakCanary: | static h = java.util.HashSet@316854896 (0x12e2d270)
12-15 19:50:55.201 15585-16325/com.aetnaboost D/LeakCanary: | static y = java.lang.Object@316854960 (0x12e2d2b0)
12-15 19:50:55.201 15585-16325/com.aetnaboost D/LeakCanary: | static C = false
12-15 19:50:55.201 15585-16325/com.aetnaboost D/LeakCanary: | static A = null
12-15 19:50:55.201 15585-16325/com.aetnaboost D/LeakCanary: | static g = java.lang.String@316472416 (0x12dcfc60)
12-15 19:50:55.201 15585-16325/com.aetnaboost D/LeakCanary: | static j = com.appboy.Appboy@314727200 (0x12c25b20)
12-15 19:50:55.201 15585-16325/com.aetnaboost D/LeakCanary: | static B = false
12-15 19:50:55.201 15585-16325/com.aetnaboost D/LeakCanary: | static $staticOverhead = byte[72]@314683393 (0x12c1b001)
12-15 19:50:55.201 15585-16325/com.aetnaboost D/LeakCanary: | static z = null
12-15 19:50:55.201 15585-16325/com.aetnaboost D/LeakCanary: * Instance of com.appboy.Appboy
12-15 19:50:55.201 15585-16325/com.aetnaboost D/LeakCanary: | static i = java.util.HashSet@316854928 (0x12e2d290)
12-15 19:50:55.201 15585-16325/com.aetnaboost D/LeakCanary: | static h = java.util.HashSet@316854896 (0x12e2d270)
12-15 19:50:55.201 15585-16325/com.aetnaboost D/LeakCanary: | static y = java.lang.Object@316854960 (0x12e2d2b0)
12-15 19:50:55.201 15585-16325/com.aetnaboost D/LeakCanary: | static C = false
12-15 19:50:55.201 15585-16325/com.aetnaboost D/LeakCanary: | static A = null
12-15 19:50:55.201 15585-16325/com.aetnaboost D/LeakCanary: | static g = java.lang.String@316472416 (0x12dcfc60)
12-15 19:50:55.201 15585-16325/com.aetnaboost D/LeakCanary: | static j = com.appboy.Appboy@314727200 (0x12c25b20)
12-15 19:50:55.201 15585-16325/com.aetnaboost D/LeakCanary: | static B = false
12-15 19:50:55.201 15585-16325/com.aetnaboost D/LeakCanary: | static $staticOverhead = byte[72]@314683393 (0x12c1b001)
12-15 19:50:55.201 15585-16325/com.aetnaboost D/LeakCanary: | static z = null
12-15 19:50:55.201 15585-16325/com.aetnaboost D/LeakCanary: | D = null
12-15 19:50:55.202 15585-16325/com.aetnaboost D/LeakCanary: | a = bo.app.fs@317038368 (0x12e59f20)
12-15 19:50:55.202 15585-16325/com.aetnaboost D/LeakCanary: | b = bo.app.ez@315056256 (0x12c76080)
12-15 19:50:55.202 15585-16325/com.aetnaboost D/LeakCanary: | c = bo.app.hm@314895104 (0x12c4eb00)
12-15 19:50:55.202 15585-16325/com.aetnaboost D/LeakCanary: | d = bo.app.fd@317172064 (0x12e7a960)
12-15 19:50:55.202 15585-16325/com.aetnaboost D/LeakCanary: | e = bo.app.ca@314894592 (0x12c4e900)
12-15 19:50:55.202 15585-16325/com.aetnaboost D/LeakCanary: | f = com.appboy.configuration.XmlAppConfigurationProvider@317033440 (0x12e58be0)
12-15 19:50:55.202 15585-16325/com.aetnaboost D/LeakCanary: | k = com.aetnaboost.application.NewCoApplication@314780352 (0x12c32ac0)
12-15 19:50:55.202 15585-16325/com.aetnaboost D/LeakCanary: | l = bo.app.it@317168800 (0x12e79ca0)
12-15 19:50:55.202 15585-16325/com.aetnaboost D/LeakCanary: | m = bo.app.bc@315053824 (0x12c75700)
12-15 19:50:55.202 15585-16325/com.aetnaboost D/LeakCanary: | n = com.appboy.AppboyUser@317454656 (0x12ebf940)
12-15 19:50:55.202 15585-16325/com.aetnaboost D/LeakCanary: | o = bo.app.f@317677536 (0x12ef5fe0)
12-15 19:50:55.202 15585-16325/com.aetnaboost D/LeakCanary: | p = bo.app.bc@315439952 (0x12cd3b50)
12-15 19:50:55.202 15585-16325/com.aetnaboost D/LeakCanary: | q = java.util.concurrent.ThreadPoolExecutor@317038448 (0x12e59f70)
12-15 19:50:55.202 15585-16325/com.aetnaboost D/LeakCanary: | r = bo.app.m@316855024 (0x12e2d2f0)
12-15 19:50:55.202 15585-16325/com.aetnaboost D/LeakCanary: | s = bo.app.cp@316857632 (0x12e2dd20)
12-15 19:50:55.202 15585-16325/com.aetnaboost D/LeakCanary: | t = bo.app.bx@316855264 (0x12e2d3e0)
12-15 19:50:55.202 15585-16325/com.aetnaboost D/LeakCanary: | u = null
12-15 19:50:55.202 15585-16325/com.aetnaboost D/LeakCanary: | v = null
12-15 19:50:55.202 15585-16325/com.aetnaboost D/LeakCanary: | w = java.lang.Object@316854976 (0x12e2d2c0)
12-15 19:50:55.203 15585-16325/com.aetnaboost D/LeakCanary: | x = java.lang.Object@316854992 (0x12e2d2d0)
12-15 19:50:55.203 15585-16325/com.aetnaboost D/LeakCanary: * Instance of bo.app.bc
12-15 19:50:55.203 15585-16325/com.aetnaboost D/LeakCanary: | static $staticOverhead = byte[8]@316957281 (0x12e46261)
12-15 19:50:55.203 15585-16325/com.aetnaboost D/LeakCanary: | static a = java.lang.String@317044320 (0x12e5b660)
12-15 19:50:55.203 15585-16325/com.aetnaboost D/LeakCanary: | b = java.util.concurrent.ConcurrentHashMap@314976960 (0x12c62ac0)
12-15 19:50:55.203 15585-16325/com.aetnaboost D/LeakCanary: | c = java.util.concurrent.ConcurrentHashMap@314977024 (0x12c62b00)
12-15 19:50:55.203 15585-16325/com.aetnaboost D/LeakCanary: | d = java.util.concurrent.ConcurrentHashMap@314977152 (0x12c62b80)
12-15 19:50:55.203 15585-16325/com.aetnaboost D/LeakCanary: | e = java.util.concurrent.ThreadPoolExecutor@317035088 (0x12e59250)
12-15 19:50:55.203 15585-16325/com.aetnaboost D/LeakCanary: | f = java.lang.Object@316855456 (0x12e2d4a0)
12-15 19:50:55.203 15585-16325/com.aetnaboost D/LeakCanary: | g = java.lang.Object@316855472 (0x12e2d4b0)
12-15 19:50:55.203 15585-16325/com.aetnaboost D/LeakCanary: | h = java.lang.Object@316855488 (0x12e2d4c0)
12-15 19:50:55.203 15585-16325/com.aetnaboost D/LeakCanary: * Instance of java.util.concurrent.ConcurrentHashMap
12-15 19:50:55.203 15585-16325/com.aetnaboost D/LeakCanary: | static threadCounterHashCode = java.lang.ThreadLocal@1935630744 (0x735f6198)
12-15 19:50:55.204 15585-16325/com.aetnaboost D/LeakCanary: | static SEED_INCREMENT = 1640531527
12-15 19:50:55.204 15585-16325/com.aetnaboost D/LeakCanary: | static DEFAULT_CONCURRENCY_LEVEL = 16
12-15 19:50:55.204 15585-16325/com.aetnaboost D/LeakCanary: | static TRANSFERINDEX = 56
12-15 19:50:55.204 15585-16325/com.aetnaboost D/LeakCanary: | static LOAD_FACTOR = 0.75
12-15 19:50:55.204 15585-16325/com.aetnaboost D/LeakCanary: | static counterHashCodeGenerator = java.util.concurrent.atomic.AtomicInteger@1935630704 (0x735f6170)
12-15 19:50:55.204 15585-16325/com.aetnaboost D/LeakCanary: | static ASHIFT = 2
12-15 19:50:55.204 15585-16325/com.aetnaboost D/LeakCanary: | static SIZECTL = 52
12-15 19:50:55.204 15585-16325/com.aetnaboost D/LeakCanary: | static CELLVALUE = 120
12-15 19:50:55.204 15585-16325/com.aetnaboost D/LeakCanary: | static HASH_BITS = 2147483647
12-15 19:50:55.204 15585-16325/com.aetnaboost D/LeakCanary: | static MAX_ARRAY_SIZE = 2147483639
12-15 19:50:55.204 15585-16325/com.aetnaboost D/LeakCanary: | static serialVersionUID = 7249069246763182397
12-15 19:50:55.204 15585-16325/com.aetnaboost D/LeakCanary: | static MIN_TRANSFER_STRIDE = 16
12-15 19:50:55.204 15585-16325/com.aetnaboost D/LeakCanary: | static DEFAULT_CAPACITY = 16
12-15 19:50:55.204 15585-16325/com.aetnaboost D/LeakCanary: | static TRANSFERORIGIN = 60
12-15 19:50:55.204 15585-16325/com.aetnaboost D/LeakCanary: | static serialPersistentFields = java.io.ObjectStreamField[3]@1935630720 (0x735f6180)
12-15 19:50:55.204 15585-16325/com.aetnaboost D/LeakCanary: | static RESERVED = -2147483647
12-15 19:50:55.204 15585-16325/com.aetnaboost D/LeakCanary: | static MIN_TREEIFY_CAPACITY = 64
12-15 19:50:55.204 15585-16325/com.aetnaboost D/LeakCanary: | static $staticOverhead = byte[224]@1871057633 (0x6f8612e1)
12-15 19:50:55.204 15585-16325/com.aetnaboost D/LeakCanary: | static MAXIMUM_CAPACITY = 1073741824
12-15 19:50:55.204 15585-16325/com.aetnaboost D/LeakCanary: | static TREEIFY_THRESHOLD = 8
12-15 19:50:55.204 15585-16325/com.aetnaboost D/LeakCanary: | static TREEBIN = -2147483648
12-15 19:50:55.204 15585-16325/com.aetnaboost D/LeakCanary: | static NCPU = 4
12-15 19:50:55.204 15585-16325/com.aetnaboost D/LeakCanary: | static CELLSBUSY = 48
12-15 19:50:55.204 15585-16325/com.aetnaboost D/LeakCanary: | static ABASE = 12
12-15 19:50:55.204 15585-16325/com.aetnaboost D/LeakCanary: | static U = sun.misc.Unsafe@1881031184 (0x701e4210)
12-15 19:50:55.204 15585-16325/com.aetnaboost D/LeakCanary: | static UNTREEIFY_THRESHOLD = 6
12-15 19:50:55.204 15585-16325/com.aetnaboost D/LeakCanary: | static BASECOUNT = 40
12-15 19:50:55.205 15585-16325/com.aetnaboost D/LeakCanary: | static MOVED = -1879048193
12-15 19:50:55.205 15585-16325/com.aetnaboost D/LeakCanary: | counterCells = null
12-15 19:50:55.205 15585-16325/com.aetnaboost D/LeakCanary: | entrySet = null
12-15 19:50:55.205 15585-16325/com.aetnaboost D/LeakCanary: | keySet = null
12-15 19:50:55.205 15585-16325/com.aetnaboost D/LeakCanary: | nextTable = null
12-15 19:50:55.205 15585-16325/com.aetnaboost D/LeakCanary: | table = java.util.concurrent.ConcurrentHashMap$Node[16]@317040528 (0x12e5a790)
12-15 19:50:55.205 15585-16325/com.aetnaboost D/LeakCanary: | values = null
12-15 19:50:55.205 15585-16325/com.aetnaboost D/LeakCanary: | baseCount = 2
12-15 19:50:55.205 15585-16325/com.aetnaboost D/LeakCanary: | cellsBusy = 0
12-15 19:50:55.205 15585-16325/com.aetnaboost D/LeakCanary: | sizeCtl = 12
12-15 19:50:55.205 15585-16325/com.aetnaboost D/LeakCanary: | transferIndex = 0
12-15 19:50:55.205 15585-16325/com.aetnaboost D/LeakCanary: | transferOrigin = 0
12-15 19:50:55.205 15585-16325/com.aetnaboost D/LeakCanary: | keySet = null
12-15 19:50:55.205 15585-16325/com.aetnaboost D/LeakCanary: | valuesCollection = null
12-15 19:50:55.205 15585-16325/com.aetnaboost D/LeakCanary: * Array of java.util.concurrent.ConcurrentHashMap$Node[]
12-15 19:50:55.205 15585-16325/com.aetnaboost D/LeakCanary: | [0] = null
12-15 19:50:55.205 15585-16325/com.aetnaboost D/LeakCanary: | [1] = java.util.concurrent.ConcurrentHashMap$Node@317293120 (0x12e98240)
12-15 19:50:55.205 15585-16325/com.aetnaboost D/LeakCanary: | [2] = null
12-15 19:50:55.205 15585-16325/com.aetnaboost D/LeakCanary: | [3] = null
12-15 19:50:55.205 15585-16325/com.aetnaboost D/LeakCanary: | [4] = null
12-15 19:50:55.205 15585-16325/com.aetnaboost D/LeakCanary: | [5] = null
12-15 19:50:55.205 15585-16325/com.aetnaboost D/LeakCanary: | [6] = null
12-15 19:50:55.205 15585-16325/com.aetnaboost D/LeakCanary: | [7] = null
12-15 19:50:55.205 15585-16325/com.aetnaboost D/LeakCanary: | [8] = null
12-15 19:50:55.205 15585-16325/com.aetnaboost D/LeakCanary: | [9] = null
12-15 19:50:55.205 15585-16325/com.aetnaboost D/LeakCanary: | [10] = null
12-15 19:50:55.205 15585-16325/com.aetnaboost D/LeakCanary: | [11] = null
12-15 19:50:55.205 15585-16325/com.aetnaboost D/LeakCanary: | [12] = java.util.concurrent.ConcurrentHashMap$Node@319450592 (0x130a6de0)
12-15 19:50:55.205 15585-16325/com.aetnaboost D/LeakCanary: | [13] = null
12-15 19:50:55.206 15585-16325/com.aetnaboost D/LeakCanary: | [14] = null
12-15 19:50:55.207 15585-16325/com.aetnaboost D/LeakCanary: | [15] = null
12-15 19:50:55.207 15585-16325/com.aetnaboost D/LeakCanary: * Instance of java.util.concurrent.ConcurrentHashMap$Node
12-15 19:50:55.207 15585-16325/com.aetnaboost D/LeakCanary: | key = com.appboy.events.FeedUpdatedEvent
12-15 19:50:55.207 15585-16325/com.aetnaboost D/LeakCanary: | next = null
12-15 19:50:55.207 15585-16325/com.aetnaboost D/LeakCanary: | val = java.util.concurrent.CopyOnWriteArraySet@318368272 (0x12f9ea10)
12-15 19:50:55.207 15585-16325/com.aetnaboost D/LeakCanary: | hash = 36900700
12-15 19:50:55.207 15585-16325/com.aetnaboost D/LeakCanary: * Instance of java.util.concurrent.CopyOnWriteArraySet
12-15 19:50:55.207 15585-16325/com.aetnaboost D/LeakCanary: | static $staticOverhead = byte[8]@315773537 (0x12d25261)
12-15 19:50:55.207 15585-16325/com.aetnaboost D/LeakCanary: | static serialVersionUID = 5457747651344034263
12-15 19:50:55.207 15585-16325/com.aetnaboost D/LeakCanary: | al = java.util.concurrent.CopyOnWriteArrayList@318368288 (0x12f9ea20)
12-15 19:50:55.207 15585-16325/com.aetnaboost D/LeakCanary: * Instance of java.util.concurrent.CopyOnWriteArrayList
12-15 19:50:55.207 15585-16325/com.aetnaboost D/LeakCanary: | static $staticOverhead = byte[8]@1871079129 (0x6f8666d9)
12-15 19:50:55.207 15585-16325/com.aetnaboost D/LeakCanary: | static serialVersionUID = 8673264195747942595
12-15 19:50:55.207 15585-16325/com.aetnaboost D/LeakCanary: | elements = java.lang.Object[1]@318368304 (0x12f9ea30)
12-15 19:50:55.207 15585-16325/com.aetnaboost D/LeakCanary: * Array of java.lang.Object[]
12-15 19:50:55.208 15585-16325/com.aetnaboost D/LeakCanary: | [0] = com.aetnaboost.activity.HomePageActivity$3@318368256 (0x12f9ea00)
12-15 19:50:55.208 15585-16325/com.aetnaboost D/LeakCanary: * Instance of com.aetnaboost.activity.HomePageActivity$3
12-15 19:50:55.208 15585-16325/com.aetnaboost D/LeakCanary: | static $staticOverhead = byte[16]@319018417 (0x1303d5b1)
12-15 19:50:55.208 15585-16325/com.aetnaboost D/LeakCanary: | static serialVersionUID = 0
12-15 19:50:55.208 15585-16325/com.aetnaboost D/LeakCanary: | static $change = null
12-15 19:50:55.208 15585-16325/com.aetnaboost D/LeakCanary: | this$0 = com.aetnaboost.activity.HomePageActivity@315859824 (0x12d3a370)
12-15 19:50:55.208 15585-16325/com.aetnaboost D/LeakCanary: * Instance of com.aetnaboost.activity.HomePageActivity
12-15 19:50:55.208 15585-16325/com.aetnaboost D/LeakCanary: | static $staticOverhead = byte[16]@316817409 (0x12e24001)
12-15 19:50:55.208 15585-16325/com.aetnaboost D/LeakCanary: | static serialVersionUID = 0
12-15 19:50:55.208 15585-16325/com.aetnaboost D/LeakCanary: | static $change = null
12-15 19:50:55.208 15585-16325/com.aetnaboost D/LeakCanary: | mActionBar = android.support.v7.app.WindowDecorActionBar@314879920 (0x12c4afb0)
12-15 19:50:55.208 15585-16325/com.aetnaboost D/LeakCanary: | mActivityMain = android.widget.RelativeLayout@320772096 (0x131e9800)
12-15 19:50:55.208 15585-16325/com.aetnaboost D/LeakCanary: | mAppboyCard = null
12-15 19:50:55.208 15585-16325/com.aetnaboost D/LeakCanary: | mTrackBenefitsPhaseMessagingResponse = com.aetnaboost.model.TrackBenefitsPhaseMessagingResponse@317904976 (0x12f2d850)
12-15 19:50:55.208 15585-16325/com.aetnaboost D/LeakCanary: | mTrackBenefitsResponse = com.aetnaboost.model.TrackBenefitsResponse@318133408 (0x12f654a0)
12-15 19:50:55.208 15585-16325/com.aetnaboost D/LeakCanary: | mVerticalViewPager = fr.castorflex.android.verticalviewpager.VerticalViewPager@320773120 (0x131e9c00)
12-15 19:50:55.208 15585-16325/com.aetnaboost D/LeakCanary: | state = fr.castorflex.android.verticalviewpager.VerticalViewPager$SavedState@319681024 (0x130df200)
12-15 19:50:55.208 15585-16325/com.aetnaboost D/LeakCanary: | mActionBar = android.support.v7.app.WindowDecorActionBar@314879920 (0x12c4afb0)
12-15 19:50:55.208 15585-16325/com.aetnaboost D/LeakCanary: | viewHealthSpaceActionBarIcon = com.aetnaboost.CustomViews.ViewHealthSpaceActionBarIcon@320763904 (0x131e7800)
12-15 19:50:55.208 15585-16325/com.aetnaboost D/LeakCanary: | loginHelper = com.aetnaboost.activity.LogInHelper@319687680 (0x130e0c00)
12-15 19:50:55.208 15585-16325/com.aetnaboost D/LeakCanary: | mDataSource = com.aetnaboost.SearchDataSource@319210720 (0x1306c4e0)
12-15 19:50:55.208 15585-16325/com.aetnaboost D/LeakCanary: | mLoginState = com.aetnaboost.activity.LogInHelper$LoginState@317237600 (0x12e8a960)
12-15 19:50:55.209 15585-16325/com.aetnaboost D/LeakCanary: | mNoInternetDialogFragment = null
12-15 19:50:55.209 15585-16325/com.aetnaboost D/LeakCanary: | mProgressDialog = null
12-15 19:50:55.209 15585-16325/com.aetnaboost D/LeakCanary: | mDelegate = android.support.v7.app.AppCompatDelegateImplV14@317322240 (0x12e9f400)
12-15 19:50:55.209 15585-16325/com.aetnaboost D/LeakCanary: | mResources = null
12-15 19:50:55.209 15585-16325/com.aetnaboost D/LeakCanary: | mEatKeyUpEvent = false
12-15 19:50:55.209 15585-16325/com.aetnaboost D/LeakCanary: | mThemeId = 2131296420
12-15 19:50:55.209 15585-16325/com.aetnaboost D/LeakCanary: | mFragments = android.support.v4.app.FragmentController@317904272 (0x12f2d590)
12-15 19:50:55.209 15585-16325/com.aetnaboost D/LeakCanary: | mHandler = android.support.v4.app.FragmentActivity$1@318396768 (0x12fa5960)
12-15 19:50:55.209 15585-16325/com.aetnaboost D/LeakCanary: | mMediaController = null
12-15 19:50:55.209 15585-16325/com.aetnaboost D/LeakCanary: | mPendingFragmentActivityResults = android.support.v4.util.SparseArrayCompat@318418784 (0x12faaf60)
12-15 19:50:55.209 15585-16325/com.aetnaboost D/LeakCanary: | mCreated = true
12-15 19:50:55.209 15585-16325/com.aetnaboost D/LeakCanary: | mNextCandidateRequestIndex = 0
12-15 19:50:55.209 15585-16325/com.aetnaboost D/LeakCanary: | mOptionsMenuInvalidated = false
12-15 19:50:55.209 15585-16325/com.aetnaboost D/LeakCanary: | mReallyStopped = true
12-15 19:50:55.209 15585-16325/com.aetnaboost D/LeakCanary: | mRequestedPermissionsFromFragment = false
12-15 19:50:55.209 15585-16325/com.aetnaboost D/LeakCanary: | mResumed = false
12-15 19:50:55.209 15585-16325/com.aetnaboost D/LeakCanary: | mRetaining = false
12-15 19:50:55.209 15585-16325/com.aetnaboost D/LeakCanary: | mStopped = true
12-15 19:50:55.209 15585-16325/com.aetnaboost D/LeakCanary: | mStartedActivityFromFragment = false
12-15 19:50:55.209 15585-16325/com.aetnaboost D/LeakCanary: | mStartedIntentSenderFromFragment = false
12-15 19:50:55.209 15585-16325/com.aetnaboost D/LeakCanary: | mActionBar = null
12-15 19:50:55.209 15585-16325/com.aetnaboost D/LeakCanary: | mActivityInfo = android.content.pm.ActivityInfo@315019648 (0x12c6d180)
12-15 19:50:55.209 15585-16325/com.aetnaboost D/LeakCanary: | mActivityTransitionState = android.app.ActivityTransitionState@317773888 (0x12f0d840)
12-15 19:50:55.209 15585-16325/com.aetnaboost D/LeakCanary: | mAllLoaderManagers = android.util.ArrayMap@320308384 (0x131784a0)
12-15 19:50:55.209 15585-16325/com.aetnaboost D/LeakCanary: | mApplication = com.aetnaboost.application.NewCoApplication@314780352 (0x12c32ac0)
12-15 19:50:55.209 15585-16325/com.aetnaboost D/LeakCanary: | mComponent = android.content.ComponentName@317829408 (0x12f1b120)
12-15 19:50:55.209 15585-16325/com.aetnaboost D/LeakCanary: | mContainer = android.app.Activity$1@317904224 (0x12f2d560)
12-15 19:50:55.210 15585-16325/com.aetnaboost D/LeakCanary: | mCurrentConfig = android.content.res.Configuration@317757664 (0x12f098e0)
12-15 19:50:55.210 15585-16325/com.aetnaboost D/LeakCanary: | mDecor = null
12-15 19:50:55.210 15585-16325/com.aetnaboost D/LeakCanary: | mDefaultKeySsb = null
12-15 19:50:55.210 15585-16325/com.aetnaboost D/LeakCanary: | mEmbeddedID = null
12-15 19:50:55.210 15585-16325/com.aetnaboost D/LeakCanary: | mEnterTransitionListener = android.app.SharedElementCallback$1@1881165224 (0x70204da8)
12-15 19:50:55.210 15585-16325/com.aetnaboost D/LeakCanary: | mExitTransitionListener = android.app.SharedElementCallback$1@1881165224 (0x70204da8)
12-15 19:50:55.210 15585-16325/com.aetnaboost D/LeakCanary: | mFragments = android.app.FragmentManagerImpl@317822112 (0x12f194a0)
12-15 19:50:55.210 15585-16325/com.aetnaboost D/LeakCanary: | mHandler = android.os.Handler@318396672 (0x12fa5900)
12-15 19:50:55.210 15585-16325/com.aetnaboost D/LeakCanary: | mInstanceTracker = android.os.StrictMode$InstanceTracker@317904240 (0x12f2d570)
12-15 19:50:55.210 15585-16325/com.aetnaboost D/LeakCanary: | mInstrumentation = android.app.Instrumentation@314753040 (0x12c2c010)
12-15 19:50:55.210 15585-16325/com.aetnaboost D/LeakCanary: | mIntent = android.content.Intent@317763712 (0x12f0b080)
12-15 19:50:55.210 15585-16325/com.aetnaboost D/LeakCanary: | mLastNonConfigurationInstances = null
12-15 19:50:55.210 15585-16325/com.aetnaboost D/LeakCanary: | mLoaderManager = null
12-15 19:50:55.210 15585-16325/com.aetnaboost D/LeakCanary: | mMainThread = android.app.ActivityThread@314851584 (0x12c44100)
12-15 19:50:55.210 15585-16325/com.aetnaboost D/LeakCanary: | mManagedCursors = java.util.ArrayList@318395872 (0x12fa55e0)
12-15 19:50:55.210 15585-16325/com.aetnaboost D/LeakCanary: | mManagedDialogs = null
12-15 19:50:55.210 15585-16325/com.aetnaboost D/LeakCanary: | mMenuInflater = null
12-15 19:50:55.210 15585-16325/com.aetnaboost D/LeakCanary: | mParent = null
12-15 19:50:55.210 15585-16325/com.aetnaboost D/LeakCanary: | mResultData = null
12-15 19:50:55.210 15585-16325/com.aetnaboost D/LeakCanary: | mSearchManager = null
12-15 19:50:55.210 15585-16325/com.aetnaboost D/LeakCanary: | mTitle = java.lang.String@318398400 (0x12fa5fc0)
12-15 19:50:55.210 15585-16325/com.aetnaboost D/LeakCanary: | mToken = android.os.BinderProxy@318358368 (0x12f9c360)
12-15 19:50:55.210 15585-16325/com.aetnaboost D/LeakCanary: | mTranslucentCallback = null
12-15 19:50:55.210 15585-16325/com.aetnaboost D/LeakCanary: | mUiThread = java.lang.Thread@1935440240 (0x735c7970)
12-15 19:50:55.210 15585-16325/com.aetnaboost D/LeakCanary: | mVoiceInteractor = null
12-15 19:50:55.210 15585-16325/com.aetnaboost D/LeakCanary: | mWindow = com.android.internal.policy.impl.PhoneWindow@315608576 (0x12cfce00)
12-15 19:50:55.211 15585-16325/com.aetnaboost D/LeakCanary: | mWindowManager = android.view.WindowManagerImpl@318415296 (0x12faa1c0)
12-15 19:50:55.211 15585-16325/com.aetnaboost D/LeakCanary: | mCalled = true
12-15 19:50:55.211 15585-16325/com.aetnaboost D/LeakCanary: | mChangeCanvasToTranslucent = false
12-15 19:50:55.211 15585-16325/com.aetnaboost D/LeakCanary: | mChangingConfigurations = false
12-15 19:50:55.211 15585-16325/com.aetnaboost D/LeakCanary: | mCheckedForLoaderManager = true
12-15 19:50:55.211 15585-16325/com.aetnaboost D/LeakCanary: | mConfigChangeFlags = 0
12-15 19:50:55.211 15585-16325/com.aetnaboost D/LeakCanary: | mDefaultKeyMode = 0
12-15 19:50:55.211 15585-16325/com.aetnaboost D/LeakCanary: | mDestroyed = true
12-15 19:50:55.213 15585-16325/com.aetnaboost D/LeakCanary: | mDoReportFullyDrawn = false
12-15 19:50:55.213 15585-16325/com.aetnaboost D/LeakCanary: | mEnableDefaultActionBarUp = false
12-15 19:50:55.213 15585-16325/com.aetnaboost D/LeakCanary: | mFinished = true
12-15 19:50:55.213 15585-16325/com.aetnaboost D/LeakCanary: | mIdent = 231332328
12-15 19:50:55.213 15585-16325/com.aetnaboost D/LeakCanary: | mLoadersStarted = false
12-15 19:50:55.213 15585-16325/com.aetnaboost D/LeakCanary: | mResultCode = 0
12-15 19:50:55.213 15585-16325/com.aetnaboost D/LeakCanary: | mResumed = false
12-15 19:50:55.213 15585-16325/com.aetnaboost D/LeakCanary: | mStartedActivity = false
12-15 19:50:55.213 15585-16325/com.aetnaboost D/LeakCanary: | mStopped = true
12-15 19:50:55.213 15585-16325/com.aetnaboost D/LeakCanary: | mTemporaryPause = false
12-15 19:50:55.213 15585-16325/com.aetnaboost D/LeakCanary: | mTitleColor = 0
12-15 19:50:55.213 15585-16325/com.aetnaboost D/LeakCanary: | mTitleReady = true
12-15 19:50:55.213 15585-16325/com.aetnaboost D/LeakCanary: | mVisibleBehind = false
12-15 19:50:55.213 15585-16325/com.aetnaboost D/LeakCanary: | mVisibleFromClient = true
12-15 19:50:55.213 15585-16325/com.aetnaboost D/LeakCanary: | mVisibleFromServer = false
12-15 19:50:55.213 15585-16325/com.aetnaboost D/LeakCanary: | mWindowAdded = true
12-15 19:50:55.213 15585-16325/com.aetnaboost D/LeakCanary: | mInflater = uk.co.chrisjenx.calligraphy.CalligraphyLayoutInflater@317792832 (0x12f12240)
12-15 19:50:55.213 15585-16325/com.aetnaboost D/LeakCanary: | mOverrideConfiguration = null
12-15 19:50:55.213 15585-16325/com.aetnaboost D/LeakCanary: | mResources = android.content.res.Resources@314752800 (0x12c2bf20)
12-15 19:50:55.213 15585-16325/com.aetnaboost D/LeakCanary: | mTheme = android.content.res.Resources$Theme@318415328 (0x12faa1e0)
12-15 19:50:55.213 15585-16325/com.aetnaboost D/LeakCanary: | mThemeResource = 2131296420
12-15 19:50:55.213 15585-16325/com.aetnaboost D/LeakCanary: | mBase = uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper@318414912 (0x12faa040)
12-15 19:50:55.214 15585-16325/com.aetnaboost D/LeakCanary: * Excluded Refs:
12-15 19:50:55.214 15585-16325/com.aetnaboost D/LeakCanary: | Field: android.app.ActivityThread$ActivityClientRecord.nextIdle
12-15 19:50:55.214 15585-16325/com.aetnaboost D/LeakCanary: | Field: android.view.inputmethod.InputMethodManager.mNextServedView
12-15 19:50:55.214 15585-16325/com.aetnaboost D/LeakCanary: | Field: android.view.inputmethod.InputMethodManager.mServedView
12-15 19:50:55.214 15585-16325/com.aetnaboost D/LeakCanary: | Field: android.view.inputmethod.InputMethodManager.mServedInputConnection
12-15 19:50:55.214 15585-16325/com.aetnaboost D/LeakCanary: | Field: android.view.inputmethod.InputMethodManager.mCurRootView
12-15 19:50:55.214 15585-16325/com.aetnaboost D/LeakCanary: | Field: android.animation.LayoutTransition$1.val$parent
12-15 19:50:55.214 15585-16325/com.aetnaboost D/LeakCanary: | Field: android.view.textservice.SpellCheckerSession$1.this$0
12-15 19:50:55.214 15585-16325/com.aetnaboost D/LeakCanary: | Field: android.support.v7.internal.widget.ActivityChooserModel.mActivityChoserModelPolicy
12-15 19:50:55.214 15585-16325/com.aetnaboost D/LeakCanary: | Field: android.widget.ActivityChooserModel.mActivityChoserModelPolicy
12-15 19:50:55.214 15585-16325/com.aetnaboost D/LeakCanary: | Field: android.accounts.AccountManager$AmsTask$Response.this$1
12-15 19:50:55.214 15585-16325/com.aetnaboost D/LeakCanary: | Field: android.media.MediaScannerConnection.mContext
12-15 19:50:55.214 15585-16325/com.aetnaboost D/LeakCanary: | Field: android.os.UserManager.mContext
12-15 19:50:55.214 15585-16325/com.aetnaboost D/LeakCanary: | Field: android.appwidget.AppWidgetHost$Callbacks.this$0
12-15 19:50:55.214 15585-16325/com.aetnaboost D/LeakCanary: | Field: android.media.AudioManager$1.this$0
12-15 19:50:55.214 15585-16325/com.aetnaboost D/LeakCanary: | Field: android.widget.Editor$Blink.this$0
12-15 19:50:55.214 15585-16325/com.aetnaboost D/LeakCanary: | Field: android.view.Choreographer$FrameDisplayEventReceiver.mMessageQueue (always)
12-15 19:50:55.214 15585-16325/com.aetnaboost D/LeakCanary: | Static field: android.media.session.MediaSessionLegacyHelper.sInstance
12-15 19:50:55.214 15585-16325/com.aetnaboost D/LeakCanary: | Static field: android.text.TextLine.sCached
12-15 19:50:55.214 15585-16325/com.aetnaboost D/LeakCanary: | Thread:FinalizerWatchdogDaemon (always)
12-15 19:50:55.214 15585-16325/com.aetnaboost D/LeakCanary: | Thread:main (always)
12-15 19:50:55.214 15585-16325/com.aetnaboost D/LeakCanary: | Thread:LeakCanary-Heap-Dump (always)
12-15 19:50:55.214 15585-16325/com.aetnaboost D/LeakCanary: | Class:java.lang.ref.WeakReference (always)
12-15 19:50:55.214 15585-16325/com.aetnaboost D/LeakCanary: | Class:java.lang.ref.SoftReference (always)
12-15 19:50:55.214 15585-16325/com.aetnaboost D/LeakCanary: | Class:java.lang.ref.PhantomReference (always)
12-15 19:50:55.214 15585-16325/com.aetnaboost D/LeakCanary: | Class:java.lang.ref.Finalizer (always)
12-15 19:50:55.214 15585-16325/com.aetnaboost D/LeakCanary: | Class:java.lang.ref.FinalizerReference (always)
12-15 19:50:55.214 15585-16325/com.aetnaboost D/LeakCanary: | Root Class:android.os.Binder (always)

Thanks!

AppboyBroadcastReceiver#onReceive is not called on Android 7.0

RESULT="$(curl --silent -X POST -H "Content-Type: application/json" \
  -d "{\"app_group_id\":\"$APP_GROUP_ID\",\"external_user_ids\":[\"$USER_ID\"],\"messages\":{ \
  \"android_push\":{\"title\":\"$TITLE\",\"alert\":\"$MESSAGE\",\"custom_uri\":\"$DEEP_LINK\" ,\"extra\":{\"$EXTRA_KEY1\":\"$EXTRA_VALUE1\", \"$EXTRA_KEY2\":\"$EXTRA_VALUE2\", \"$EXTRA_KEY3\":\"$EXTRA_VALUE3\", \"$EXTRA_KEY4\":\"$EXTRA_VALUE4\"}} \
  }}" \
  https://api.appboy.com/messages/send)"

if [ ! "$RESULT" = "{\"message\":\"success\"}" ]; then
   echo "Failed to send message: $RESULT"
   exit 1
fi

if [ "$RESULT" = "{\"message\":\"success\"}" ]; then
   echo "Succeed to send message"
fi

AppboyBroadcastReceiver#onReceive is not called.

The Same script can work on Nexus 5 Android 6.0.1 but not work on Nexus 6 Android 7.0

IInAppMessageManagerListener' could not be found

Hi

We are using Appboy xamarin component v 1.3 and 1.2 along with xamarin forms 2.2. While building xamarin mobile app project, we are getting below error.

public class CustomInAppMessageManagerListener : Java.Lang.Object, IInAppMessageManagerListener
{
}

Error:
The type or namespace name 'IInAppMessageManagerListener' could not be found (are you missing a using directive or an assembly reference?)

Any help will be appreciated.
Thanks !

Configurable Log Level

It'd be great if the log levels from the appboy jar were configurable somehow. My logcat is filled with stuff that I can't really understand/is useful like:

.bo.app.bv﹕ Completed the openSession call. Starting or continuing session xxxxxx
.bo.app.z﹕ Adding request to dispatcher with parameters
etc.

"memoryCacheSize must be a positive number"

We have been running some Android tests using Robolectric, and we are seeing the error presented in the title.

I believe this is caused in the com.appboy.Appboy class. During initialization of the Appboy object, it determines the cache size it is allowed to use by retrieving the maximum memory the JVM is allowed to use through Runtime.getRuntime().maxMemory() call. The returned value is then immediately cast to a primitive int type. maxMemory() returns a primitive long value. The evaluation of the cast from long to int can generate a negative integer, which leads to an error that is the title of this message.

Could not resolve com.appboy:android-sdk-jar:1.6.+

Today, when I opened IDE, this compilation error showed up. It was working properly 2 days ago and I made no changes since then.

Error:A problem occurred configuring root project 'MyProjectName'.
> Could not resolve all dependencies for configuration ':_stagingDebugCompile'.
   > Could not resolve com.appboy:android-sdk-jar:1.6.+.
     Required by:
         :MyProjectName:unspecified > com.appboy:android-sdk-ui:1.6.0
      > Failed to list versions for com.appboy:android-sdk-jar.
         > Unable to load Maven meta-data from http://appboy.github.io/appboy-android-sdk/sdk/com/appboy/android-sdk-jar/maven-metadata.xml.
            > org.xml.sax.SAXParseException; lineNumber: 5; columnNumber: 35; The entity "middot" was referenced, but not declared.

attempt to re-open an already-closed object: SQLiteDatabase

Got an exception in the log during startup of our app.

We are using the unreleased version 1.3.3 of appboy.

Note: the exception did not crash the app.

05-15 12:39:30.470: W/Appboy.bo.app.bd(28486): java.util.concurrent.ExecutionException: java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase: /data/data/com.planeto.quizbattle2.stern/databases/appboy.db.qb2-stern:8001
05-15 12:39:30.470: W/Appboy.bo.app.bd(28486): at java.util.concurrent.FutureTask.report(FutureTask.java:94)
05-15 12:39:30.470: W/Appboy.bo.app.bd(28486): at java.util.concurrent.FutureTask.get(FutureTask.java:160)
05-15 12:39:30.470: W/Appboy.bo.app.bd(28486): at bo.app.bo.trigger(SourceFile:71)
05-15 12:39:30.470: W/Appboy.bo.app.bd(28486): at bo.app.x.run(SourceFile:246)
05-15 12:39:30.470: W/Appboy.bo.app.bd(28486): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
05-15 12:39:30.470: W/Appboy.bo.app.bd(28486): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
05-15 12:39:30.470: W/Appboy.bo.app.bd(28486): at java.lang.Thread.run(Thread.java:841)
05-15 12:39:30.470: W/Appboy.bo.app.bd(28486): Caused by: java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase: /data/data/com.planeto.quizbattle2.stern/databases/appboy.db.qb2-stern:8001
05-15 12:39:30.470: W/Appboy.bo.app.bd(28486): at android.database.sqlite.SQLiteClosable.acquireReference(SQLiteClosable.java:55)
05-15 12:39:30.470: W/Appboy.bo.app.bd(28486): at android.database.sqlite.SQLiteDatabase.delete(SQLiteDatabase.java:1492)
05-15 12:39:30.470: W/Appboy.bo.app.bd(28486): at bo.app.hw.a(SourceFile:134)
05-15 12:39:30.470: W/Appboy.bo.app.bd(28486): at bo.app.cb.run(SourceFile:70)
05-15 12:39:30.470: W/Appboy.bo.app.bd(28486): at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:390)
05-15 12:39:30.470: W/Appboy.bo.app.bd(28486): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
05-15 12:39:30.470: W/Appboy.bo.app.bd(28486): ... 3 more

recurring SocketTimoutException

while using the app in a debug mode, I constantly get the same issue returning with every session and event I attempt to report:

09-07 09:35:25.636: W/Appboy.bo.app.hk(5502): Experienced exception processing API response. Failing task.
09-07 09:35:25.636: W/Appboy.bo.app.hk(5502): bo.app.kt: Could not setup connection [https://dev.appboy.com/api/v2/data] [failed to connect to dev.appboy.com/23.253.130.217 (port 443) after 5000ms]
09-07 09:35:25.636: W/Appboy.bo.app.hk(5502): at bo.app.ko.b(SourceFile:124)
09-07 09:35:25.636: W/Appboy.bo.app.hk(5502): at bo.app.ko.a(SourceFile:69)
09-07 09:35:25.636: W/Appboy.bo.app.hk(5502): at bo.app.ko.a(SourceFile:52)
09-07 09:35:25.636: W/Appboy.bo.app.hk(5502): at bo.app.ko.a(SourceFile:43)
09-07 09:35:25.636: W/Appboy.bo.app.hk(5502): at bo.app.gk.a(SourceFile:36)
09-07 09:35:25.636: W/Appboy.bo.app.hk(5502): at bo.app.ij.a(SourceFile:36)
09-07 09:35:25.636: W/Appboy.bo.app.hk(5502): at bo.app.hk.run(SourceFile:62)
09-07 09:35:25.636: W/Appboy.bo.app.hk(5502): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
09-07 09:35:25.636: W/Appboy.bo.app.hk(5502): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
09-07 09:35:25.636: W/Appboy.bo.app.hk(5502): at java.lang.Thread.run(Thread.java:856)
09-07 09:35:25.636: W/Appboy.bo.app.hk(5502): Caused by: java.net.SocketTimeoutException: failed to connect to dev.appboy.com/23.253.130.217 (port 443) after 5000ms
09-07 09:35:25.636: W/Appboy.bo.app.hk(5502): at libcore.io.IoBridge.connectErrno(IoBridge.java:159)
09-07 09:35:25.636: W/Appboy.bo.app.hk(5502): at libcore.io.IoBridge.connect(IoBridge.java:112)
09-07 09:35:25.636: W/Appboy.bo.app.hk(5502): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
09-07 09:35:25.636: W/Appboy.bo.app.hk(5502): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:460)
09-07 09:35:25.636: W/Appboy.bo.app.hk(5502): at java.net.Socket.connect(Socket.java:832)
09-07 09:35:25.636: W/Appboy.bo.app.hk(5502): at libcore.net.http.HttpConnection.(HttpConnection.java:76)
09-07 09:35:25.636: W/Appboy.bo.app.hk(5502): at libcore.net.http.HttpConnection.(HttpConnection.java:50)
09-07 09:35:25.636: W/Appboy.bo.app.hk(5502): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
09-07 09:35:25.636: W/Appboy.bo.app.hk(5502): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
09-07 09:35:25.636: W/Appboy.bo.app.hk(5502): at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
09-07 09:35:25.636: W/Appboy.bo.app.hk(5502): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:315)
09-07 09:35:25.636: W/Appboy.bo.app.hk(5502): at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:461)
09-07 09:35:25.636: W/Appboy.bo.app.hk(5502): at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:442)
09-07 09:35:25.636: W/Appboy.bo.app.hk(5502): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:289)
09-07 09:35:25.636: W/Appboy.bo.app.hk(5502): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:239)
09-07 09:35:25.636: W/Appboy.bo.app.hk(5502): at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80)
09-07 09:35:25.636: W/Appboy.bo.app.hk(5502): at libcore.net.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:188)
09-07 09:35:25.636: W/Appboy.bo.app.hk(5502): at libcore.net.http.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:281)
09-07 09:35:25.636: W/Appboy.bo.app.hk(5502): at bo.app.ko.b(SourceFile:121)
09-07 09:35:25.636: W/Appboy.bo.app.hk(5502): ... 9 more

Fatal Exception: java.lang.RuntimeException

Fatal Exception: java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Caused by java.lang.RuntimeException: bad array lengths
at android.os.Parcel.readIntArray(Parcel.java:827)
at android.app.INotificationManager$Stub$Proxy.enqueueNotificationWithTag(INotificationManager.java:321)
at android.app.NotificationManager.notify(NotificationManager.java:136)
at android.support.v4.app.NotificationManagerCompatEclair.postNotification(NotificationManagerCompatEclair.java:30)
at android.support.v4.app.NotificationManagerCompat$ImplEclair.postNotification(NotificationManagerCompat.java:152)
at android.support.v4.app.NotificationManagerCompat.notify(NotificationManagerCompat.java:225)
at com.appboy.AppboyGcmReceiver.handleAppboyGcmMessage(AppboyGcmReceiver.java:132)
at com.appboy.AppboyGcmReceiver$HandleAppboyGcmMessageTask.doInBackground(AppboyGcmReceiver.java:168)
at com.appboy.AppboyGcmReceiver$HandleAppboyGcmMessageTask.doInBackground(AppboyGcmReceiver.java:156)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)

java.lang.RuntimeException: Unknown exception code: 1 msg null

We are having this issue on specific devices such as Lenovo A6000 or A680 ROW (Android v4.4.4, v4.2.2).

Here is the crash log:

Caused by: java.lang.RuntimeException: Unknown exception code: 1 msg null
at android.os.Parcel.readException(Parcel.java:1477)
at android.os.Parcel.readException(Parcel.java:1419)
at android.app.ActivityManagerProxy.checkPermission(ActivityManagerNative.java:3457)
at android.app.ContextImpl.checkPermission(ContextImpl.java:1686)
at android.app.ContextImpl.checkCallingOrSelfPermission(ContextImpl.java:1712)
at android.content.ContextWrapper.checkCallingOrSelfPermission(ContextWrapper.java:555)
at bo.app.bq.(SourceFile:52)
at bo.app.ei.(SourceFile:103)
at com.appboy.Appboy.(SourceFile:324)
at com.appboy.Appboy.getInstance(SourceFile:133)

We are using Appboy 1.6.+ library.

We are not sure using latest library can resolve the issue reported above. Please provide us your feedback.

Thanks,
Sanjay

Upgrade to 1.19.0, APPBOY_ACTION_IS_CUSTOM_ACTION_KEY can't be found

I just upgraded appboy to 1.19.0. Used to have the following code:

if (intent.getBooleanExtra(Constants.APPBOY_ACTION_IS_CUSTOM_ACTION_KEY, false)) { //Toast.makeText(, "You clicked a Droidboy custom action!", Toast.LENGTH_LONG).show(); } else {

now it says "APPBOY_ACTION_IS_CUSTOM_ACTION_KEY" can't be found.

NullPointerException when starting an Activity that implements iEventSubscriber

when trying to navigate into an Activity that implements IEventSubscriber I get a crash with the following logs:

02-15 15:38:34.146: W/dalvikvm(24719): threadid=36: thread exiting with uncaught exception (group=0x418afc08)
02-15 15:38:34.151: W/System.err(24719): java.lang.NullPointerException
02-15 15:38:34.151: W/System.err(24719):    at com.my.package.MyActivity.trigger(SourceFile:103)
02-15 15:38:34.151: W/System.err(24719):    at bo.app.az.run(SourceFile:266)
02-15 15:38:34.151: W/System.err(24719):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
02-15 15:38:34.151: W/System.err(24719):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
02-15 15:38:34.151: W/System.err(24719):    at java.lang.Thread.run(Thread.java:841)

line#103 is the the first line of the class, and this looks like an issue on the Appboy SDK side of things.

Failed to open database '/data/data/com.my.packagename/databases/appboy.db'

Device: Samsung Galaxy Note 4
OS: 5.1.1
Library version: 1.13.3

this happens multiple times in our crash logs and I'm not sure what to do in order to fix this

06-07 11:51:23.235: E/SQLiteDatabase(32099): Failed to open database '/data/data/com.my.packagename/databases/appboy.db'.
06-07 11:51:23.235: E/SQLiteDatabase(32099): android.database.sqlite.SQLiteDatabaseLockedException: database is locked (code 5): , while compiling: PRAGMA journal_mode
06-07 11:51:23.235: E/SQLiteDatabase(32099): #################################################################
06-07 11:51:23.235: E/SQLiteDatabase(32099): Error Code : 5 (SQLITE_BUSY)
06-07 11:51:23.235: E/SQLiteDatabase(32099): Caused By : The database file is locked.
06-07 11:51:23.235: E/SQLiteDatabase(32099):    (database is locked (code 5): , while compiling: PRAGMA journal_mode)
06-07 11:51:23.235: E/SQLiteDatabase(32099): #################################################################
06-07 11:51:23.235: E/SQLiteDatabase(32099):    at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
06-07 11:51:23.235: E/SQLiteDatabase(32099):    at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1093)
06-07 11:51:23.235: E/SQLiteDatabase(32099):    at android.database.sqlite.SQLiteConnection.executeForString(SQLiteConnection.java:804)
06-07 11:51:23.235: E/SQLiteDatabase(32099):    at android.database.sqlite.SQLiteConnection.setJournalMode(SQLiteConnection.java:490)
06-07 11:51:23.235: E/SQLiteDatabase(32099):    at android.database.sqlite.SQLiteConnection.setWalModeFromConfiguration(SQLiteConnection.java:464)
06-07 11:51:23.235: E/SQLiteDatabase(32099):    at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:363)
06-07 11:51:23.235: E/SQLiteDatabase(32099):    at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:228)
06-07 11:51:23.235: E/SQLiteDatabase(32099):    at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:512)
06-07 11:51:23.235: E/SQLiteDatabase(32099):    at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:206)
06-07 11:51:23.235: E/SQLiteDatabase(32099):    at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:178)
06-07 11:51:23.235: E/SQLiteDatabase(32099):    at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:908)
06-07 11:51:23.235: E/SQLiteDatabase(32099):    at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:878)
06-07 11:51:23.235: E/SQLiteDatabase(32099):    at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:699)
06-07 11:51:23.235: E/SQLiteDatabase(32099):    at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:1585)
06-07 11:51:23.235: E/SQLiteDatabase(32099):    at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:283)
06-07 11:51:23.235: E/SQLiteDatabase(32099):    at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223)
06-07 11:51:23.235: E/SQLiteDatabase(32099):    at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
06-07 11:51:23.235: E/SQLiteDatabase(32099):    at bo.app.fa.c(SourceFile:48)
06-07 11:51:23.235: E/SQLiteDatabase(32099):    at bo.app.fa.b(SourceFile:166)
06-07 11:51:23.235: E/SQLiteDatabase(32099):    at bo.app.fa.a(SourceFile:61)
06-07 11:51:23.235: E/SQLiteDatabase(32099):    at bo.app.eq.run(SourceFile:31)
06-07 11:51:23.235: E/SQLiteDatabase(32099):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
06-07 11:51:23.235: E/SQLiteDatabase(32099):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
06-07 11:51:23.235: E/SQLiteDatabase(32099):    at java.lang.Thread.run(Thread.java:818)

In-app messages vs Original in-app messages

In terms of SDK usage and receiving in-app messages, is there a difference between in-app messages and (the deprecated) original in-app messages?

The original in-app messages work fine, but the regular in-app messages are not displaying at all. I tried the latest 1.15.3 SDK version as well.

Also just curious why original in-app messages are being deprecated since it seems they have more flexibility in terms of delivery options. Thanks!

Allow switching configurations multiple times at runtime

We have an internal build flavor which allows switching environments at runtime (e.g. QA, staging, production). For every environment we have a separate project at Appboy. Right now the Appboy class caches a singleton instance which reads most of the configuration settings from XML. It would be great to have some sort of initializer method which could re-initiate the Appboy instance, (optionally) taking into account configurations which are currently only provided via XML, for example:

Appboy.initWith(Configuration.builder()
    .setApiKey(...)
    .setGcmRegistrationEnabled(...)
    .setGcmSenderId(...)
    .build());

thoughts?

Caused by java.lang.RuntimeException

Thank you.
I will update appboy version 1.15.0;


Appboy : 1.14.1

Crashlytics - plaintext stacktrace downloaded by pinkred at Tue, 13 Sep 2016 07:15:51 GMT

URL: https://fabric.io/daily/android/apps/com.twoheart.dailyhotel/issues/57d7a7770aeb16625b2930fd/sessions/57d60c5101e500012e148ffef1a19ecd

Organization: DAILY

Platform: android

Application: 데일리호텔

Version: 1.9.4 (94)

Bundle Identifier: com.twoheart.dailyhotel

Issue #: 1209

Issue ID: 57d7a7770aeb16625b2930fd

Session ID: 57d60c5101e500012e148ffef1a19ecd

Date: 2016-09-12T02:00:52Z

OS Version: 4.4.2

Device: LG-F200L

RAM Free: 30.2%

Disk Free: 6.2%

#0. Crashed: AsyncTask #3: 0 0 0x0000000000000000

   at android.os.AsyncTask$3.done(AsyncTask.java:300)
   at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
   at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
   at java.util.concurrent.FutureTask.run(FutureTask.java:242)
   at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
   at java.lang.Thread.run(Thread.java:841)

Fatal Exception: java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Caused by java.lang.RuntimeException: bad array lengths
at android.os.Parcel.readIntArray(Parcel.java:827)
at android.app.INotificationManager$Stub$Proxy.enqueueNotificationWithTag(INotificationManager.java:321)
at android.app.NotificationManager.notify(NotificationManager.java:136)
at android.support.v4.app.NotificationManagerCompat$ImplBase.postNotification(NotificationManagerCompat.java:179)
at android.support.v4.app.NotificationManagerCompat.notify(NotificationManagerCompat.java:290)
at com.appboy.AppboyGcmReceiver.handleAppboyGcmMessage(AppboyGcmReceiver.java:133)
at com.appboy.AppboyGcmReceiver$HandleAppboyGcmMessageTask.doInBackground(AppboyGcmReceiver.java:169)
at com.appboy.AppboyGcmReceiver$HandleAppboyGcmMessageTask.doInBackground(AppboyGcmReceiver.java:157)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
#0. Crashed: AsyncTask #3: 0 0 0x0000000000000000

   at android.os.AsyncTask$3.done(AsyncTask.java:300)
   at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
   at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
   at java.util.concurrent.FutureTask.run(FutureTask.java:242)
   at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
   at java.lang.Thread.run(Thread.java:841)

#1. Binder_2

   at dalvik.system.NativeStart.run(NativeStart.java)

#2. Crashlytics Exception Handler1

   at dalvik.system.VMStack.getThreadStackTrace(VMStack.java)
   at java.lang.Thread.getStackTrace(Thread.java:579)
   at java.lang.Thread.getAllStackTraces(Thread.java:521)
   at com.crashlytics.android.core.CrashlyticsUncaughtExceptionHandler.writeSessionEvent(CrashlyticsUncaughtExceptionHandler.java:1054)
   at com.crashlytics.android.core.CrashlyticsUncaughtExceptionHandler.writeFatal(CrashlyticsUncaughtExceptionHandler.java:807)
   at com.crashlytics.android.core.CrashlyticsUncaughtExceptionHandler.handleUncaughtException(CrashlyticsUncaughtExceptionHandler.java:271)
   at com.crashlytics.android.core.CrashlyticsUncaughtExceptionHandler.access$100(CrashlyticsUncaughtExceptionHandler.java:55)
   at com.crashlytics.android.core.CrashlyticsUncaughtExceptionHandler$5.call(CrashlyticsUncaughtExceptionHandler.java:247)
   at com.crashlytics.android.core.CrashlyticsUncaughtExceptionHandler$5.call(CrashlyticsUncaughtExceptionHandler.java:244)
   at java.util.concurrent.FutureTask.run(FutureTask.java:237)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
   at io.fabric.sdk.android.services.common.ExecutorUtils$1$1.onRun(ExecutorUtils.java:75)
   at io.fabric.sdk.android.services.common.BackgroundPriorityRunnable.run(BackgroundPriorityRunnable.java:30)
   at java.lang.Thread.run(Thread.java:841)

#3. OkHttp ConnectionPool

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor(Thread.java:1205)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:197)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2056)
   at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:435)
   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
   at java.lang.Thread.run(Thread.java:841)

#4. Thread-3375

   at java.lang.Object.wait(Object.java)
   at java.lang.Object.wait(Object.java:364)
   at com.google.ads.conversiontracking.e$b.run(SourceFile:159)
   at java.lang.Thread.run(Thread.java:841)

#5. Thread-3329

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor(Thread.java:1205)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2017)
   at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:510)
   at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:90)

#6. pool-7-thread-1

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor(Thread.java:1205)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2017)
   at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:410)
   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
   at java.lang.Thread.run(Thread.java:841)

#7. bt #2

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor(Thread.java:1205)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2017)
   at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:410)
   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
   at java.lang.Thread.run(Thread.java:841)

#8. Compiler

   at dalvik.system.NativeStart.run(NativeStart.java)

#9. Answers Events Handler1

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor(Thread.java:1205)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:197)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2056)
   at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1062)
   at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:778)
   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
   at io.fabric.sdk.android.services.common.ExecutorUtils$1$1.onRun(ExecutorUtils.java:75)
   at io.fabric.sdk.android.services.common.BackgroundPriorityRunnable.run(BackgroundPriorityRunnable.java:30)
   at java.lang.Thread.run(Thread.java:841)

#10. pool-17-thread-1

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor(Thread.java:1205)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:197)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2056)
   at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1062)
   at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:778)
   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
   at java.lang.Thread.run(Thread.java:841)

#11. Binder_3

   at dalvik.system.NativeStart.run(NativeStart.java)

#12. Thread-3328

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor(Thread.java:1205)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2017)
   at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:510)
   at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:90)

#13. bt #3

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor(Thread.java:1205)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2017)
   at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:410)
   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
   at java.lang.Thread.run(Thread.java:841)

#14. GC

   at dalvik.system.NativeStart.run(NativeStart.java)

#15. Queue

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor(Thread.java:1205)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2017)
   at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:510)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.performOperation(DependencyPriorityBlockingQueue.java:197)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.get(DependencyPriorityBlockingQueue.java:236)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:65)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:46)
   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
   at java.lang.Thread.run(Thread.java:841)

#16. pool-4-thread-1

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor(Thread.java:1205)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2017)
   at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:410)
   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
   at java.lang.Thread.run(Thread.java:841)

#17. FinalizerWatchdogDaemon

   at java.lang.VMThread.sleep(VMThread.java)
   at java.lang.Thread.sleep(Thread.java:1013)
   at java.lang.Thread.sleep(Thread.java:995)
   at java.lang.Daemons$FinalizerWatchdogDaemon.sleepFor(Daemons.java:249)
   at java.lang.Daemons$FinalizerWatchdogDaemon.waitForFinalization(Daemons.java:259)
   at java.lang.Daemons$FinalizerWatchdogDaemon.run(Daemons.java:213)
   at java.lang.Thread.run(Thread.java:841)

#18. Thread-3327

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor(Thread.java:1205)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2017)
   at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:510)
   at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:90)

#19. AsyncTask #1

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor(Thread.java:1205)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2017)
   at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:410)
   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
   at java.lang.Thread.run(Thread.java:841)

#20. measurement-1

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor(Thread.java:1205)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2017)
   at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:410)
   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
   at java.lang.Thread.run(Thread.java:841)
   at com.google.android.gms.analytics.zzi$zzc.run(Unknown Source)

#21. FinalizerDaemon

   at java.lang.Object.wait(Object.java)
   at java.lang.Object.wait(Object.java:401)
   at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:102)
   at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:73)
   at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:170)
   at java.lang.Thread.run(Thread.java:841)

#22. Thread-3326

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor(Thread.java:1205)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2017)
   at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:510)
   at com.android.volley.CacheDispatcher.run(CacheDispatcher.java:90)

#23. AsyncTask #4

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor(Thread.java:1205)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2017)
   at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:410)
   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
   at java.lang.Thread.run(Thread.java:841)

#24. Queue

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor(Thread.java:1205)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2017)
   at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:510)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.performOperation(DependencyPriorityBlockingQueue.java:197)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.get(DependencyPriorityBlockingQueue.java:236)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:65)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:46)
   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
   at java.lang.Thread.run(Thread.java:841)

#25. Signal Catcher

   at dalvik.system.NativeStart.run(NativeStart.java)

#26. pool-11-thread-1

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor(Thread.java:1205)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:197)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2056)
   at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1062)
   at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:778)
   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
   at java.lang.Thread.run(Thread.java:841)

#27. bt #1

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor(Thread.java:1205)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2017)
   at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:410)
   at bo.app.y.b(SourceFile:97)
   at bo.app.q.run(SourceFile:141)
   at java.lang.Thread.run(Thread.java:841)

#28. pool-12-thread-1

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor(Thread.java:1205)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2017)
   at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1050)
   at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:778)
   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
   at java.lang.Thread.run(Thread.java:841)

#29. CookieSyncManager

   at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
   at android.os.MessageQueue.next(MessageQueue.java:138)
   at android.os.Looper.loop(Looper.java:123)
   at android.webkit.WebSyncManager.run(WebSyncManager.java:89)
   at android.webkit.CookieSyncManager.run(CookieSyncManager.java:58)
   at java.lang.Thread.run(Thread.java:841)

#30. main

   at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
   at android.os.MessageQueue.next(MessageQueue.java:138)
   at android.os.Looper.loop(Looper.java:123)
   at android.app.ActivityThread.main(ActivityThread.java:5129)
   at java.lang.reflect.Method.invokeNative(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:515)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:606)
   at dalvik.system.NativeStart.main(NativeStart.java)

#31. Measurement Worker

   at java.lang.Object.wait(Object.java)
   at java.lang.Object.wait(Object.java:401)
   at com.google.android.gms.measurement.internal.zzw$zzd.run(Unknown Source)

#32. pool-10-thread-1

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor(Thread.java:1205)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2017)
   at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:410)
   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
   at java.lang.Thread.run(Thread.java:841)

#33. Thread-3330

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor(Thread.java:1205)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2017)
   at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:510)
   at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:90)

#34. pool-6-thread-1

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor(Thread.java:1205)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2017)
   at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:410)
   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
   at java.lang.Thread.run(Thread.java:841)

#35. ReferenceQueueDaemon

   at java.lang.Object.wait(Object.java)
   at java.lang.Object.wait(Object.java:364)
   at java.lang.Daemons$ReferenceQueueDaemon.run(Daemons.java:130)
   at java.lang.Thread.run(Thread.java:841)

#36. AsyncTask #3

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor(Thread.java:1205)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
   at java.util.concurrent.FutureTask.awaitDone(FutureTask.java:400)
   at java.util.concurrent.FutureTask.get(FutureTask.java:162)
   at com.crashlytics.android.core.CrashlyticsExecutorServiceWrapper.executeSyncLoggingException(CrashlyticsExecutorServiceWrapper.java:47)
   at com.crashlytics.android.core.CrashlyticsUncaughtExceptionHandler.uncaughtException(CrashlyticsUncaughtExceptionHandler.java:244)
   at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)
   at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)

#37. Binder_1

   at dalvik.system.NativeStart.run(NativeStart.java)

#38. Google Conversion SDK

   at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
   at android.os.MessageQueue.next(MessageQueue.java:138)
   at android.os.Looper.loop(Looper.java:123)
   at android.os.HandlerThread.run(HandlerThread.java:61)

#39. AsyncTask #2

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor(Thread.java:1205)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2017)
   at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:410)
   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
   at java.lang.Thread.run(Thread.java:841)

#40. Queue

   at java.lang.Object.wait(Object.java)
   at java.lang.Thread.parkFor(Thread.java:1205)
   at sun.misc.Unsafe.park(Unsafe.java:325)
   at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
   at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2017)
   at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:510)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.performOperation(DependencyPriorityBlockingQueue.java:197)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.get(DependencyPriorityBlockingQueue.java:236)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:65)
   at io.fabric.sdk.android.services.concurrency.DependencyPriorityBlockingQueue.take(DependencyPriorityBlockingQueue.java:46)
   at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
   at java.lang.Thread.run(Thread.java:841)

org.json transitive dependency

Hi,

I'm using the SDK via gradle, and get the following warning:

WARNING: Dependency org.json:json:20090211 is ignored for debug as it may be conflicting with the internal version provided by Android.
         In case of problem, please repackage with jarjar to change the class packages
WARNING: Dependency org.json:json:20090211 is ignored for release as it may be conflicting with the internal version provided by Android.
         In case of problem, please repackage with jarjar to change the class packages

Seems to come via the appboy sdk (via json-assert)

+--- com.appboy:android-sdk-ui:1.4.1
|    +--- com.android.support:support-v4:19.1.0
|    \--- com.appboy:android-sdk-base:1.4.1
|         +--- com.google.guava:guava:17.0
|         +--- com.nostra13.universalimageloader:universal-image-loader:1.9.1
|         +--- com.android.support:support-v4:19.1.0
|         +--- org.skyscreamer:jsonassert:1.2.3
|         |    \--- org.json:json:20090211
|         \--- com.google.code.findbugs:jsr305:2.0.3

Any chance of making org.json provided?

appboy.jar not included when adding Appboy SDK as gradle maven dependency (AAR)

I'm importing the Appboy Android SDK as a dependency of my Android app module as follows:

dependencies {
    ...
    compile 'com.appboy:android-sdk-ui:1.4.+@aar'
    ...
}

but the dependencies related to the appboy.jar in appboy-android-sdk/libs can't be resolved (e.g. com.appboy.Appboy), although the ones included in the library itself are (e.g. com.appboy.AppboyGcmReceiver).

As a workaround I'm including manually the appboy.jar in the libs folder of my Android module, but I'd rather have the dependency resolved automatically through the sdk dependency.

Apply 1.6.2 is polluting the logcat

Appboy 1.6.2 is polluting the logcat. I get hundreds of lines with this.

D/Appboy v1.6.2 .com.appboy.ui.adapters.AppboyListAdapter﹕ Reusing convertView for rendering of item 5
D/Appboy v1.6.2 .com.appboy.ui.adapters.AppboyListAdapter﹕ Using view of type: com.appboy.ui.widget.TextAnnouncementCardView for card at position 5: TextAnnouncementCard{mId='526554a788282dd4d50001e1', mViewed='true', mCreated='1382372519', mUpdated='1382430105', mDescription='test', mTitle='test', mUrl='null', mDomain='null'}
D/Appboy v1.6.2 .com.appboy.ui.adapters.AppboyListAdapter﹕ Already counted impression for card 526554a788282dd4d50001e1
D/Appboy v1.6.2 .com.appboy.ui.adapters.AppboyListAdapter﹕ Reusing convertView for rendering of item 6
D/Appboy v1.6.2 .com.appboy.ui.adapters.AppboyListAdapter﹕ Using view of type: com.appboy.ui.widget.TextAnnouncementCardView for card at position 6: TextAnnouncementCard{mId='52654edee697aeb7530001f1', mViewed='true', mCreated='1382371038', mUpdated='1382430105', mDescription='sadsadsadsadsadsad', mTitle='asdsadsadsadasd', mUrl='null', mDomain='null'}
D/Appboy v1.6.2 .com.appboy.ui.adapters.AppboyListAdapter﹕ Already counted impression for card 52654edee697aeb7530001f1
D/Appboy v1.6.2 .com.appboy.ui.adapters.AppboyListAdapter﹕ Reusing convertView for rendering of item 7
D/Appboy v1.6.2 .com.appboy.ui.adapters.AppboyListAdapter﹕ Using view of type: com.appboy.ui.widget.TextAnnouncementCardView for card at position 7: TextAnnouncementCard{mId='5265446688282d9b910001ca', mViewed='true', mCreated='1382368358', mUpdated='1382368362', mDescription='asdsadsad', mTitle='adssad', mUrl='null', mDomain='null'}
D/Appboy v1.6.2 .com.appboy.ui.adapters.AppboyListAdapter﹕ Already counted impression for card 5265446688282d9b910001ca
D/Appboy v1.6.2 .com.appboy.ui.adapters.AppboyListAdapter﹕ Reusing convertView for rendering of item 8
D/Appboy v1.6.2 .com.appboy.ui.adapters.AppboyListAdapter﹕ Using view of type: com.appboy.ui.widget.TextAnnouncementCardView for card at position 8: TextAnnouncementCard{mId='52654143e697ae55a2000192', mViewed='true', mCreated='1382367555', mUpdated='1382367557', mDescription='BAHHA BAHHHHH', mTitle='BAAAHHHHH', mUrl='null', mDomain='null'}
D/Appboy v1.6.2 .com.appboy.ui.adapters.AppboyListAdapter﹕ Already counted impression for card 52654143e697ae55a2000192
D/Appboy v1.6.2 .com.appboy.ui.adapters.AppboyListAdapter﹕ Reusing convertView for rendering of item 9
D/Appboy v1.6.2 .com.appboy.ui.adapters.AppboyListAdapter﹕ Using view of type: com.appboy.ui.widget.ShortNewsCardView for card at position 9: ShortNewsCard{mId='526008dbe697aeb71f0001f7', mViewed='true', mCreated='1382025435', mUpdated='1382025442', mDescription='Do it... DO IT! DOOO IT NOW!!!', mImageUrl='http://s3.amazonaws.com/appboy-images.com/news_items/images/526008dbe697aeb71f0001f7/5672632ddfdc5f0d741f7745da9d640a05e1c530/ios.png?1382025435', mTitle='DO IT NOW!!', mUrl='http://www.google.com', mDomain='www.google.com'}
D/Appboy v1.6.2 .com.appboy.ui.adapters.AppboyListAdapter﹕ Already counted impression for card 526008dbe697aeb71f0001f7
D/Appboy v1.6.2 .com.appboy.ui.adapters.AppboyListAdapter﹕ Reusing convertView for rendering of item 10
D/Appboy v1.6.2 .com.appboy.ui.adapters.AppboyListAdapter﹕ Using view of type: com.appboy.ui.widget.ShortNewsCardView for card at position 10: ShortNewsCard{mId='5260084ce697ae7ece00010d', mViewed='true', mCreated='1382025292', mUpdated='1382025298', mDescription='This is a test and I will be really happy if this shows up on my feed... ', mImageUrl='http://s3.amazonaws.com/appboy-images.com/news_items/images/5260084ce697ae7ece00010d/c9b51284ac4573efb977405c9d95961384f329f8/ios.png?1382025292', mTitle='Test1', mUrl='null', mDomain='null'}
D/Appboy v1.6.2 .com.appboy.ui.adapters.AppboyListAdapter﹕ Already counted impression for card 5260084ce697ae7ece00010d

Bug in Latest App boy sdk version 1.11.2 ,Every time when i open 'News Feed'

: FATAL EXCEPTION: main
Process: com.theentertainerme.entertainer, PID: 15984
android.view.InflateException: Binary XML file line #8: Error inflating class com.facebook.drawee.view.SimpleDraweeView
at android.view.LayoutInflater.createView(LayoutInflater.java:640)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:813)
at android.view.LayoutInflater.inflate(LayoutInflater.java:511)
at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
at android.view.ViewStub.inflate(ViewStub.java:264)
at com.appboy.ui.widget.BaseCardView.getProperViewFromInflatedStub(BaseCardView.java:271)
at com.appboy.ui.widget.ShortNewsCardView.(ShortNewsCardView.java:37)
at com.appboy.ui.widget.ShortNewsCardView.(ShortNewsCardView.java:27)
at com.appboy.ui.adapters.AppboyListAdapter.getView(AppboyListAdapter.java:109)
at android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.java:232)
at android.widget.AbsListView.obtainView(AbsListView.java:2823)
at android.widget.ListView.measureHeightOfChildren(ListView.java:1290)
at android.widget.ListView.onMeasure(ListView.java:1202)
at android.view.View.measure(View.java:18586)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:728)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:464)
at android.view.View.measure(View.java:18586)
at android.support.v4.widget.SwipeRefreshLayout.onMeasure(SwipeRefreshLayout.java:597)
at android.view.View.measure(View.java:18586)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5827)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.view.View.measure(View.java:18586)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:728)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:464)
at android.view.View.measure(View.java:18586)
at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1489)
at android.view.View.measure(View.java:18586)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5827)
at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:607)
at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onMeasureChild(AppBarLayout.java:1238)
at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:672)
at android.view.View.measure(View.java:18586)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5827)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.view.View.measure(View.java:18586)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5827)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.view.View.measure(View.java:18586)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:728)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:464)
at android.view.View.measure(View.java:18586)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5827)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.support.v7.internal.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:124)
at android.view.View.measure(View.java:18586)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5827)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1435)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:721..

Crash while clicking In-App message button: Android

Hi,

I have integrated latest Appboy version 1.15.3 in my app and I have noticed crash while selecting a button from In-App messages. On click behaviour button is configured to "Redirect to URL".

Due to this crash, I have added the below line in app manifest then it is working without any crash.

But none of the appboy documentation specify adding activity to manifest.

Please check the crash report below.

Fatal Exception: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.app/com.appboy.ui.AppboyWebViewActivity}; have you declared this activity in your AndroidManifest.xml?
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1794)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1512)
at android.app.Activity.startActivityForResult(Activity.java:3930)
at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:48)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:75)
at android.app.Activity.startActivityForResult(Activity.java:3890)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:856)
at android.app.Activity.startActivity(Activity.java:4213)
at android.app.Activity.startActivity(Activity.java:4181)
at com.appboy.ui.actions.WebAction.execute(WebAction.java:34)
at com.appboy.ui.AppboyNavigator.gotoURI(AppboyNavigator.java:46)
at com.appboy.ui.inappmessage.listeners.AppboyInAppMessageViewLifecycleListener.performClickAction(AppboyInAppMessageViewLifecycleListener.java:111)
at com.appboy.ui.inappmessage.listeners.AppboyInAppMessageViewLifecycleListener.performInAppMessageButtonClicked(AppboyInAppMessageViewLifecycleListener.java:91)
at com.appboy.ui.inappmessage.listeners.AppboyInAppMessageViewLifecycleListener.onButtonClicked(AppboyInAppMessageViewLifecycleListener.java:80)
at com.appboy.ui.inappmessage.InAppMessageViewWrapper$3.onClick(InAppMessageViewWrapper.java:248)
at android.view.View.performClick(View.java:5204)
at android.view.View$PerformClick.run(View.java:21155)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5422)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

Issue with proguard optimization and code shrinking

Hello,
We're having issues obfuscating our project with Appboy Android SDK:

Removing unused program classes and class elements...
Original number of program classes: 8648
Final number of program classes: 7011
Optimizing...
Unexpected error while evaluating instruction:
Class = [com/braintreepayments/api/AndroidPay]
Method = [getConnectedApiClient(Landroid/content/Context;)Lcom/google/android/gms/common/api/GoogleApiClient;]
Instruction = [13] invokespecial #53
Exception = [java.lang.IllegalArgumentException](Can't find common super class of [android/content/Context] %28with 2 known super classes%29 and [com/appboy/services/AppboyWearableListenerService] %28with 1 known super classes%29)
Unexpected error while performing partial evaluation:
Class = [com/braintreepayments/api/AndroidPay]
Method = [getConnectedApiClient(Landroid/content/Context;)Lcom/google/android/gms/common/api/GoogleApiClient;]
Exception = [java.lang.IllegalArgumentException](Can't find common super class of [android/content/Context] %28with 2 known super classes%29 and [com/appboy/services/AppboyWearableListenerService] %28with 1 known super classes%29)
Warning: Exception while processing task java.io.IOException: java.lang.IllegalArgumentException: Can't find common super class of [android/content/Context](with 2 known super classes) and [com/appboy/services/AppboyWearableListenerService](with 1 known super classes)

Error message is quite confusing, but eventually I was able to find workaround by adding play-services-wearable dependency to your project:

dependencies
{
// ...
compile 'com.google.android.gms:play-services-ads:8.4.0'
compile 'com.google.android.gms:play-services-gcm:8.4.0'
compile 'com.google.android.gms:play-services-wearable:8.4.0'
compile 'com.appboy:android-sdk-ui:1.13.+'
}`

Leaked closable objects

My app crashes when I run it with the Appboy SDK in StrictMode with .detectLeakedClosableObjects()
This is the output from logcat:

+E/StrictMode(27538): A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
+E/StrictMode(27538): java.lang.Throwable: Explicit termination method 'end' not called
+E/StrictMode(27538): at dalvik.system.CloseGuard.open(CloseGuard.java:184)
+E/StrictMode(27538): at java.util.zip.Inflater.(Inflater.java:82)
+E/StrictMode(27538): at java.util.zip.GZIPInputStream.(GZIPInputStream.java:103)
+E/StrictMode(27538): at java.util.zip.GZIPInputStream.(GZIPInputStream.java:88)
+E/StrictMode(27538): at bo.app.h.a(SourceFile:72)
+E/StrictMode(27538): at bo.app.h.a(SourceFile:52)
+E/StrictMode(27538): at bo.app.h.a(SourceFile:43)
+E/StrictMode(27538): at bo.app.k.a(SourceFile:36)
+E/StrictMode(27538): at bo.app.j.a(SourceFile:36)
+E/StrictMode(27538): at bo.app.db.run(SourceFile:64)
+E/StrictMode(27538): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
+E/StrictMode(27538): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
+E/StrictMode(27538): at java.lang.Thread.run(Thread.java:818)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.