This was happening when launching from within the editor, publishing and deploying using the install script, and on the Google Play Store. I found a few posts talking about the storage issue and it sounds like that might only be related to certain phones which is what I am using to test.
The problem ended up being that Android requires you to request at run time the permissions to access the camera and storage when using SDK 23 or higher. The Google Play store requires a minimum target SDK of 26 so the app was never requesting permission since it has to be added in code and not just the manifest like it use to be prior to SDK 23.
I was on the right track but didn’t realize the blueprint node Request Android Permissions did the request asynchronously so the app wasn’t waiting for the user to make a choice before continuing initializing the plugin. That blueprint node returns a callback proxy object that allows you to bind an event. Calling the ARToolkit plugin’s Init function and setup in my bound event was then throwing an error saying the plugin code needed to run on the game thread.
I got it all working by using a boolean variable to determine if the user had given all of the proper permissions yet and then have it check on the tick event. Once a user gives permission the next to tick allows the plugin init code to run once and it’s in the correct thread so it works.