繁体   English   中英

App Transfer Keychain Loss:用户注销的解决方案

[英]App Transfer Keychain Loss: Solutions to users logging out

我将一个应用转移到一个新的开发者帐户。 当我从新的开发人员帐户上传构建并通过 Testflight 部署它时,我遇到我的用户从应用程序中注销。

我认为这是由于钥匙串丢失,因为Team ID发生了变化。 所以,我联系了苹果,他们说没有办法在新的开发者帐户中访问旧的钥匙串,但我可以将应用程序转移回我的旧开发者帐户。

这对我们来说真的很糟糕,因为我们在设备中有用户创建的数据会在注销时丢失。 我们也有匿名用户,他们甚至无法重新获得对其帐户的访问权限,因为没有登录凭据。 这对我们来说是不可接受的,因为我们会丢失用户数据,但我们还需要将应用程序转移到新的开发者帐户......所以我们正在努力寻找可能的解决方案。

可能的解决方案#1

远非理想:例如,继续使用旧的开发者帐户一个月,并显示一条警报,内容如下:

请保存/备份您的所有数据和注册(如果您有匿名帐户),因为所有未保存的数据将在 [今天日期 + 1 个月] 由于迁移而丢失。 带来不便敬请谅解。

一个月后,我们再次转移到新的开发者帐户。 当月没有看到消息或没有保存数据的用户,再见数据……太糟糕了。

可能的解决方案#2

我不确定 Firebase Auth iOS SDK 是否具有执行以下操作的 API:

  1. 再次将应用转移回旧的开发者帐户
  2. 从那里上传一个新版本,将 Firebase Authentication State (例如令牌)暂时保存在一个文件中(我知道它不安全......也许我可以加密它)
  3. 再次将应用转移回新的开发者帐户
  4. 上传一个新版本来检查该文件是否存在,然后将 Auth State 再次复制到 Firebase Auth SDK 中。 这样,用户仍然可以登录,就好像什么都没发生一样。

第二种解决方案有点不安全、复杂且难以测试,但从用户的角度来看,它会比第一种解决方案更理想(如果一切顺利的话)。

所以,特别是我的问题是:

  1. 使用 Firebase Auth 可以解决方案#2 吗?
  2. 有没有人对如何解决这个问题有更多想法? 我想传输应用程序(通过登录)是一个常见的用例!

我们目前仅使用匿名和电子邮件/密码身份验证方法。

谢谢!

所以,我没有找到理想的解决方案。

我最终混合了解决方案#1和#2:

  1. 我将应用程序转移回旧的苹果帐户

  2. 我上传了一个新版本:

     a. extracts keychain data (which has login credentials and other stuff) b. encrypts this data (I used CryptoSwift) c. saves it into a file in the documents directory
  3. 等待 1-2 个月,以便用户可以打开应用程序来执行迁移的第一部分

  4. 在等待期间,我们发送电子邮件和推送通知,要求用户备份他们的数据,并说即将进行大规模迁移,借口是我们最近“增长”了很多并且我们正在扩展东西:P

  5. 将应用转移到新的苹果账户

  6. 我上传了一个新版本:

     a. checks if the migration file exists (in the documents directory) b. if exists, read the migration file and decrypts data c. puts this data into the keychain (which is empty after app transfer) d. deletes the migration file from the documents directory
  7. 将此迁移代码保留几个月,以便人们打开应用程序并执行迁移

  8. 删除代码,迁移期结束。

我将日志发送到后端以查看迁移是否成功。 到目前为止,用户都在正确迁移。

仍然存在用户可能丢失数据的情况,例如,匿名用户未执行迁移的第一部分时。 但我想不出更好的解决方案......到目前为止,数据丢失是最小的。 但我们也花了一些时间来把事情做好并进行所有适当的测试。

如果将来有人对此问题有更好的解决方案,请告诉我。! 我很好奇。

我希望答案对某人有所帮助。

我认为苹果代表错了。 您的钥匙串与捆绑 ID 绑定,而不是团队 ID。

例如,假设您将 SomeApp 从原始应用所有者 OldCo 转移到 NewCo。 该应用程序包括一个自定义键盘、实际的 SomeApp 应用程序和一个应用程序组。 您在 developer.apple.com 上设置了一些标识符:

App ID:
   com.OldCo.SomeApp
   com.OldCo.SomeApp.keyboard
App Group ID:
   com.OldCo.SomeAppGroup

如果您将这些更改为从com.NewCo. ,用户将丢失他们的 iCloud 数据。 但是,如果您将它们保留为com.OldCo. ,一切都应该很好。 请注意,要在 NewCo 的 developer.apple.com 帐户中创建这些 ID,OldCo 必须将它们从其帐户中删除。 让 NewCo 拥有带有 OldCo 的 ID 感觉很奇怪,但生活很奇怪。

如果我遗漏了一些细微差别,即 TeamID 的更改会影响钥匙串,请告诉我,我会做更多的研究。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM