跳转到内容

登录认证

FRVR.auth 把当前玩家在 FRVR 后端做认证 —— 走 FRVR 账号、平台 provider(Facebook、Google Play、Apple……)或匿名登录。

登录是跨设备能力的把关人:云端存储锦标赛社交排行榜商店 都要走它。

FRVR.config.auth = {};   // 让当前渠道挑自己的 provider

(不需要再调一次 FRVR.init() —— 你已经在启动流程里调过一次了。)

SDK 会按下面顺序自动登录:

  1. 存储里缓存的 token(还没过期),或
  2. 渠道原生凭证(比如 Facebook Instant 会话),或
  3. 匿名登录(如果开启)。
FRVR.config.auth = { enableAnonymousLogin: true };
if (FRVR.auth.isLoggedIn()) {
  const token  = FRVR.auth.getAccessToken();  // JWT,过期则为 null
  const frvrId = FRVR.auth.getFRVRID();       // FRVR user id
}

token 会在大约 60% TTL 时后台自动续 —— 登录状态下 getAccessToken() 你可以认为永远返回新鲜的。

仅当渠道不会自动给用户登录时(通常是 Web)才需要:

await FRVR.auth.loginToFRVR({
  platform: 'frvr',
  credentials: {
    email: 'user@example.com',
    password: 'hunter2',
  },
});

或用渠道给你的 provider 凭证:

await FRVR.auth.loginToFRVR({
  platform: 'facebook-instant',
  credentials: {
    asid: '…',
    appId: '…',
    asidSignedRequest: '…',
  },
});

'frvr' 等平台字符串来自 SDK 包导出的 Platform 枚举(Platform.FRVRPlatform.FACEBOOK_INSTANT 等);它们不在 window.FRVR 上,所以这里直接用字符串字面量。

await FRVR.auth.registerOnFRVR(
  { email, password, firstName, lastName },
  /* ifConflictTryLogin = */ true
);

ifConflictTryLogin = true 时,「账号已存在」错误会自动降级为登录尝试。

await FRVR.auth.loginAsAnonymous();

匿名会话仍会保留一个稳定的 ID。之后可以用 registerOnFRVR 把它升级成正式账号。

if (FRVR.auth.isLogoutSupported()) {
  await FRVR.auth.logout();
}

某些渠道不支持登出(玩家始终通过宿主应用登录) —— 先检查再调。

FRVR.auth.addStatusChangeListener(({ isLoggedIn, platform }) => {
  if (isLoggedIn) refreshPlayerUI();
  else            showLoggedOutState();
});

登录、登出、token 续期时都会触发。

方法作用
init()自动登录(FRVR.init 会调用)。
isLoggedIn()是否有有效会话?
isLoggingIn()是否正在登录?
getAccessToken()调后端用的 JWT。
getFRVRID()当前用户的 FRVR id。
isVerified()邮箱是否已验证(仅 FRVR 账号)。
getCurrentPlatform()哪个 provider 完成了登录('FRVR''facebook'……)。
getAvailableLoginPlatforms()你还能提供的其他 provider。
loginToFRVR(req)显式登录。
loginAsAnonymous()匿名会话。
registerOnFRVR(creds, ifConflictTryLogin?)创建账号并登录。
logout()清除会话。
isLogoutSupported()当前渠道是否允许登出?
addStatusChangeListener(fn)订阅会话变化。