将使用苹果登录和Firebase的iOS应用程序转移到新的开发者帐户

8
我们正在将一款应用从一个苹果开发者帐户转移到另一个帐户,作为应用程序收购的一部分。该应用使用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天内没有登录应用程序该怎么办。
如果有人遇到过这种情况,我们将非常感激一些关于如何完成此操作的建议。非常感谢!

你成功完成了吗?我们遇到了同样的问题,我想知道你是否找到了解决方案。 - Jonas Lüthke
1
这个实现起来比较复杂。最终,我们发布了一个版本,将旧用户ID存储在应用程序中,并将该版本放在应用商店上几个月。然后,我们将应用转移到了新的账户,所有用户都被注销了(很丑陋)。当用户重新登录后,我们检查是否有存储的用户ID(旧的ID),并将他们的账户从旧的Firebase用户ID迁移到新的注册中生成的新用户ID。希望这能帮到你! - Enrique R.
只有当接收方拥有新的Firebase(即更改服务器)时才适用吗?还是即使Firebase保持不变,只是客户端应用程序更换所有者,也适用? - undefined
1个回答

6
我不是很理解你关于Firebase令牌的问题。
在我的系统中,我将每个设备的用户标识符和Firebase令牌存储到数据库中。就像下面这样...
[id], [userid], [appleUserId], [firebaseToken]
0001, xxxxx, 000625.9cc9a4be8d0c4axxxxxxxxxxxxxxxxxx.xxxx, c9ujMuHrc0f3keNzd1x1ae:APA91bHp......
0002, yyyyy, 001429.9ca6469bfab94xyyyyyyyyyyyyyyyyyy.yyyy, eUiInpEyekdlr10GWshvHu:APA91bHV......

所以,转移应用程序后,我只需要迁移appleUserId。
生成传输标识符的文档也非常令人困惑,因为不清楚是否需要为所有用户生成传输标识符,以及如果用户在转移后60天内没有登录该应用程序该怎么办。
我完全同意您的看法,这确实很令人困惑。
无论如何,这是迁移appleUserId的步骤:
1. 获取迁移用户ID的访问令牌(对于发送者) 2. 生成传输标识符(使用发送者访问令牌) 3. 获取迁移用户ID的访问令牌(对于接收者) 4. 使用接收者访问令牌通过传输标识符查找新的用户ID
由于只有1000个用户使用苹果登录我的系统,我创建了一个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

注意:senderSecret 是由 JWT 生成的。 请参见 https://medium.com/identity-beyond-borders/how-to-configure-sign-in-with-apple-77c61e336003 您可以通过运行脚本来实现。
sh generate_transfer_identifier.sh input.csv 

这里是样本 input.csv

oid,appleId,email
129914891,001870.1ffcf5**************************.0729,a********@privaterelay.appleid.com
129985693,001559.8322cd**************************.0728,b********@privaterelay.appleid.com

然后,您将收到每个用户的“转移标识符”。
之后,您可以使用“转移标识符”来检索与接收方团队一起使用的新用户ID。请阅读此文章以将“转移标识符”转换为新用户ID。 https://developer.apple.com/documentation/sign_in_with_apple/bringing_new_apps_and_users_into_your_team 注意:您可以修改上述脚本以调用API进行转换。
最后,您将收到新的用户ID。然后,您只需要将用户ID更新到您的数据库中。
希望以上信息对您有用。

谢谢你抽出时间写这个,它非常有帮助。 - Tom3652
如何在没有自定义后端的情况下完成相同的任务,而只使用Firebase作为您的服务器?换句话说,我无法访问令牌,它们只存在于Firebase一侧。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接