重大更改:Android 6 和设备 ID

重大更改:Android 6 和设备 ID

在 Android 6 发布之前,用户在安装新应用时经常被要求授予权限。用户经常被要求授予 android.permission.READ_PHONE_STATE 权限,这被认为是一种危险权限。这导致许多人担心应用可能会利用所授予的权限进行某些操作,而选择不安装这些应用。

Android 6 通过将权限转移到按需系统来缓解这些担忧。现在,您可以在应用需要时请求 android.permission.READ_PHONE_STATE。但是,此更改会给 Corona SDK API 带来一个问题,该 API 允许您使用 system.getInfo("deviceID") 获取设备的设备 ID。

如果用户的设备授予 android.permission.READ_PHONE_STATE 权限,则返回设备的唯一电话 ID(IMEI、MEID 或 ESN,具体取决于运营商)。对于没有电话或未授予权限的设备,将返回操作系统分配的唯一系统 ID。

如果您的应用当前使用 deviceID 值,那么任何升级到 Android 6 的用户很可能都会拥有与早期版本 Android 不同的 deviceID。如果保持相同的 ID 对您的应用至关重要,则您必须采取措施以确保您的应用继续获取电话 ID 而不是操作系统 ID。

您可以在 main.lua 中通过在尝试获取 deviceID 之前请求正确的 android.permission.READ_PHONE_STATE 权限来做到这一点。考虑以下代码:

由于基于操作系统的 ID 不需要特殊权限,我们建议您今后使用操作系统生成的 ID,而不是手机 ID。

有问题吗?请加入我们的 Corona Labs Android 论坛

 

标签
罗布·米拉克 (Rob Miracle)
[email protected]

罗布是 Corona Labs 的开发者关系经理。除了热衷于帮助其他开发者使用 Corona 制作优秀游戏之外,他还喜欢在业余时间制作游戏。自 1979 年以来,罗布一直在编写游戏代码,从个人电脑到大型机。他在游戏行业拥有超过 16 年的专业经验。

4 条评论
  • 费利克斯 (Felix)
    发布于 16:40,2 月 25 日

    我正在尝试实现这段代码,但它给出了一个运行时错误,因为 system.getInfo( “androidApiLevel” ) 返回 nil。我实现了一个 Android 的检查,例如
    if system.getInfo( “platformName” ) == “Android” then
    但它甚至在安卓设备上返回 nil。知道这里的问题是什么吗?

    最好的,
    费利克斯 (Felix)

    • 费利克斯 (Felix)
      发布于 17:11,2 月 25 日

      啊,没关系了。将 corona 更新到最新的公共版本解决了这个问题...

  • 夏洛特·胡克 (Charlotte Hook)
    发布于 04:00,3 月 13 日

    由于正在发布新版本的安卓系统,这是否意味着某些旧版本的安卓系统将不再兼容?我能找到的唯一文章来自 2014 年 4 月,其中说 2.3.3 是现在最早兼容的版本,只是想知道这是否会改变

    • 罗布·米拉克 (Rob Miracle)
      发布于 12:15,3 月 13 日

      我们仍然支持 Android 最低版本 2.3.3,但我们不知道这种情况会持续多久。越来越多的插件要求具有更高的最低版本的功能。这种情况在不久的将来不会发生,因为我们刚刚在 2 月份发布了一个仍然支持 2.3.3 的公共版本。