目前是在Unity的Editor里、国际版leancloud开发环境,SDK版本号不知道在哪里看。
注册、登录都可以成功。但重新在Editor里运行app时,以下代码得到的是null,每次都需要重新登录

var currentUser = await LCUser.GetCurrent();

是的,目前 SDK 没有做 session token 的缓存。
所以,目前的方式是在登录成功后,将 SessionToken 保存至 PlayerPrefs;在下次登录时,调用 LCUser.BecomeWithSessionToken() 登录。

谢谢!我记得旧版的SDK是有的呢。

1 请问Login或Signup如何得到session token呢?例如以下的代码中:

LCUser.Login(userName, password).ContinueWith(t =>
{}

2 ContinueWith由于不是主线程,很多Unity的API是无法使用的。旧版里对此并无处理需要自己写个支持的机制。请问新版有针对这个问题提供什么API吗?

旧版是有的,新版目前是使用标准的 .net standard 2.0 实现的,所以没有 unity 相关的代码。
(不过最近在计划如何实现了)

1 请问Login或Signup如何得到session token呢

参考 这里1 可以拿到 LCUser 的 SessionToken

2 ContinueWith由于不是主线程,很多Unity的API是无法使用的。

强烈建议使用 async/await 方式,一是在 await 之后还会切回主线程;二是可以避免嵌套太深,不容易阅读。

好的谢谢!
1 我记得旧版文档里用的都是ContinueWith,这样当出错时可以处理。如果用await的方式,参考那些Test代码,判断Login/Signup/BecomeWithSessionToken是否成功的方式是否如下?

LCUser current = await LCUser.GetCurrent();
if (current.ObjectId == null)
{
    // 出错,需处理
}
else
{
    // 成功
}

2 当Login/Signup/BecomeWithSessionToken按照问题1的方式判断成功后,是否还需要做bool isAuthenticated = await currentUser.IsAuthenticated();的判断?

错误处理参考

try {
  LCUser user = await LCUser.Login("username", "password");
  // 成功
} catch (LCException e) {
  // LeanCloud 错误,如密码错误等,参考错误码
} catch (Exception e) {
  // 其他错误,如网络异常
}

IsAuthenticated 的作用是检查 session token 是否有效,Login/Signup/BecomeWithSessionToken 成功后的 session token 一定有效的,不需要再判断。
后续支持了本地持久化 session token,可能需要 IsAuthenticated 判断

原来是这样,非常感谢!很有帮助!

谢谢!请问这样的方式是否还需要验证IsAuthenticated

current_user = leancloud.User.get_current()
if current_user is not None:
    # 这里是否还需要验证IsAuthenticated ?
    pass
else:
    # 显示注册或登录页面
    pass

需不需要验证 IsAuthenticated 是看应用的需求的。
缓存 User 的数据的目的是,在离线或启动时就能拿到 User 数据。而具体 User token 是否过期,或者说应用对 token 过期是否敏感,是要看应用的需求的。

1 人赞了这个帖子.