我希望使用签名级别权限来安全地在两个应用程序之间共享数据。不幸的是,即使我在两个应用程序中使用相同的上传密钥
进行签名,Google Play在上传到商店后也会更改它们的签名。因此,我的应用程序无法通信。
如果我们使用 Google Play 应用签名,如何在两个应用程序中使用相同的键/证书进行签名?
我希望使用签名级别权限来安全地在两个应用程序之间共享数据。不幸的是,即使我在两个应用程序中使用相同的上传密钥
进行签名,Google Play在上传到商店后也会更改它们的签名。因此,我的应用程序无法通信。
如果我们使用 Google Play 应用签名,如何在两个应用程序中使用相同的键/证书进行签名?
正如您在图像上所看到的,我们使用上传密钥将我们的应用程序上传到Google Play,然后Google Play会删除我们的签名,并使用不同的密钥对我们的应用程序进行签名。这很有用,因为如果我们丢失了上传密钥,我们将不会失去上传应用程序的可能性(我们可以向Google请求使用新的上传密钥)。此外,Google Play现在可以将我们的应用程序拆分成更小的部分并独立分发,每个部分都将使用我们的应用程序签名密钥进行签名(Android应用程序包)。 这种解决方案的缺点是,我们上传到商店的应用程序具有与我们从Google Play下载的应用程序不同的签名。 这非常棘手,特别是如果我们在应用程序中使用签名级别权限。此外,当我们想要将应用程序上传到不同于Google Play的商店时,这也是一个问题。
通过使用签名级别权限,我们可以以安全的方式在两个应用程序之间共享数据(用例示例),但有一个主要条件-两个应用程序必须具有相同的签名。 即使我们使用相同的上传密钥,这并不意味着我们的应用程序将具有相同的签名,因为Google Play使用的密钥可能是不同的。 实际上,这意味着当您测试应用程序的发布版本时,一切看起来都很好,但是在将其上传到Google Play后,它不起作用(此问题影响取决于应用程序签名的每个功能- Facebook登录,篡改检测)。之后,两个应用程序将为我们的用户具有相同的签名。不幸的是,如果我们尝试为已经发布给我们的用户的应用程序(稍后可以加入Google Play应用程序签名)执行此操作,则没有此选项可用,我们无法使用相同的密钥。
如果我们无法这样做但希望在两个应用程序之间使用安全数据共享呢?我们可以手动验证不同的签名并尝试防止来自提供数据的应用程序内部的攻击。这不像第一个解决方案那样安全,但比什么都不做更安全 :)