Marshmallow权限模型Airbnb中AccountManager getAccounts()异常,他们是怎么做到的?

AccountManager getAccounts() anomaly in Airbnb for the Marshmallow permission model, how do they do it?

我在我的 Nexus 5 设备上安装了 Airbnb 运行 Marshmallow preview 3 并且正在玩权限模型。我在使用他们的应用程序时发现了一个奇怪的地方。

通常,如果您使用 AccountManager getAccounts() 方法获取在设备上注册的电子邮件帐户,您需要启用 GET_ACCOUNTS 权限才能正常工作。

然而,在他们的应用程序中,即使我撤销了 GET_ACCOUNTS 权限,他们仍然能够访问注册的电子邮件帐户,老实说这真的很奇怪 o.O(他们有电子邮件登录中的自动完成功能)。

这不是违背了拥有运行时权限模型的目的吗?

Airbnb 不针对 API 23,因此他们不使用运行时权限(您可以在安装时出现权限列表时看到这一点)。相反,他们遵循 compatibility model 用户仍然可以以不会崩溃的方式禁用对应用程序的权限。

但是,兼容模式(从 Developer Preview 3 开始)不允许用户禁用 GET_ACCOUNTS。事实上,如果不以 API 23 为目标的开发人员不使用 CONTACTS 组中的任何其他运行时权限,则联系人组甚至不会显示为已禁用(即使从技术上讲它会包括 GET_ACCOUNTS) .

当然,一旦 Airbnb 移动到目标 API 23 并使用运行时权限,那么如果他们想要检索任何其他帐户,他们将需要请求联系人权限组使用 GET_ACCOUNTS比他们自己。