原因
不同的开发者账号主体,苹果登录生成的唯一标识不一样,导致了应用迁移后,通过Sign in with apple 登录,获取到的Identifier值和原来不一致。如果应用原先通过这个作为userid的关联映射,没有做好这个转换的话,将会产生用户数据丢失的严重影响。
账号A:Identifier_01 -> userid_01
账号B:Identifier_02 -> userid_02
由于userid_01 !== userid_02,此时应用迁移后玩家用Identifier_02匹配不上原来的userid_01,表现就是数据丢失变成一个新的账号。
过程
1、准备
p8文件里拿的key,teamid,kid,bundleId,旧的账号下的accountId,注意迁移动作不可逆
2、名词
账号A :旧的账号,需要转出的账号
账号B:新的账号,转出目标账号
accountId:苹果授权登录返回的唯一id
tranferSub: 转换中间状态的id
3、流程
1、账号A申请转移到账号B:在开发者后台申请 申请方和接收方都需要操作,需要苹果审核,这一步是将两个账号联系起来,审核通过后,进入60天的数据同步期,新的用户数据会被同步到账号B下
2、数据同步:账号A -> 中间状态temp(tranferSub) ->账号B,
3、其他:firebase平台替换push证书(teamID和P8文件)
4、注意:账号B一旦开启了接受转移,同一个苹果账号再去登录时 就已经是新的accountId了,也就是个业务新账号(uid)了,所以这里一定要先把苹果登录暂停了,避免脏数据
4、实操步骤和代码
这中间需要分别拿到账号A和账号BClientSecret和AccessToken 两个值
正常的accountiD= 000819.5e6660b7c0d743209502d4752cd9c80f.2122 (注意看是3段)
中间状态的sub= 000819.re79de9436ffc4b36bdb777030702d4cb 注意这里少一段
使用到的三个苹果接口
1、 /auth/token 接口拿到AccessToken值
2、/auth/usermigrationinfo 拿到中间tranferSub值
3、/auth/usermigrationinfo 拿到最终的苹果ID (和上面的是同一个接口,但是请求参数不一样)
Java核心工具类:
package user.helper.auth;
import com.alibaba.fastjson.JSONObject;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
impo

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



