如何使用我的应用程序的付费版本作为免费版本的"密钥"?

Bry*_*nny 53 android key

比方说,我有一些做X的Android应用程序.免费版本有广告或基本功能.我想要一个支付版本,删除广告并添加额外的功能.

如何使用付费应用作为"许可证密钥"来解锁免费应用中的功能?

因此,用户将安装免费应用程序,然后安装付费应用程序以获得额外功能,但他们仍将运行免费应用程序(现在将解锁).这样做的最佳方法是什么?

Fed*_*dor 37

使用PackageManager确保已安装付费软件包.并确保您的免费包裹签名与安装的高级包裹签名相匹配 否则,有人可以安装未签名的应用程序,其包名称与您的付费包名称相匹配,并以这种方式解锁溢价.

如果从Android电子市场下载应用,此帖子可以帮助您找到您的签名检测


Dav*_*vra 20

我正在使用这个:

PackageManager manager = getPackageManager();
if (manager.checkSignatures("core.package.name", "key.package.name")
    == PackageManager.SIGNATURE_MATCH) {
    //full version
}
Run Code Online (Sandbox Code Playgroud)

它很简单,很有效.


Dav*_*vid 8

这是一个简单的函数,它检查Pro Key是否存在,并检查包签名是否与免费版本匹配:

protected static boolean isProInstalled(Context context) {
    PackageManager manager = context.getPackageManager();
    if (manager.checkSignatures(context.getPackageName(), "com.your.pro.key")
        == PackageManager.SIGNATURE_MATCH) {
        //Pro key installed, and signatures match
        return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

代码来自此论坛帖子,基于yoki.org上列出的方法.


tho*_*nic 7

正如其他人指出的那样,是的,您可以使用PackageManager来检测付费"密钥"应用程序的存在,但如果有人只安装付费版本,卸载免费版本等,则会出现问题.用户可能会因为不得不保持不安而烦恼大约两次下载,让你的一个应用程序工作.FWIW,我认为DoubleTwist Air Sync就是这样做的.我很确定Air Sync应用程序除了在免费的DoubleTwist应用程序中启用功能外什么都不做.

更实际的路线可能是拥有两个独立的应用程序,然后使用ContentProvider和/或sharedUserId将prefs和数据从一个导入到另一个.然后,您可以使用共享库项目共享大部分代码. 然而,这意味着两个应用程序都需要使用不同的内容URI,因为两个应用程序不能使用相同的权限,这有点痛苦,因为您的共享库代码不能像您一样拥有静态CONTENT_URI或AUTHORITY字段通常在ContentProvider实现中找到.

我开始认为两个单独的应用程序有两个或多或少的独立代码库是可行的方法,因为在两个项目之间复制代码实际上可能比尝试维护一个包含各种开关的共享库以启用或禁用免费版和付费版之间的功能.

实际上,edgman建议使用单个应用程序并使用许可证可能是管理应用程序的免费和付费版本的最佳方式.它解决了上面列出的所有问题,虽然公平地说我还没有使用许可证.

EDIT许可似乎只允许付费应用(无赖),所以如果你想提供免费版本,这是不可取的.但是,应用内结算可能是您管理免费/付费版本的"正确"方式.也许它对OP来说没问题,但我觉得不需要总是在用户的设备上安装两个应用程序是理想的.如果付费用户在新设备上安装该应用程序,则似乎可以下载先前的交易,因此他们无需支付两次.


小智 -1

大多数应用程序开发人员采取的方法是仅拥有一个版本的应用程序,但根据“许可证密钥”的存在启用(额外)或禁用(广告)功能。