如何为Android应用付费和免费版本提供两种不同的功能

时间:2019-02-20 18:46:15

标签: android

我有一个免费的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,为我的免费版本创建另一个。 任何帮助表示赞赏

1 个答案:

答案 0 :(得分:1)

您可以通过以下方式执行此操作:

  • 创建一个负责按版本类型获取信息的类(我将称其为InfoRepository,但应根据所加载的数据类型将其命名为更有意义的类)。您将有两个此类的实例:一个在paid文件夹中,另一个在free中。它们都具有getInfo()方法,该方法返回Info对象的列表(例如)。
    • 在免费版本中,通过加载需要从Strings文档中加载的内容并返回该内容来实现getInfo()。 (附带说明:可能值得考虑将数据放入raw文件夹中的json文件中,以便无论数据是付费还是免费的,数据加载都是相同的)
    • 在付费版本中,通过从API加载getInfo()进行解析,然后返回最终结果,以实现MainActivity
  • 在您的main(仅InfoRepository java文件夹中的一个实例)中,创建一个getInfo()类实例,然后调用MainActivity来填充屏幕。这将从免费版本的字符串中加载信息,或者在付费版本中使用API​​。 InfoRepository不在乎数据来自何处,它只是在乎要显示一些数据。每种口味中的InfoRepository类都负责从正确的来源加载它。

一些注意事项:

  • 您可以通过最有意义的任何方式构建Note。我不知道您的用例是什么,但是例如,假设您有一个Score列表,如果用户单击“显示注释”按钮,则会显示该列表,而{{1}如果他们点击“显示得分”按钮,则会显示这些信息。在这种情况下,getNotes()中可能有两种方法,getScores()InfoRepository
  • 鉴于您在查询API的付费版本中,需要注意线程和可能的异步结果。根据您使用的工具,可能要使用回调系统或Deferred对象。