簡體   English   中英

如何為Android應用付費和免費版本提供兩種不同的功能

[英]How to approach two different functionality for android app paid and free version

我有一個免費的Android應用程序,我將添加一些只能通過付費版本才能獲得的功能。 免費的應用程序將數據硬編碼到應用程序中。 通常在strings.xml文件中。 付費版本將從JSON API獲取數據。 比免費應用程序要多得多的數據。 接口將保持不變。 但是單擊某些按鈕時的功能將改變。 我是否需要為每個版本創建兩個MainActivity。 或者,如何通過修改的費用來更改付費版本的功能。 我想這個問題可以歸結為免費和付費版本的軟件設計模式,我正努力弄清楚。 我已經加了

productFlavors {
        lite {
            applicationId "com.sample.appname.lite"
            buildConfigField 'boolean', 'IS_PAID', 'false'
            versionCode 1
            versionName '1.3-free'
        }
        pro {
            applicationId "com.sample.appname.pro"
            buildConfigField 'boolean', 'IS_PAID', 'true'
            versionCode 1
            versionName '1.0-paid'
        }
    }

我在src文件夾下創建了一個免費的付費Java文件夾。 但是不知道我是否需要為付費版本創建一個新的MainActivity,為我的免費版本創建另一個。 任何幫助表示贊賞

您可以通過以下方式執行此操作:

  • 創建一個負責按版本類型獲取信息的類(我將其稱為InfoRepository ,但您應該對它進行某種InfoRepository ,這要考慮到要加載的數據類型)。 您將有該類的兩個實例:一個在paid文件夾中,一個在free文件夾中。 它們都具有getInfo()方法,該方法返回Info對象的列表(例如)。
    • 在免費版本中,通過加載需要從Strings文檔中加載的內容並返回該內容來實現getInfo() (旁注:可能值得考慮將數據放在raw文件夾中的json文件中,以便無論數據是付費還是免費的,數據加載都是相同的)
    • 在付費版本中,通過從API加載getInfo() ,對其進行解析並返回最終結果來實現getInfo()
  • 在您的MainActivity (在main Java文件夾中只有一個實例),創建一個InfoRepository類實例並調用getInfo()來填充屏幕。 這將從免費版本的字符串中加載信息,或者在付費版本中使用API​​。 MainActivity不在乎數據來自何處,它只是在乎要顯示一些數據。 每種口味中的InfoRepository類都負責從正確的源中加載它。

一些注意事項:

  • 您可以通過最有意義的任何方式來構建InfoRepository 我不知道您的用例是什么,但是例如,假設您有一個Note列表,如果用戶單擊“顯示筆記”按鈕,則會顯示該列表;如果有一個Score ,則顯示一個Score列表。在“顯示分數”按鈕上。 在這種情況下,你可以有兩種方法, getNotes()getScores()的內InfoRepository
  • 鑒於在付費版本中您正在查詢API,因此您在使用線程和可能的異步結果時需要格外小心。 根據所使用的工具,您可能需要使用回調系統或Deferred對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM