On Android complexity, Kotlin, Google Play Permissions Policy rejections and success. My first Android app story.
My girlfriend likes text messages. I’m not good at sending them. So “there’s an app for that?” Nope. Like any good tech guy, I made one.
The joys of receiving a text message…
How it Starts
By day, I’m, well, your typical IT consultant? I help companies design highly available systems and do IT project management. During my normal workday, I’m planning projects, evaluating planned methods and related, on phone calls, reviewing more plans, and, of course, in video meetings (thank you pandemic :/). The work is rewarding — most days — and I’m good at it, but other days I wonder if I want to continue.
Throughout all of this, my girlfriend enjoys when I send her little text messages throughout the day. The problem I have is, like most guys, I only get really good at my work when I have 2–3 uninterrupted hours to focus on something, and that doesn’t happen nearly as often as I’d like. In addition, when I get really focused, I tend to forget other things, like the people who are important in my life, and I probably don’t take time out to communicate often enough.
So how can I make my girlfriend (and me indirectly) a little happier?
Where Are All the Text Message Automation Apps?!?
I figured there must be an app that can help me automate some of my text messaging. I mean I’m in IT and automation is king! Right? I looked, but I couldn’t find the right app for me. There are a few very popular and feature-rich automation apps, but what I wanted to do just seemed too cumbersome when using them.
How can there not be an app for this? There’s an app for everything! In looking further, I noticed Google took a hatchet to overzealous apps in 2019 and, apparently, collateral damage ensued as the app store is bereft of apps that could help me.
I’ve been meaning to try my hand at writing an Android app and, in reviewing the policy changes they noted, I’d just submit a permissions declaration form. I figured no big deal — what I want to do is obvious — and didn’t think much else of it.
I never realized how wrong I would be.
On Kotlin! Not Java!
I started looking into what would be required to write a modern Android app. Everything was written in Java, but Kotlin was the upstart. As I reviewed Kotlin in more detail, I became impressed with it. With Oracle buying Java (with the primary goal of taxing Google) and not caring about Java itself (obviously this has changed in recent years), they opened the door for Kotlin. While I had experience with other languages, I decided to learn Kotlin in my spare time. The more confident I became with it, the more I started to look forward to writing my first app. Eventually I took my first steps with Android Studio and starter apps.
AndroidX Support Libraries
I descended into the world of Android and started making my first app that “sucks less.” In doing so, I got the full understanding of how bad and complicated Android really is and the steps Google has taken to make it suck a lot less. I started to wrap my head around the various functionalities in the various APIs to make certain my app would run on older releases.
The amount of Android libraries blew my mind when I first saw them. I mean there’s A LOT of them. Some are really great. Until they are not. You go down numerous rabbit holes trying to figure out all the little library nuances depending on the Android version and then you wind up writing tons of code to work around the exceptions. In the end, AndroidX really does make it easier.
RecyclerViews, ViewModels, Rooms, LiveData, Oh My
So much to learn, so little time. As I continued my journey, I dove into “super fun” RecyclerViews and Adapters and I spent WAY too much time on Stack Exchange. I wrapped my head around Room and can’t believe the amount of work Android developers had with SQLite in the past. I still don’t like writing SQL by hand, but it works. I also took enjoyment in watching LiveData make my Views more dynamically magical with little effort.
Eventually, all of Android’s pieces started to come together and I finally had something that could start automating some of my text messaging without crashing too often. Yay.
I Told My Girlfriend I Was Automating Her Text Messages
I figured my girlfriend would be pissed. For months I’ve been dogfooding the app and now she’ll put two and two together. However, when I told her, she was surprised and, well, impressed. She wanted to know more about the app and how it worked. In the weeks that followed, I asked her why she was okay with me doing this. She told me she knew I was busy with work and the app helped make certain she was on my mind and continued to keep communication high between us.
My Dad Needs Surgery
The app was working well for my girlfriend, so why not configure it to work with more people? So, I did and then started automating my texts with my family.
I don’t consider myself a great communicator and my dad is even worse. I added my dad to the app and it started doing its thing. I enjoyed hearing more from my dad and I’m certain he felt the same. A few days went by and I sent an automated “How have you been?” My dad replied back saying he needed to have surgery.
And that was when it hit me. Had it not been for this app, I might not have reached out to my dad and he, more than likely, would not have reached out to me. This little piece of technology just allowed me to be there for my dad when he needed me most. Surely others could benefit from this!
No Play store for you!
Oh, So Many Rejections (Long)
I finally got my app to the point where I wanted to test it on the Play app store. What an exciting moment! I created an account, read every developer policy in detail for way too long (you really need to read everything!) and then received the heralded and boiler plate Rejected email. It said my “Requested permissions do not match core functionality of the app.” I figured no problem. Clearly the reviewer missed something that was obvious to me, so I just need to be a bit clearer.
I couldn’t have been more wrong.
The rejection process went on for months as I made small changes all over the place to “better help the reviewer” see what I already knew. I made countless videos showcasing the core functionality of the app. I also made numerous changes to a lengthy and detailed PHD (Push Here Dummy) “Instructions for review” document that included ample screenshots. I included this to make certain I covered everything that didn’t fit in the more succinct 500-characters or less instructions box that Google provides.
I continued to get more templated Rejected emails.
So, after reaching my wits’ end, I did what every successful Android developer does. I appealed the rejection, only to get a similarly templated rejection reply in return. For another month I’d continue to change something and continue to get Rejected. If Android development wasn’t complicated enough, this permissions process made it seem impossible. After being Rejected so many times, I became dejected with Android development.
In frustration, I decided to try removing all the permissions that provided the core functionality of my app just so that I could see my store listing! And it worked! Google appears to allow perfectly useless apps on the Play store! I used this opportunity to test in-app purchases and then put the required permissions back, only to receive the same Rejected emails.
After a couple of months had passed, I decided to see if there was someone out there that could help me with this. I scoured the Internet and found someone who billed himself as an expert in, amongst other things, “Google Play Store app permissions.” He had a very well written and helpful Medium post and also had an app on the store with similar permissions. I reached out to him and he seemed eager to help. We reviewed my issue and he was confident we’d get approval.
I knew I definitely needed assistance here if my app was going to have any chance of seeing the light of day on the store. A formal contract was drafted and, just like any business contract, I made certain everything I needed from him was in there so there would be no confusion. After he reviewed my final changes, he balked and said he couldn’t do it as it “might be a bit tricky.” We stopped talking shortly thereafter.
I was about to give someone a rather large sum of money to assist me with the Google Play permissions process, but even he knew this challenging task wasn’t worth the coin.
I took some time off from the app again, but, as parts of the world started to win the war against the pandemic, I decided to try my hand again at the Google Play permissions process. I continued to get Rejected and told my girlfriend it was time I gave up, but she encouraged me to keep trying. So I did. This time, I paid extra close attention to the items Google bolded in their emails, and mostly ignored the rest, while making small changes all over the place. Eventually, based on some bolded reply text, I felt I was getting closer and then I received the coveted email.
“Your update is live.”
Holy shit. I (fucking) did it.
Can I now be called an expert in, amongst other things, Google Play Store app permissions?
Where to Now?
I made an app. It might never go anywhere, but I hope it does. I, mostly, enjoyed making it and I proved to myself that I could. I plan to continue to improve this app as I find it, and Kotlin, gratifying and I already have plans for a second unrelated app.
If you are an Android developer or just someone who is getting some benefit from this app, I’d love some feedback on it.
In case you were wondering, my girlfriend and I are still together.
The app is available here.