在Android中限制每个帐户的应用程序安装(由唯一设备决定)

在Android中限制每个帐户的应用程序安装(由唯一设备决定),android,google-play,Android,Google Play,我已经发布了一个Android应用程序 问题是,如果有人购买了我的应用程序,他可以使用同一个帐户在多个设备上安装它 我可以将安装限制为每个帐户的几个(比如说2个)唯一设备吗 如果用户希望在具有相同帐户的另一台设备上使用它,则必须先从另一台设备上卸载 比如说, 如何在我的应用程序中实现这一点?您可以通过无线局域网模块的MAC地址或IMEI(都可以通过Android系统服务检索)来识别设备。下一步是使用服务器标识安装,如果服务器答复此用户/客户已在另一台设备上安装此应用,则锁定应用程序并告诉用户发生

我已经发布了一个Android应用程序

问题是,如果有人购买了我的应用程序,他可以使用同一个帐户在多个设备上安装它

我可以将安装限制为每个帐户的几个(比如说2个)唯一设备吗

如果用户希望在具有相同帐户的另一台设备上使用它,则必须先从另一台设备上卸载

比如说,


如何在我的应用程序中实现这一点?

您可以通过无线局域网模块的MAC地址或IMEI(都可以通过Android系统服务检索)来识别设备。下一步是使用服务器标识安装,如果服务器答复此用户/客户已在另一台设备上安装此应用,则锁定应用程序并告诉用户发生了什么

更具体地说:

在某些情况下,您可能希望您的策略限制 允许使用单个许可证的实际设备。这会 防止用户将许可应用程序移动到多个服务器上 设备,并在同一环境下在这些设备上使用应用程序 帐户ID。它还将阻止用户“共享”帐户 通过提供与 将许可证颁发给其他个人,然后他们可以登录到该帐户 并访问应用程序的许可证

LVL通过提供DeviceLimiter支持每设备许可 接口,它声明了一个方法allowDeviceAccess()。当 LicenseValidator正在处理来自授权服务器的响应,它 调用allowDeviceAccess(),传递从 答复

如果您不想支持设备限制,则无需进行任何工作- LicenseChecker类自动使用默认实现 称为NullDeviceLimiter。顾名思义,NullDeviceLimiter是一个 “no op”类,其allowDeviceAccess()方法仅返回 所有用户和设备的许可响应

警告:对于大多数应用程序,不建议使用每设备许可 因为:

它要求您提供一个后端服务器来管理用户和服务器 设备映射,它可能会无意中导致用户 拒绝访问他们合法购买的应用程序 在另一个设备上

DeviceLimiter的源代码

源代码大致解释了如何使用DeviceLimiter实现您想要的:

/* The LICENSED response from the server contains a user identifier unique to
 * the <application, user> pair. The developer can send this identifier
 * to their own server along with some device identifier (a random number
 * generated and stored once per application installation,
 * {@link android.telephony.TelephonyManager#getDeviceId getDeviceId},
 * {@link android.provider.Settings.Secure#ANDROID_ID ANDROID_ID}, etc).
 *
 * The more sources used to identify the device, the harder it will be for an
 * attacker to spoof.
/*来自服务器的许可响应包含唯一的用户标识符
*这对。开发人员可以发送此标识符
*到他们自己的服务器以及一些设备标识符(随机数
*每个应用程序安装生成并存储一次,
*{@link android.telephony.TelephonyManager#getDeviceId getDeviceId},
*{@link android.provider.Settings.Secure#android_ID}等)。
*
*用于识别设备的来源越多,对用户来说就越困难
*攻击者进行欺骗。

抗坏血酸和亚利安的答案都很好解释

据我所知,它可以通过两种方式来管理

1。由谷歌it self发布

2。由您自己实施

让我们逐一检查

1。由谷歌it Self发布

抗坏血酸的回答很好地解释了如何实施它以及谷歌如何管理它。希望你能得到。如果没有,请告诉我

2。由您自己实施

如果您有自己的服务器,那么您可以输入代码来检查已安装的应用程序设备。每个设备都有唯一的IMEI号码,因此您可以轻松跟踪相同的IMEI号码并阻止或允许安装应用程序或运行应用程序

注意:如果设备配置了相同的帐户,谷歌允许您在另一台设备上使用相同的应用程序。因此,在这种情况下,只能通过检测具有不同IMEI或MAC地址的同一帐户来实现

希望你明白了


请随意评论。:)

我不想为此维护服务器。我更愿意检查谷歌是否允许在他们的清单或服务器上这样做(就像谷歌一样),你的应用程序的一个安装如何知道已经在另一个设备上安装了另一个应用程序?谷歌可以提供这样一个功能,但我认为他们没有。我已经用过谷歌Licsencing。他们提供一个服务器,程序检查文件是否从一台机器复制到另一台机器,并通过谷歌服务器服务(检查此机器或帐户是否购买了此应用程序)执行此操作。我希望这个服务器也能限制合法购买,而不仅仅是使用服务器盗版+1是唯一的方法。您无法维护每个设备上所有设备的列表-您需要在某处查询。这是不可能的。我无法知道在我的服务器中是否卸载了某个程序(以便在我的服务器中释放该行),只有谷歌知道大多数用户可能希望该应用程序能在他们所有的设备上运行。如果您有像MyBackup Pro这样的原因(例如,每台设备都会增加存储和传输成本),那么我认为只要您在用户购买之前明确说明,就可以了。如果你没有理由限制这样的设备,我会说不要这样做以免影响用户体验。