Android 应用程序 - 精简版或付费版

标签 android android-version

我正在使用单一源库开发一个 Android 应用程序。我希望提交免费和付费版本的应用程序。对于免费版本,我计划禁用一些功能并为付费版本提供更多功能。有什么办法可以找到 android 应用程序是免费的还是通过 java 代码付费的?

编辑 1: 在 Windows Phone 中,“App.xaml.cs”文件包含以下方法来识别 Windows Phone 应用程序的免费或付费版本。

private void Application_Launching(object sender, LaunchingEventArgs e)
{
   var license = new Microsoft.Phone.Marketplace.LicenseInformation();
   IsTrial = license.IsTrial();
}

这里的 IsTrail 是返回 true 或 false 的属性。 Android 有什么方法可以检测免费或付费版本吗?

最佳答案

Google Play Services不提供任何 API 来访问与正在运行的应用程序相关的 Google Play 元数据。 Application Licensing可能是一个前进的方向,但用户 Sandy 提到它不能在付费应用程序中使用(虽然听起来很奇怪)。

不过我会建议另一种方式:

  • 除非您通过应用内购买提供应用的单一版本以从免费版本升级到付费版本,否则您必须将两个不同的版本上传到 Google Play(因为包名称不能相同两个应用程序)。无法回避这个事实。

  • 由于您必须构建两个不同版本的应用程序,因此您可以在编译时预处理编译代码并替换免费版本和付费版本之间的代码部分。使用精心设计的代码,这应该完全没有问题。 Library projects应该适合这个。

  • 另一种选择是在编译时提供两组不同的数据/配置文件,您可以通过配置/启动参数的方式控制应激活代码的哪些部分。

    <

如果您可以提供更多有关该应用的信息,就可以更轻松地提出一个好的解决方案。它是付费应用程序具有更多级别的游戏吗?它是免费版本中某些功能不可用的应用程序吗?它是免费版中每天有一定使用次数限制的应用吗?

更新:您提到您想要在免费应用程序中禁用评论,而在付费应用程序中评论应该发布到您的服务器。我认为最好的方法是将付费和免费逻辑分成两个库项目,并在构建付费版本时使用一个项目,在构建免费版本时使用一个项目:

  1. 创建两个library projects ,一个包含免费应用程序的代码,一个包含付费应用程序的代码。在这两个项目中,您都应该有一个名为 CommentPoster 或类似名称的类。让这两个类从您的主项目实现一个接口(interface),该接口(interface)定义了当用户发表评论时将调用的方法,我们将其称为 ICommentPoster 并有一个名为 postComment(String comment) 的方法。

  2. 让付费版本的 CommentPoster 类的 postComment() 方法将评论发送到服务器

  3. 让免费版本中的 CommentPoster 类的 postComment() 方法创建一个对话框、toast 或其他一些方式来告诉用户此功能不可用。如果您想事先让用户知道评论不可用,您可以选择在 ICommentPoster 中使用另一个名为 isAvailable() 的方法

如果您真的不喜欢两个库项目的想法并希望将所有代码保留在一个项目中,您可以进行一些预处理并包含两个不同配置文件中的一个,然后让应用程序读取配置文件以进行检查是否应该提供评论。这有一个很容易被破解的缺点,因为你需要在你的应用程序中拥有所有代码,这只是修改配置文件以获得付费版本的好处的简单问题(我猜很可能在根设备上有更高的风险)

关于Android 应用程序 - 精简版或付费版,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16662657/

相关文章:

android - 在 native 代码编译时找出 AOSP 中的 Android 版本?

android - 如何比较安卓版本

javascript - 使用 webview 从 JavaScript 调用 Android 中的 Java 方法

java - Retrofit 2 返回 HTML 而不是 JSON

android - 以全长创建 RecyclerView 的 PDF

android - 设备的Android版本与应用中指定的版本之间的关系

javascript - cordova 中的 navigator.geolocation.getCurrentPosition 仅提供 10 米的精度

android - 如何在 android 中更新 cloud firestore 中的 arrayList

java - Android 应用程序支持主要的 android 版本

android - 如何找到官方的android studio旧版本