15

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

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

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

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

例如,MyBackup Pro 只允许两个唯一的设备。

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

4

3 回答 3

11

谷歌帮助你做到这一点

此页面可帮助您进行设置。

更具体地说,您似乎想添加一个 DeviceLimiter

在某些情况下,您可能希望您的策略限制允许使用单个许可证的实际设备的数量。这将阻止用户将许可的应用程序移动到多个设备上,并在这些设备上以相同的帐户 ID 使用该应用程序。它还可以通过向其他人提供与许可证相关联的帐户信息来防止用户“共享”应用程序,这些人随后可以在他们的设备上登录该帐户并访问应用程序的许可证。

LVL 通过提供一个 DeviceLimiter 接口来支持每个设备的许可,该接口声明了一个方法,allowDeviceAccess()。当 LicenseValidator 处理来自许可服务器的响应时,它调用 allowDeviceAccess(),传递从响应中提取的用户 ID 字符串。

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

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

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

可以在这里找到源代码。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.
于 2013-03-05T10:14:46.200 回答
3

Ascorbin 和 yarian 的答案都很好解释。

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

1. 通过谷歌它自己

2.通过你自己的实现

让我们一一检查,

1. 通过谷歌它自己

Ascorbin 的回答很好地解释了如何实现它以及谷歌如何管理它。所以希望你明白了。如果没有,请告诉我。

2.通过你自己的实现

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

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

希望你明白了。

随意发表评论。:)

于 2013-03-06T04:03:39.570 回答
2

例如,您可以通过 wlan 模块的 MAC 地址或通过 IMEI 识别设备(两者都可以通过 Android 系统服务检索)。接下来是您使用服务器识别安装,如果服务器回复此用户/客户已经在另一台设备上安装了它,您锁定应用程序并告诉用户发生了什么。

于 2013-02-25T10:15:53.730 回答