Recently I was at Droidcon London catching up ✨ in-person ✨ with Android developers and longtime friends. The event was well-run, full of engaging technical talks and great conversations.
One particular conversation I had was with an Android + iOS app developer who found a way to sustainably freelance by launching multiple revenue streams: Ads, In App Purchasing (IAP), and selling online programming courses (...a dream of mine to do someday when I have the time... 😉⏳ ).
He was building everything from games to utility apps and was confronted with a recurring issue: The app user base would steadily grow until hitting a plateau after a variable amount of time (months). Once new interest peaked, less new users were discovering and installing his apps.
While I don't pretend to have a magic solution, I shared a suggestion based on a talk my colleague and I delivered hours earlier:
Launch your app in multiple app stores.
...and in my role as a Developer Advocate, I have to recommend these apps should definitely be the Amazon Appstore! 🥳📲
The Amazon Appstore offers an active global user base and one of the coolest features: existing apps can be installed directly on Windows 11.
What if your app could now reach millions of new desktop/laptop Windows 11 users around the world?
This developer then asked the standard software engineering questions:
"Yes but...
Are all the features I already developed going to be supported on the new system? How much effort is involved to port the app?"
The classic yet honest answer to this is:
"it depends!" 🤷
So let's dive in.
Porting Android apps to Amazon Appstore
Amazon Appstore runs on Fire OS devices (Fire Tablets, Fire TVs...) and can be installed on directly on Android devices. Fire OS is based on AOSP (Android Open Source Project) and without Google Play Services running on it. So for developers with app features dependent on Google Play Services, some migration work is needed.
For example, if your app relies on Firebase Cloud Messaging (FCM) for push notifications, this should be updated. Specifically in Fire OS, push notifications function through Amazon Device Messaging (ADM). Integrating the ADM SDK will allow your app to run smoothly in Fire OS.
To support both FCM and ADM, the Amazon Appstore team also created Amazon Appstore Abstraction Library A3L - an SDK to reduce porting time and code maintenance needs for notifications and messaging.
Integrating your app with A3L
Step 0: Download the A3L SDK
Download the A3L SDK from our developer documentation
Afterwards, make sure to add the downloaded .aar to the app/libs directory of your Android project.
Step 1: Add the A3L dependency to your project
After this, you will have to add the dependency on this file of the project. Open the build.gradle
file and insert the following line:
dependencies {
...
implementation files("libs/A3L-Messaging-1.0.0.aar")
}
Step 2: Obtain the credentials
Similar to what you already have done with Firebase through the google-services.json
file, you have to obtain ADM credentials in order to uniquely identify your app the web service.
Once you have credentials, follow the instructions in our ADM docs.
Step 3: Define the messaging service
Now you will should create the Service that listens for messages and tokens from ADM.
To do this, you will have to extend the class A3LMessagingService
and override these 2 methods:
class MyA3LMessagingService : A3LMessagingService() {
override fun onMessageReceived(context: Context, remoteMessage: RemoteMessage) {
Log.d(TAG, "From: ${remoteMessage.from}")
}
override fun onNewToken(context: Context, token: String) {
Log.d(TAG, "Refreshed token: $token")
}
To Enable this service you will need to declare in the AndroidManifest.xml
:
<application>
<receiver android:name=".MyA3LMessagingService"
android:exported="false"
android:enabled="true">
<intent-filter>
<action android:name="com.amazon.A3L.messaging.intent.REGISTRATION"/>
<action android:name="com.amazon.A3L.messaging.intent.MESSAGE"/>
</intent-filter>
</receiver>
<meta-data android:name="com.a3l.clsName"
android:value="com.example.mya3lapp.MyA3LMessagingService" />
</application>
Step 4: Initialize the Service
Now you define the callback MainActivity
to handle the registration phase and initialize the service:
class MainActivity : AppCompatActivity() {
private val TAG = "MainActivity"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val onInitCallback: OnInitCallback = object : OnInitCallback() {
override fun onReady(initCallbackResponse: InitCallbackResponse) {
if (initCallbackResponse.isSuccessFul) {
Log.d(TAG, "Device Id: " + initCallbackResponse.token)
} else {
Log.d(
TAG, "Registration failed with Error: " +
initCallbackResponse.errorMessage
)
}
}
}
A3LMessaging.init(applicationContext, onInitCallback)
if (savedInstanceState == null) {
supportFragmentManager.beginTransaction()
.replace(R.id.container, EggTimerFragment.newInstance())
.commitNow()
}
}
}
and with that update, you are all set! Let's see how to test this implementation.
Testing
You have three ways to test this integration:
- The Web Console
- Server-side scripts
- Solution-specific APIs
For our use-case, the easiest way is with the Amazon Appstore ADM Web Console. I suggest running the app on a Fire Tablet in order get the Device registration ID.
This will be available in the onReady
of the onInitCallback
.
Copy the ID and head to the Appstore ADM Web Console:
Select your target app to test and enter the Client ID and secret for your app. (You should have these saved from when you obtained your ADM credentials)
In the Device registration ID field, enter the value previously saved.
- Choose Notification message
- Populate the fields Notification Title and Body content
- Click Send test message
You should then receive an app notifications appearing on your Fire Device.
For the other ways of testing, you can check the official documentation.
Wrap up
I hope the Droidcon developer I spoke with and you are able to quickly launch existing apps for Amazon Appstore.
Using A3L will allow your app to support both FCM and ADM. If you want to try an A3L sample project with support for both Firebase Cloud Messaging and Amazon Device Messaging, check out my recent repo on GitHub and our related documentation.
Make sure to review the full pre-submission checklist when you’re ready to submit your app in the Amazon Appstore.
Stay connected
For the latest Amazon Appstore developer news, product releases, tutorials, and more:
📣 Follow @AmazonAppDev and our team on Twitter
📺 Subscribe to our Youtube channel
- 📧 Sign up for the Developer Newsletter