cloudbase_auth

Pub

cloudbase_auth 为 CloudBase Flutter SDK plugin 之一,提供了在 Flutter 项目中调用 CloudBase 登录的能力,其他CloudBase能力需要登录后才能使用。

目前 Cloudbase Flutter 支持的登录方式有:

  • 微信授权登录(微信开放平台的移动应用授权)
  • 自定义登录
  • 匿名登录

开发者需要在初始化资源后即调用登录授权方法,登录成功后即可调用 CloudBase Flutter 提供的功能插件。

  • 安装
  • 获取登录对象
  • 获取登录状态
  • 微信授权登录 (#微信授权登录)
  • 自定义登录 (#自定义登录)
  • 匿名登录 (#匿名登录)
  • 获取用户信息 (#获取用户信息)
  • 退出登录 (#退出登录)

安装

在 flutter 项目的 pubspec.yaml 文件的 dependencies 中添加

dependencies:
  cloudbase_core: ^0.0.2
  cloudbase_auth: ^0.0.2

获取登录对象

示例代码

import 'package:cloudbase_core/cloudbase_core.dart';
import 'package:cloudbase_auth/cloudbase_auth.dart';

// 初始化
CloudBaseCore core = CloudBaseCore.init({
    'env': 'xxx'
});

// 获取登录对象
CloudBaseAuth auth = CloudBaseAuth(core);

获取登录状态

开发者可以通过 getAuthState() 来获取当前的登录状态,调用 getAuthState() 后,SDK 会识别本地是否有登录状态,如果有,则会尝试刷新登录状态,若刷新登录状态成功,则会返回新的登录状态,否则返回 null

请求参数

示例代码

import 'package:cloudbase_core/cloudbase_core.dart';
import 'package:cloudbase_auth/cloudbase_auth.dart';

// 初始化
CloudBaseCore core = CloudBaseCore.init({
    'env': 'xxx'
});

// 获取登录对象
CloudBaseAuth auth = CloudBaseAuth(core);

// 获取登录状态
await auth.getAuthState().then((authState) {
    if (authState != null) {
        // 登录态有效
    } else {
        // 没有登录态,或者登录态已经失效
    }
})

微信授权登录

申请和绑定微信 Appid

1 请到 微信开放平台 进行登记,登记并选择移动应用进行设置后,将该应用提交审核,审核通过后获得 Appid

2云开发控制台 绑定微信开放平台的 Appid ,并启动该登录方式。

添加 Android 配置

1微信开放平台-管理中心-应用详情 配置Android开发信息: 包名和应用签名。

应用签名可以使用微信开放平台提供的 签名生成工具

2 在你的包名相应目录下新建一个 wxapi 目录,并在该 wxapi 目录下新增一个 WXEntryActivity 类,该类继承自 Activity

3 WXEntryActivity 类的代码如下:

package com.tcloudbase.fluttersdk.demo.wxapi;

import android.app.Activity;
import android.os.Bundle;

import androidx.annotation.Nullable;
public class WXEntryActivity extends Activity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
}

4 在 Android 项目的 manifest 文件里面加上:

<activity
    android:name=".wxapi.WXEntryActivity"
    android:theme="@android:style/Theme.Translucent.NoTitleBar"
    android:exported="true"
    android:taskAffinity="net.sourceforge.simcpux"
    android:launchMode="singleTask">
</activity>

添加 iOS 配置

1 配置应用的 Universal Links

1.1 根据苹果文档配置你应用的 Universal Links

1.2 打开 Associated Domains 开关,将Universal Links域名加到配置上。

2微信开放平台-管理中心-应用详情 配置iOS开发信息: Bundle IDUniversal Links

3 在 Xcode 中,选择你的工程设置项,选中 TARGETS 一栏,在 Info 标签栏的 URL Types 添加 URL Schemes 为你所注册的 Appid

4 在 Xcode 中,选择你的工程设置项,选中 TARGETS 一栏,在 Info 标签栏的 LSApplicationQueriesSchemes 添加 weixinweixinULAPI

import 'package:cloudbase_core/cloudbase_core.dart';
import 'package:cloudbase_auth/cloudbase_auth.dart';

// 初始化
CloudBaseCore core = CloudBaseCore.init({
    'env': 'xxx'
});

// 获取登录对象
CloudBaseAuth auth = CloudBaseAuth(core);

// 获取登录状态
CloudBaseAuthState authState = await auth.getAuthState();

// 唤起微信登录
if (authState == null) {
    await auth.signInByWx(wxAppId, wxUniLink).then((success) {
        // 登录成功
    })catchError((err) {
        // 登录失败
    });
}

自定义登录

CloudBase 允许开发者使用特定的登录凭据 Ticket 对用户进行身份认证。开发者可以使用服务端 SDK 来创建 Ticket,并且将 JWT 传入到 Flutter 应用内,然后调用 signInWithTicket() 获得 CloudBase 的登录态。

获取私钥文件

登录腾讯云云开发控制台,在用户管理页面中,点击“登录设置”,然后生成并下载私钥

云开发下载私钥

使用私钥文件

获取私钥文件之后,在服务端 JS SDK 初始化时,加入私钥文件的路径:

// 开发者的服务端代码
// 初始化示例
const tcb = require('tcb-admin-node');

// 1. 直接使用下载的私钥文件
tcb.init({
  // ...
  env: 'your-env-id',
  credentials: require('/path/to/your/tcb_custom_login.json')
});

// 2. 也可以直接传入私钥的内容
tcb.init({
  // ...
  env: 'your-env-id',
  credentials: {
    private_key_id: 'xxxxxxxxxxxxx',
    private_key: 'xxxxxxxxxxx'
  }
});

使用服务端 JS SDK 创建登录凭据 Ticket

服务端 JS SDK 内置了生成 Ticket 的接口,开发者需要提供一个自定义的 customUserId 作为用户的唯一身份标识。Ticket 有效期为 5 分钟,过期则失效。

每个用户的 customUserId 不能相同,每次用户重新登录时,原有的登录态将会失效。

let customUserId = '123456';

const ticket = tcb.auth().createTicket(customUserId, {
  refresh: 10 * 60 * 1000 // 每十分钟刷新一次登录态, 默认为一小时
});
// 然后把 ticket 发送给 Web 端

Flutter 端上使用 Ticket 登录

创建 Ticket 之后,开发者应将 Ticket 发送至 Flutter 端,然后使用 Flutter SDK 提供的 signInWithTicket() 登录 CloudBase:

import 'package:cloudbase_core/cloudbase_core.dart';
import 'package:cloudbase_auth/cloudbase_auth.dart';

// 初始化
CloudBaseCore core = CloudBaseCore.init({
    'env': 'xxx'
});

// 获取登录对象
CloudBaseAuth auth = CloudBaseAuth(core);

// 获取登录状态
CloudBaseAuthState authState = await auth.getAuthState();

// 唤起自定义登录
if (authState == null) {
    await auth.signInWithTicket(ticket).then((success) {
        // 登录成功
    })catchError((err) {
        // 登录失败
    });
}

匿名登录

CloudBase 允许开发者启用匿名登录模式,在没有用户身份认证的情况下使用 CloudBase 资源。开发者调用 signInAnonymously() 即可获得 CloudBase 的登录态。

启用匿名登录模式

登录腾讯云云开发控制台,在用户管理页面中,点击“登录设置”,然后启用匿名登录

在 Flutter 端调用匿名登录

import 'package:cloudbase_core/cloudbase_core.dart';
import 'package:cloudbase_auth/cloudbase_auth.dart';

// 初始化
CloudBaseCore core = CloudBaseCore.init({
    'env': 'xxx'
});

// 获取登录对象
CloudBaseAuth auth = CloudBaseAuth(core);

// 获取登录状态
CloudBaseAuthState authState = await auth.getAuthState();

// 唤起匿名登录
if (authState == null) {
    await auth.signInAnonymously().then((success) {
        // 登录成功
    })catchError((err) {
        // 登录失败
    });
}

获取用户信息

任何方式登录成功后,可以调用 getUserInfo 获得用户的 Cloudbase 身份信息。

请求参数

响应参数

字段类型是否必备说明
uuidString用户在云开发的唯一ID
envString用户使用的云开发环境
loginTypeString用户登录类型
appidString微信(开放平台或公众平台)应用appid
openidString当前用户在微信(开放平台或公众平台)应用的openid
appidString微信(开放平台或公众平台)应用appid
openidString当前用户在微信(开放平台或公众平台)应用的openid
nickNameString用户昵称
genderString用户性别,male(男)或female(女)
countryString用户所在国家
provinceString用户所在省份
cityString用户所在城市
avatarUrlString用户头像链接

示例代码

import 'package:cloudbase_core/cloudbase_core.dart';
import 'package:cloudbase_auth/cloudbase_auth.dart';

// 初始化
CloudBaseCore core = CloudBaseCore.init({
    'env': 'xxx'
});

// 获取登录对象
CloudBaseAuth auth = CloudBaseAuth(core);

// 获取登录状态
CloudBaseAuthState authState = await auth.getAuthState();

// 获取用户信息
if (authState != null) {
    await auth.getUserInfo().then((userInfo) {
        // 获取用户信息成功
    })catchError((err) {
        // 获取用户信息失败
    });
}

退出登录

请求参数

示例代码

import 'package:cloudbase_core/cloudbase_core.dart';
import 'package:cloudbase_auth/cloudbase_auth.dart';

// 初始化
CloudBaseCore core = CloudBaseCore.init({
    'env': 'your-env-id'
});

// 获取登录对象
CloudBaseAuth auth = CloudBaseAuth(core);

// 退出登录
await auth.signOut();

Libraries

cloudbase_auth