【问题标题】:Android-Permission: Backward compatibility. Give access only to apps which are using old version of my app(new version permission enforced)Android-Permission:向后兼容。仅授予使用我的应用程序旧版本的应用程序的访问权限(强制执行新版本权限)
【发布时间】:2016-02-08 15:27:17
【问题描述】:

如何授予对使用我更新的应用程序(较新版本)的应用程序的访问权限。

假设我的应用程序名称是 ABC,版本是 0.1

设备上使用 ABC 应用程序提供的服务(比如说 XZ)的应用程序很少。

现在,我的公司认为我们应该公开使用 XZ 服务的权限。

据此,我们在 0.2 版本中强制执行了权限 PQ。现在开始使用我们的服务 XZ 的应用程序,他们应该在他们的清单文件中提及 PQ 权限。

但问题是,升级后,使用版本 0.1 的应用程序将无法再使用我们的服务。

我知道所有使用 XZ 服务的应用程序。

我们如何解决向后兼容性问题?

我在网上查得够多了,但没有运气。

如果您遇到同样的问题并找到了解决方案,请帮助我...

欢迎任何解决方案。

【问题讨论】:

    标签: java android permissions backwards-compatibility


    【解决方案1】:

    我们如何解决向后兼容性问题?

    联系这些应用的开发者,警告他们即将发生的权限要求,并鼓励他们提前更新他们的应用。

    或者,不要通过权限保护您的应用。如果存在已知的有限客户端应用程序集,并且您正在使用兼容的通信机制(例如,基于 AIDL 的绑定),您可以使用 getCallingUid() 找出请求的客户端是谁,并根据已知应用程序的白名单。您甚至可以检查公共签名密钥是否与预期值匹配,以帮助防御客户端的黑客版本。

    另一种可能性是对同一功能有两个单独的服务入口点:

    • 0.1 版本在未经许可的情况下照常工作

    • 0.2 版本不仅需要<uses-permission> 元素,还需要更改服务的标识(例如,用于查找服务的Intent 的不同操作字符串)

    这使您可以在不破坏旧应用程序的情况下开始加强安全性。然后,您可以提供一个弃用窗口,让 0.1 客户端有时间迁移到 0.2,然后最终完全删除 0.1 入口点(或者至少使用相同的权限对其进行保护)。

    很可能还有其他模式——这些都是我想不到的。

    【讨论】:

    • 感谢您的宝贵建议。我正在使用我们想要设置签名或系统的意图服务和权限保护级别。有没有办法检查呼叫用户?
    • @Pampapathi:“我正在使用我们想要设置 signatureOrSystem 的意图服务和权限保护级别”——这对您来说似乎不是一个有用的保护级别。除了您之外,没有人拥有您的签名密钥,因此除了您之外,没有人可以持有该权限。如果这些其他应用程序是系统应用程序,那么您就会遇到更大的问题(例如,与设备制造商协商更新他们的应用程序)。 “有没有办法检查呼叫用户?” -- 你可以尝试从onStartCommand() 调用Binder.getCallingUid(),虽然我不知道这是否有效。
    • 我的应用和其他应用都是用公司的私钥签名的,都是系统应用。
    • @Pampapathi:然后与设备制造商合作,统一升级您的所有应用程序。
    猜你喜欢
    • 1970-01-01
    • 2023-04-08
    • 2018-04-23
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    相关资源
    最近更新 更多