Setup Cloud Database Support & In-app Purchases for my Android Studio / Kotlin App (using AWS DynamoDB)
Budget: $250 – $750 USD
I need to add records, ideally through some sort of interactive, manual process. And read records from the app. It's written in Kotlin. My AS environment is fully updated and current. I'm running Windows 10.
The database will be tiny. Maybe a couple of ancillary tables, but pretty much one main table. No foreign keys whatsoever. This main table probably never grows beyond 1000 records. Each record will be under 20k, including the "main" field with 1k-20k of text in it.
I'm fully signed up for AWS and have set up some stuff there already.
I have been writing software (Windows programs, using OOP) for 30+ years. This is, however, my first mobile app.
Finally, I'd like to talk about the ways in which I might store user data (progress and preferences) in the event they might reinstall the app. I'm initially interested in an answer to the question: Will doing this become the most expensive part of maintaining this cloud database?
I believe this should be simple and straightforward for anyone who's done it before. I am looking to leverage your knowledge and experience and set this up quickly.
###
I'd like to do all this with a simple, new, Empty Activity app & take notes so that I can repeat the process later.
###
WRITE ACCESS (external to the app):
For the main table, when new Puzzle Packs are created, I'd like to be able to go to a "console" and add the records manually - they'll be few and far between. (I was able to do this using the AWS Amplify console.)
READ ACCESS (from within the app):
I'll need to "read" records based on a primary (string) key.
ONE OPEN ISSUE:
The app periodically checks for NEW Puzzle Packs. Found ones will be added (just "sales info" - not the puzzles) to the local database.
Since I'm in a non-SQL database, I can't
SELECT * FROM table
WHERE id > latest-id-on-user's-device
and
I do not want to download puzzle data yet.
My thinking here is to:
-Create a table with one value in it:
LATEST-PACK-ID (assume these will be consecutive: P000001, P000002, etc)
-Use this in the getNewAvailablePacks function
###
Overall list of things I (think) I know we'll need to cover, what I (think) I know about them so far, and some specifics about how I'd like this code structured:
* IAM:
Create one user for the app (is this how apps are built? one user for every instance of this app installed anywhere), with the appropriate settings.
* DynamoDB:
I'd like to code READ, ADD and UPDATE records. (Only READ is covered in the routines listed below.)
* Gradle:
Obviously, we will need to add all required dependencies.
* Coroutines:
Use for the routines listed below. Although getPurchasedPackById() can run synchronously.
* Needed Routines:
fun getLatestAvailablePack(): String
fun getNewAvailablePacks(latest-id-on-user's-device: String): List
fun getPackSalesInfoById(id: String)
fun getPurchasedPackById(id: String)
* In-app Purchases:
Three kinds:
(1) Puzzle Pack
(2) Enable Feature
(3) Coins to Spend
I need this functionality inside my app & I need these items to be restored upon re-install.
My concern with re-installs is: What happens if a user has purchased 50 coins, spends 20 of them and then re-installs the app?
###
A FEW FINAL POINTS:
* This is not really a development project. It's helping me remotely to set up (add) cloud database functionality into an already existing app - although, again, I'd want us to do this with a blank app so that I learn how to do this, and can do it on my own again and again.
* There's still this "open issue" regarding user data that I might want to store as well.
* I'm thinking Chrome Remote Desktop & [The Administrator removed this message for encouraging communication outside Freelancer.com. which breaches our Terms and Conditions.]. I'm open to something else if it makes things easier/better.
###
If there is anything I can do ahead of time to prepare for this, I am happy to do so. Also, if you want to write code ahead of time that we can just transfer/paste during our time together, this is fine. But remember, I'm going to need to understand it.
The database will be tiny. Maybe a couple of ancillary tables, but pretty much one main table. No foreign keys whatsoever. This main table probably never grows beyond 1000 records. Each record will be under 20k, including the "main" field with 1k-20k of text in it.
I'm fully signed up for AWS and have set up some stuff there already.
I have been writing software (Windows programs, using OOP) for 30+ years. This is, however, my first mobile app.
Finally, I'd like to talk about the ways in which I might store user data (progress and preferences) in the event they might reinstall the app. I'm initially interested in an answer to the question: Will doing this become the most expensive part of maintaining this cloud database?
I believe this should be simple and straightforward for anyone who's done it before. I am looking to leverage your knowledge and experience and set this up quickly.
###
I'd like to do all this with a simple, new, Empty Activity app & take notes so that I can repeat the process later.
###
WRITE ACCESS (external to the app):
For the main table, when new Puzzle Packs are created, I'd like to be able to go to a "console" and add the records manually - they'll be few and far between. (I was able to do this using the AWS Amplify console.)
READ ACCESS (from within the app):
I'll need to "read" records based on a primary (string) key.
ONE OPEN ISSUE:
The app periodically checks for NEW Puzzle Packs. Found ones will be added (just "sales info" - not the puzzles) to the local database.
Since I'm in a non-SQL database, I can't
SELECT * FROM table
WHERE id > latest-id-on-user's-device
and
I do not want to download puzzle data yet.
My thinking here is to:
-Create a table with one value in it:
LATEST-PACK-ID (assume these will be consecutive: P000001, P000002, etc)
-Use this in the getNewAvailablePacks function
###
Overall list of things I (think) I know we'll need to cover, what I (think) I know about them so far, and some specifics about how I'd like this code structured:
* IAM:
Create one user for the app (is this how apps are built? one user for every instance of this app installed anywhere), with the appropriate settings.
* DynamoDB:
I'd like to code READ, ADD and UPDATE records. (Only READ is covered in the routines listed below.)
* Gradle:
Obviously, we will need to add all required dependencies.
* Coroutines:
Use for the routines listed below. Although getPurchasedPackById() can run synchronously.
* Needed Routines:
fun getLatestAvailablePack(): String
fun getNewAvailablePacks(latest-id-on-user's-device: String): List
fun getPackSalesInfoById(id: String)
fun getPurchasedPackById(id: String)
* In-app Purchases:
Three kinds:
(1) Puzzle Pack
(2) Enable Feature
(3) Coins to Spend
I need this functionality inside my app & I need these items to be restored upon re-install.
My concern with re-installs is: What happens if a user has purchased 50 coins, spends 20 of them and then re-installs the app?
###
A FEW FINAL POINTS:
* This is not really a development project. It's helping me remotely to set up (add) cloud database functionality into an already existing app - although, again, I'd want us to do this with a blank app so that I learn how to do this, and can do it on my own again and again.
* There's still this "open issue" regarding user data that I might want to store as well.
* I'm thinking Chrome Remote Desktop & [The Administrator removed this message for encouraging communication outside Freelancer.com. which breaches our Terms and Conditions.]. I'm open to something else if it makes things easier/better.
###
If there is anything I can do ahead of time to prepare for this, I am happy to do so. Also, if you want to write code ahead of time that we can just transfer/paste during our time together, this is fine. But remember, I'm going to need to understand it.