我正在为Android开发应用程序。如今有很多商店免费非法分发Android付费应用程序。 我是否可以编写任何代码片段以防止我的Android应用程序从任何其他不是谷歌播放的商店下载?例如,当用户尝试打开应用时,显示类似于&#34的消息;您需要在Google Play中购买此应用"然后关闭应用程序?
答案 0 :(得分:6)
packageInstallerName
检查您的应用是否是从Google Play下载的最简单方法是检查packageInstallerName
是否为空,如下例所示:
String installer = getPackageManager().getInstallerPackageName(
"com.example.myapp");
if (installer == null) {
// app was illegally downloaded from unknown source.
}
else {
// app was probably installed legally. Hooray!
}
但正如我们在此处所读:https://stackoverflow.com/a/36299631/4730812
您不应使用
PackageManager#getInstallerPackageName
来检查该应用是否是从Google Play安装的,还是出于许可目的而出于以下原因:1)安装程序包名称以后可能会更改。例如,安装程序包名称用于
"com.google.android.feedback"
(见[here] [2])现在是"com.android.vending"
。2)检查安装程序packagename是否存在盗版原因等同于使用Base64加密密码 - 它只是不好 实践。
3)合法购买应用的用户可以侧载APK或从另一个未设置该应用的备份应用中恢复该APK 更正安装程序包名称并获取许可证检查错误。这将 最有可能导致糟糕的评论。
4)正如您所提到的,盗版者可以在安装APK时设置安装程序包名称。
因此,只有两种方法可以阻止Android应用在Google Play商店之外下载:
基本上确保用户使用设备购买了应用程序:
免费提供您的应用程序并添加内置购买。
应用内结算是一项Google Play服务,可让您销售数字广告 来自您的应用程序内容。您可以使用该服务进行销售 广泛的内容,包括媒体等可下载内容 文件或照片,虚拟内容,如游戏关卡或药水, 高级服务和功能等。您可以使用应用内结算功能 将产品销售为:
标准应用内商品(一次性结算)或
订阅(定期,自动结算)
当您使用应用内结算服务销售商品时,是否可以 Google Play是一种应用内商品或订阅,可以处理所有结帐 细节,所以你的应用程序永远不必直接处理任何 金融交易。 Google Play使用相同的结帐后端 用于应用程序购买的服务,以便您的用户体验 一致且熟悉的购买流程。
您通过Google Play发布的任何应用都可以实施 应用内结算。
希望它会有所帮助