场景简介

当同时存在多个app需要集成sdk,且多个app需要使用同一个用户登陆时,如果每个应用都去做用户名密码认证,不仅体验不佳,且会占用多个授权,为了解决此场景,sdk提供了专门用于主从场景的接口,只需要主应用做用户名密码认证,子应用通过接口向主应用同步授权信息即可进行免密上线

前置步骤

  1. 在实际集成之前,我们要确保已经进行过开发准备
  2. 在控制台创建测试用户,并配置好用户名密码认证,参考产品手册

流程图

流程图

集成步骤

1、实现主认证

参考典型场景用户名密码认证

2、声明被子应用拉起的url scheme

在module.json5文件中中对应处理子应用拉起的ability中的skills标签中声明scheme协议,可以参考Demo,用于子应用调用SDK接口拉起主应用进行授权,里面的scheme是固定的,但host应用填用户当前应用的包名

"uris": [
    {
    "scheme": "SFEasyApp",
    "host": "com.sangfor.sdkdemo"
    }
]

3、监听被子应用拉起事件

注意:推荐放到UIAbility里面注册监听事件,避免注册时机过晚以及注册监听被销毁,可以参考SDKDemo的处理方法

示例代码如下:

    export default class EntryAbility extends UIAbility implements SFLaunchListener

    onAppLaunched(launchInfo: SFLaunchInfo): void {
        console.log("onAppLaunched with", JSON.stringify(launchInfo))
    }

4、处理被子应用拉起事件

launchApp接口详情

示例代码如下:

    onAppLaunched(launchInfo: SFLaunchInfo): void {
        console.log("onAppLaunched with", JSON.stringify(launchInfo))
        this.handleBeLaunched(launchInfo)
    }

    private async handleBeLaunched(launchInfo: SFLaunchInfo) {
        const isOnlineStatus = await SFUemSDK.getInstance().getSFAuth().getAuthStatus()
        if (!isOnlineStatus) {
            promptAction.showToast({
                message: "主应用尚未认证成功,请先认证"
            })
            return;
        }

        try {
            const dialogResult = await promptAction.showDialog({
                title: `“${launchInfo.srcAppName}”申请获取“SDKDemo”的网关登录信息,是否同意`,
                buttons: [{
                    text: "取消", color: Color.Red.toString()
                }, {
                    text: "确定", color: Color.Black.toString()
                }]
            })

            if (dialogResult.index == 1) {
                const reason = SFLaunchReason.SFLaunchReasonSubappAuthBack
                const launch = SFUemSDK.getInstance().getSFLaunch()
                const launchResult = await launch.launchApp(launchInfo.srcAppBundleId, reason, "")
                console.log(`launch subApp ${launchInfo.srcAppBundleId} result ${launchResult}`)
            }
        } catch (e) {
            console.error("弹框异常:", e);
        }

    }

5、主应用主动拉起子应用

launchApp接口详情

有些用户应用具备工作台的能力,即可以在主应用里面主动点击子应用图标拉起子应用,此时可以调用此接口,来拉起子应用,避免出现主动拉起子应用后,子应用还需要再次授权的问题

注意:如果没有主应用主动拉起子应用的需求,可以不使用此接口

示例代码如下:

// launchInfo.srcAppBundleId是子应用的包名
const reason = SFLaunchReason.SFLaunchReasonSubappAuthBack
const launchResult = await launch.launchApp(launchInfo.srcAppBundleId, reason, "")
console.log(`launch subApp ${launchInfo.srcAppBundleId} result ${launchResult}`)

results matching ""

    No results matching ""