Rom*_*lov 7 android piracy google-play
为了确保我的付费 android 应用程序是从商店合法安装的,我这样写:
String installer = getPackageManager().getInstallerPackageName(
"com.example.myapp");
if (installer == null) {
// app was illegally downloaded from unknown source.
// dear user, please re-install it from market
}
else {
// app was probably installed legally
// (also it's good to check actual installer name)
}
Run Code Online (Sandbox Code Playgroud)
可以吗?从市场上合法购买和安装的应用程序是否有可能获得空的安装程序包名称并无法通过此测试?
我知道用户可以运行adb -i com.fake.installer myapp.apk
并通过此检查,但更重要的是合法用户是否会遇到潜在问题。
PackageManager#getInstallerPackageName
出于以下原因,您不应使用检查应用程序是否是从 Google Play 安装的或用于许可目的:
1)安装程序包名将来可以更改。例如,安装程序包名称过去是"com.google.android.feedback"
(参见此处),现在是"com.android.vending"
.
2)出于盗版原因检查安装程序包名等同于使用 Base64 来加密密码——这只是不好的做法。
3)合法购买该应用程序的用户可以旁加载 APK 或从另一个未设置正确安装程序包名称的备份应用程序恢复它,并收到许可证检查错误。这很可能会导致差评。
4)就像你提到的,盗版者可以在安装 APK 时简单地设置安装程序包名。
您应该使用App Licensing或切换到In-app Billing。
虽然getInstallerPackage("com.example.mypackagename")
这样做了,而且对于“黑客”来说,在不实际付费的情况下仍然使用您的付费应用程序基本上有点困难,但确实这不是不让这种情况发生的最佳方法。
你能做什么呢?
这基本上可以确保用户使用手机购买了该应用程序。
当然,这样做有一个缺点:如果您的应用程序架构不是围绕这个想法构建的,那么您将有很多工作要做。不过,我认为这是完全值得的。
归档时间: |
|
查看次数: |
2626 次 |
最近记录: |