4

我在 ServerManagedPolicy 中使用 AESObfuscator 进行 android 许可。到目前为止,我已经像这样创建了 deviceId:

String deviceId = Secure.getString( getContentResolver(), Secure.ANDROID_ID );

网上所有的例子都是这样做的,但有时会说它不是很安全,但没有描述其他方法。我读过 ANDROID_ID 可以很容易地更改,甚至可以为空,所以我真的想有另一种方法来获得一个唯一的 id。对于购买了我的应用程序的人来说,许可多次失败,我很确定这与此有关,否则只能是谷歌的问题,我真的很怀疑。

那么我该怎么做呢?只需创建一个随机哈希并将其添加到 deviceId (当然将其存储在某处..?)

4

1 回答 1

6

你说的“安全”是什么意思?这只是混淆您的偏好以使其更难在有根设备上进行编辑的问题。如果您重置设备(删除所有数据),或者如果有人在有根设备上编辑它,ANDROID_ID 可能会发生变化。第一种情况并不是真正的问题,在第二种情况下,您将无法解密(去混淆)存储的首选项,因此您只需将其视为错误。如果它真的为空,您应该考虑某种后备值。

这里的重点不是要有唯一的 ID,而是使用一些特定于设备的数据来混淆首选项,这样您就不能只是将它们复制到另一台设备上。您可以使用 IMEI、WiFi 适配器 MAC 地址或任何其他特定设备的哈希值,但您必须处理特定属性不可用的情况(例如,仅 WiFi 的平板电脑没有 IMEI 等。 )

使用 ACRA 或 BugSense 等错误报告库来跟踪实际错误并了解许可失败背后的真正原因。有时是谷歌基础设施的问题,所以你也应该尝试处理这个问题(缓存许可状态等)

于 2012-06-11T01:54:27.497 回答