将使用 Apple Sign in 和 Firebase 的 iOS 应用转移到新的开发者帐户

Enr*_* R. 9 ios app-transfer firebase-authentication apple-sign-in

作为应用程序收购的一部分,我们正在将一款应用程序从一个 Apple 开发者帐户转移到另一个帐户。该应用程序使用 Apple Sign in 和 Firebase 身份验证,并且似乎需要完成几个与为使用 Apple Sign in 注册的用户生成传输标识符相关的步骤。这在此处记录:

https://developer.apple.com/documentation/sign_in_with_apple/transferring_your_apps_and_users_to_another_team

但是,由于我们使用 Firebase 作为应用程序的后端,因此我们无法直接控制身份验证过程和 Apple 登录生成的用户 ID、它们如何存储在 Firebase Auth 中以及如何在应用程序传输后更新它们。

关于如何生成转移标识符的文档也很混乱,因为不清楚是否需要为所有用户生成转移标识符,以及如果用户在他们提到的 60 天内没有登录应用程序该怎么办转移后。

如果有人以前遇到过这个问题,我们将非常感谢您提供一些关于如何实现这一目标的建议。非常感谢!!

小智 6

我不完全理解您关于 firebase 令牌的问题。

在我的系统中,我将每个设备的用户标识符和 firebase 令牌存储到数据库中。有些东西,就像下面这样...

[id], [userid], [appleUserId], [firebaseToken]
0001, xxxxx, 000625.9cc9a4be8d0c4axxxxxxxxxxxxxxxxxx.xxxx, c9ujMuHrc0f3keNzd1x1ae:APA91bHp......
0002, yyyyy, 001429.9ca6469bfab94xyyyyyyyyyyyyyyyyyy.yyyy, eUiInpEyekdlr10GWshvHu:APA91bHV......
Run Code Online (Sandbox Code Playgroud)

因此,转移应用程序后,我只需要迁移 appleUserId 即可。

关于如何生成转移标识符的文档也很混乱,因为不清楚是否需要为所有用户生成转移标识符,以及如果用户在他们提到的 60 天内没有登录应用程序该怎么办转移后。

我完全同意你的观点,这很令人困惑。

无论如何,这是迁移 appleUserId 的步骤。

  1. 获取访问令牌以迁移用户 ID(对于发送者)
  2. 生成传输标识符(使用发件人访问令牌)
  3. 获取访问令牌以迁移用户 ID(对于接收者)
  4. 通过传输标识符查找新用户 ID(使用接收方访问令牌)

由于只有1000个用户使用apple登录我的系统。我创建了一个 bash 脚本,调用 API 来一一转换用户 ID。

这是我检索“传输标识符”的脚本。

#!/bin/bash
generateTransferIdFunc() {
APIURL="https://appleid.apple.com/auth/usermigrationinfo"
recipientTeamId=7253******
senderAppBundleID=com.test.app
senderSecret=eyJraWQiOiJBQTQ4NkJaWTUyIiw.........

if [ $# -eq 1 ] && [ -f $1 ]
then
OLDIFS=$IFS
IFS=","
while read oid userid email
do
        echo "Start retrieving trasfer_sub for : $userid, $email"
curl -sS --location --request POST $APIURL \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Authorization: Bearer ae42b9xxxxxxxxxxxxxxxxxxxxxxxxxxx.0.xxxxx.4xxxxxxxxxxxxxxxxxxxxx' \
-d "sub=$userid&target=$recipientTeamId&client_id=$senderAppBundleID&client_secret=$senderSecret"

        echo ""
        echo "End."
done < $1
IFS=$OLDIFS
else
        echo "Input file not found!"
fi
}


if [ $# -eq 1 ] && [ -f $1 ]
then
generateTransferIdFunc $1 | while IFS= read -r line; do printf '%s %s\n' "$(date '+%Y-%m-%d %H:%M:%S.%N')" "$line"; done | tee -a generateTransferId.log 
else
       echo "Input file not found!"
fi
Run Code Online (Sandbox Code Playgroud)

注意:senderSecret 由 JWT 生成。请参阅https://medium.com/identity-beyond-borders/how-to-configure-sign-in-with-apple-77c61e336003

您可以通过以下方式运行脚本

sh generate_transfer_identifier.sh input.csv 
Run Code Online (Sandbox Code Playgroud)

这是示例 input.csv

oid,appleId,email
129914891,001870.1ffcf5**************************.0729,a********@privaterelay.appleid.com
129985693,001559.8322cd**************************.0728,b********@privaterelay.appleid.com
Run Code Online (Sandbox Code Playgroud)

然后您将收到每个用户的“转移标识符”。

之后,您可以使用“转移标识符”来检索与接收者团队一起使用的新用户 ID。请阅读这篇文章,将“转移标识符”转换为新的用户 ID。 https://developer.apple.com/documentation/sign_in_with_apple/bringing_new_apps_and_users_into_your_team

注:您可以修改上述脚本,调用API进行转换。

最后,您将收到新的用户 ID。然后您只需将用户 ID 更新到数据库中即可。

我希望以上信息对您有用。