【问题标题】:Merging a paid Android app with the free version将付费 Android 应用程序与免费版本合并
【发布时间】:2015-02-25 05:15:10
【问题描述】:

我有一个 Android 应用程序,它有两个版本:免费版本和具有更多功能的高级版本,售价 0.99 美元。

我想转向应用内购买方式,可以在免费版本中购买高级功能。但是,我显然不想让已经购买了付费应用的用户不高兴。

是否有任何行之有效的方法可以将单独的免费增值应用合并为一个?

现在,我正在考虑一个我想出的解决方案,如果免费版本检测到设备上安装了付费版本的应用,它会自动解锁其付费功能。我正在考虑在应用程序之间使用进程间通信。但是我在 IPC 方面没有经验,尤其是在 Android 方面,我不确定它是否适用于这里或是否特别强大。

【问题讨论】:

    标签: android ipc


    【解决方案1】:

    但是,我显然不想让已经购买了付费应用的用户感到不安。

    除非您为获得相同功能而为 IAP 收取的费用低于为付费应用收取的费用,否则我不确定这会如何导致任何用户投诉。无论他们是先付还是后付,如果价格相同,都没有关系。

    我正在考虑一个我想出的解决方案,如果免费版本检测到设备上安装了付费版本的应用,它会自动解锁其付费功能。

    这可以很容易地通过查询PackageManager 来查看是否安装了其他应用程序。比如:

    try {
        PackageInfo info = getPackageManager().getPackageInfo("com.example.paidapp", 0);
    
        //If we got here, the paid app is installed.
        // You can even check metadata, like which version they have
        int installedVersion = info.versionCode;
    } catch (PackageManager.NameNotFoundException e) {
        //Paid app is not installed!
    }
    

    一些应用出于各种原因这样做,使用“付费”包作为免费应用的关键,因此并非没有先例。

    您可能需要参与的唯一 IPC 是,如果您想以某种方式将一些已保存的数据从付费应用程序中读取到免费应用程序中。在这种情况下,我建议实现 ContentProvider 以将您需要的数据元素公开给其他应用程序。我还将使用signature 权限保护该提供程序,以便只有您的应用程序可以访问它。

    【讨论】:

    • 那么这对欺骗有抵抗力吗(包管理器方法)?我觉得任何人都可以通过安装一个包含我的付费应用程序包名称的空应用程序来绕过它......
    • 没关系,显然我可以检查应用程序的签名,看看它们是否匹配!太棒了。
    • 正确。这也是签名级权限的用武之地。如果您需要/想要连接到应用程序以验证某些内容,则只能将签名级权限授予使用相同密钥签名的两个应用程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多