如果应用使用了苹果登录,当应用更换开发者账号(迁移到其他的开发者账号)后,苹果登录的用户标识(userId)会发生变化,如果不进行新老用户标识的对应处理,苹果用户标识的变化就会带来业务系统账号的丢失。下面梳理一下迁移流程
1 获得接收应用账号的teamId,针对应用此应用生成迁移标识
官方文档地址:https://developer.apple.com/documentation/sign_in_with_apple/transferring_your_apps_and_users_to_another_team
/**
* 生成迁移标识
*
* @param [string] $clientId 老账号的serviceId
* @param [string] $clientSecret
* @param [string] $accessToken
* @param [string] $sub 老账号的用户标识userId
* @param [string] $target 迁移到的开发者账号的teamId
* @return void
*/
public function generateTransferIdentifier($clientId, $clientSecret, $accessToken, $sub, $target)
{
$params = [
'client_id' => $clientId,
'client_secret' => $clientSecret,
'sub' => $sub,
'target' => $target,
];
$resp = Utils::curl('https://appleid.apple.com/auth/usermigrationinfo', $params, [
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_RETURNTRANSFER => false,
CURLOPT_HTTPHEADER => ['Content-Type: application/x-www-form-urlencoded', 'Authorization: Bearer '.$accessToken, ],
CURLOPT_TIMEOUT => 10,
]);
$ret = json_decode($resp, true);
return $ret;
}
返回的数据:
{
"transfer_sub":"760417.ebbf12acbc78e1be1668ba852d492d8a.1827"
}
2 迁移应用
此操作后台完成,在这里不细说。
3 用收到的迁移标识去苹果兑换迁移后用户标识
通过迁移标识兑换迁移后的用户标识需要在应用迁移后完成,因为在迁移前是无法针对此应用创建serviceId(client_id)等需要的参数,所以理论上对业务会有一定的影响。
对此苹果在论坛里有过解答:https://developer.apple.com/forums/thread/667043?answerId=647963022#647963022
public function exchangeTransferIdentifier($clientId, $clientSecret, $accessToken, $transferSub)
{
$params = [
'client_id' => $clientId,
'client_secret' => $clientSecret,
'transfer_sub' => $transferSub,
];
$resp = Utils::curl('https://appleid.apple.com/auth/usermigrationinfo', $params, [
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_RETURNTRANSFER => false,
CURLOPT_HTTPHEADER => ['Content-Type: application/x-www-form-urlencoded', 'Authorization: Bearer '.$accessToken, ],
CURLOPT_TIMEOUT => 10,
]);
$ret = json_decode($resp, true);
return $ret;
}
文章评论