Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 应用程序传输密钥链丢失:用户注销的解决方案_Ios_Firebase Authentication_Keychain_App Transfer - Fatal编程技术网

Ios 应用程序传输密钥链丢失:用户注销的解决方案

Ios 应用程序传输密钥链丢失:用户注销的解决方案,ios,firebase-authentication,keychain,app-transfer,Ios,Firebase Authentication,Keychain,App Transfer,我将一个应用程序转移到一个新的开发者帐户。当我从新的开发者帐户上传一个构建并通过Testflight部署它时,我遇到我的用户从应用程序注销 我认为这是由于钥匙链丢失,因为团队ID已更改。所以,我联系了苹果,他们说没有办法访问新开发者帐户中的旧钥匙链,但我可以将应用程序转移回我的旧开发者帐户 这对我们来说真的很糟糕,因为我们在设备中有用户创建的数据,这些数据在注销时丢失。我们还有匿名用户,他们甚至无法重新获得对其帐户的访问权限,因为没有登录的凭据。这是我们不能接受的,因为我们将丢失用户数据,但我们

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

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

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

可能的解决方案#1 远非理想:例如,继续使用旧的开发人员帐户一个月,并显示一条警告,如:

请保存/备份您的所有数据并注册(如果您有匿名 因为所有未保存的数据将在[今天日期+1]丢失 月]由于迁移。很抱歉给您带来不便

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

可能的解决方案#2 我不确定Firebase Auth iOS SDK是否有这样的API:

  • 将应用程序重新转移回旧的开发人员帐户
  • 从那里上传一个新版本,将Firebase身份验证状态(例如令牌)临时保存在一个文件中(我知道它不安全……也许我可以加密它)
  • 再次将应用程序转移回新的开发者帐户
  • 上载检查该文件是否存在的新版本,并将身份验证状态再次复制到Firebase身份验证SDK中。这样,用户仍然可以登录,就好像什么也没发生一样
  • 第二个解决方案有点不安全、复杂且难以测试,但从用户的角度来看,它比第一个解决方案更理想(如果一切顺利)

    所以,我的问题是:

  • 使用Firebase Auth是否可以实现解决方案#2
  • 有没有人对如何处理这个问题有更多的想法?我猜转移应用(登录)是一个常见的用例 我们目前只使用匿名和电子邮件/密码身份验证方法


    谢谢

    我认为苹果的代表错了。您的钥匙链绑定到bundle ID,而不是Team ID

    例如,假设您将某个应用程序从原始应用程序所有者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必须将其从其帐户中删除。拥有新的共同身份证和旧的共同身份证感觉很奇怪,但生活是奇怪的


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

    我认为苹果代表错了。您的钥匙链绑定到bundle ID,而不是Team ID

    例如,假设您将某个应用程序从原始应用程序所有者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必须将其从其帐户中删除。拥有新的共同身份证和旧的共同身份证感觉很奇怪,但生活是奇怪的


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

    因此,我没有找到理想的解决方案。

    我最后做了一系列的解决方案#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
    
     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
    
  • 等待1-2个月,以便用户可以打开应用程序执行迁移的第一部分

  • 在等待过程中,我们发送电子邮件和推送通知,要求用户备份他们的数据,说一个大的迁移即将到来,借口是我们最近“增长”了很多,我们正在扩大规模:p

  • 已将应用程序转移到新的apple帐户

  • 我上传了一个新版本:

     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
    
     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
    
  • 将此迁移代码保留了几个月,以便人们打开应用程序并执行迁移

  • 删除代码,迁移期结束

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

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

    如果将来有人对这个问题有更好的解决方案,请让我知道!!我很好奇


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

    因此,我没有找到理想的解决方案。

    我最后做了一系列的解决方案#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
    
     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
    
  • 等待1-2个月,以便用户可以打开应用程序执行迁移的第一部分