Android uniapp SDK

概述

AuthCenter-uniapp 为广大安卓手机开发者提供了多种登录认证模块的SDK包,辅助开发者快速接入登录、注册、生物认证等功能。 AuthCenter-uniapp基于开源库AppAuth,也基于OAuth 2.0和OpenID Connect的现代认证的解决方案。在AppAuth的基础上,AuthCenter SDK还提供了Embedded Webview的认证场景: 场景一、AppAuth开源认证,基于Custom Tabs方案(Custom Tabs 是 Android 平台上的一个功能,它允许应用程序在内部使用对custom tabs API支持浏览器的标签页 ,而无需用户离开应用程序),但国内绝大部分浏览器对custom tabs API不支持,只能使用系统浏览器进行认证(跨应用); 场景二、Embedded Webview实现app内嵌webview认证方案,在Custom Tabs浏览器支持很少下,Embedded Webview下的认证方案,覆盖全机型,体验好、适配少、安全性高。该方案不仅支持通用的认证方法,还支持Passkeys的生物认证方法,使用Passkeys在APP内一键登录,快捷、安全、效率高,Embedded Webview内Passkeys的接入方法见【通用密钥认证】。 本文档接入的是离线打包机制,需要集成到HBuilderX环境运行&发行的需求,请参考uni-app官方介绍,相关的参数配置可以参考本文档介绍,uni-app的接入需要有一定的uni-app基础。

最新SDK包

模块名 SDK包 最新版本 文件大小 下载链接
认证SDK AuthnCenter-release-0.9-8.aar 0.9.8 222,953 bytes 下载地址


SDK包介绍

Android SDK支持的版本

系统版本 说明
>= 4.4 场景二的接口可用的最低版本
all supported versions of Android 场景一

AuthnCenterUniSDK类

AuthnCenterUniSDK类 ,SDK的管理类,负责内部功能参数设置。

/**
 * SDK初始化
 */
@UniJSMethod (uiThread = true)
public void initContext()


/**
 * 启动SDK认证
 * @param jsonObject,关于各个参数介绍,请参考native sdk接口设置部分
 * Json格式:
 * {
 *     "clientId":"",
 *     "redirectUrl":"",
 *     "endSessionRedirectUrl":"",
 *     "authorizationScope":"",
 *     "authorizationEndpointUrl":"",
 *     "authorizationTokenEndpointUrl":"",
 *     "userInfoEndpointUri":"",
 *     "endSessionEndpoint":"",
 *     "launchSheme":"",
 *     "defaultbrowser":{"packagename":"","useCustomTab":false },
 *     "discoveryUri":"",
 *     "authorizationScene":0 //0系统浏览器 ,1是webview
 * }
 *
 * @param callback 认证返回接口
 *      成功回调:json格式{"code":0,"access_token":"","id_token":"",expires_in:""}
 *      失败回调:参考接口文档errCode
 *
* */
public void getAuthenticationIntent(JSONObject jsonObject,UniJSCallback callback)


/**
 * 清空本地的登录态
 * @param callback : 清空后回调信息
 *                 成功回调: json格式{"code":200}
 *                 失败回调: 参考接口文档errCode
 */
public void endSession(JSONObject jsonObject,UniJSCallback callback)


/**
 * 获取系统浏览器信息
 * @param callback   json JSONArray: [{"packagename":"" , "isCustomTab":,"icon":"" , "version":""}]
 **/
public void getBrowserSelectors(JSONObject jsonObject,UniJSCallback callback)

其中getAuthenticationIntent认证必填项:

{
     "clientId":"",
     "redirectUrl":"",
     "authorizationScope":"",
     "authorizationEndpointUrl":"",
      "launchSheme":"",
      "authorizationScene":0 //0系统浏览器 ,1是webview
 }

必须接口中参数来源说明(关于url域名的绝对地址拼装,参考【概述】-【域名地址配置说明】):

接口 参数名 参数来源/值
setClientId APPID 超管在统一身份认证后台配置后提供,见【准备工作】
setAuthorizationScope scope 超管在统一身份认证后台配置后提供,见【准备工作】
setRedirectUri Redirect url 超管在统一身份认证后台配置后提供,见【准备工作】
setAuthorizationTokenEndpointUri Accesstoken url 域名,相对路径 : /accessToken
setAuthorizationEndpointUri Authorization url 域名,相对路径 : /authorize

SDK接口错误码

Code值 定义
-2 用户取消认证, 过程中用户遇到的实际错误可以通过浏览器上报参数获取
-4 获取token过程中,用户主动取消
-5 获取token失败
100 启动getAuthenticationIntent失败,与参数设置正确与否有关联

离线打包项目工程配置

SDK内部会接受scheme的响应,在认证过程中,非内嵌webview认证场景会通过scheme通知app,所以在sdk内部manifest.xml使用appAuthRedirectScheme参数占位scheme字符串,APP项目工程的build.gradle脚本需配置:

manifestPlaceholders.putIfAbsent("appAuthRedirectScheme", "net.rj.appauth")

”net.rj.appauth“为例子,接入方可以修改为自己的命名。在调用SDK接口中,需要通过接口:getAuthenticationIntent的launchSheme设置到SDK中.

HBuilderX工程调用示例

请通过HBuilderX工程编写vue代码,并生成可执行的js代码,拷贝到离线打包工程assets对应目录下。

var rjAuthorModule = uni.requireNativePlugin("rj_authcenter");
const modal = uni.requireNativePlugin('modal');

data() {
    return {
      formData:{
          clientId:'OC4wNS4wNS4wNy4wMC4wMy4wMS4wMS4w',
          redirectUrl:'https://s10sso.ruishan.cc/gate/public/sdkAuth/index.html',
          endSessionRedirectUrl:'https://s10sso.ruishan.cc/gate/public/sdkAuth/index.html',
          authorizationScope:'openid',
          authorizationEndpointUrl:'https://s10sso.ruishan.cc/cas/oidc/authorize',
          authorizationTokenEndpointUrl:'https://s10sso.ruishan.cc/cas/oidc/accessToken',
          userInfoEndpointUri:'https://s10sso.ruishan.cc/cas/oidc/profile',
          endSessionEndpoint:'https://s10sso.ruishan.cc/cas/oidc/logout',
          launchSheme:'net.rj.appauth',
          defaultbrowser:'{"packagename":"","useCustomTab":false }',
          discoveryUri:'',
           authorizationScene:0 //0系统浏览器 ,1是webview
         }
   };
}

getAuthenticationIntent() {
    rjAuthorModule.initContext();
    rjAuthorModule.getAuthenticationIntent(JSON.stringify(this.formData),(ret) => {
            modal.toast({
                    message: ret,
                    duration: 1.5
                    });
                    })
}

Embedded Webview内通用密钥认证集成

国内支持通行密钥的机型不是很多,其中对通行密钥有适配的为华为和OPPO机型,使用系统浏览器可以通过Passkeys注册和认证。在APP内,场景一的使用,可以天然的使用Passkeys的功能;但在embedded webview上,passkeys是不支持的,需要我们单独的接入平台的认证器SDK。 本篇介绍的是使用Embedded Webview接入通行密钥的方案。当前webview支持华为和OPPO的机型,需要分别对两个平台进行接入配置。

注: 场景二使用Passkeys必须配置该章节内容。

Embedded Webview内通信密钥支持平台

平台 版本
华为机型 >=4.0(不支持HarmonyOS NEXT)
OPPO >= 2022年发布机型

华为webview通行密钥接入

  1. 配置AppGallery Connect

  2. 集成HMS Core配置文件,如果在AppGallery Connect中开通了相关服务则需要将“agconnect-services.json”文件添加到您的App中。

    • a. 登录AppGallery Connect网站,点击“我的项目”。
    • b. 在项目列表中找到您的项目,在项目中点击需要集成HMS Core SDK的应用。
    • c. 在“项目设置 > 常规”页面的“应用”区域,点击“agconnect-services.json”下载配置文件。 image-2024102917470108
    • d.离线版本下的sdk打包方法:将“agconnect-services.json”文件拷贝到应用级根目录下。
    • e.HBuilderX工程配置 :拷贝文件到 nativeplugins/${yourpluginname}/android/assets image-2024102917470109

OPPO webview通行密钥接入

  • 创建一个 JSON 文件。例如,如需声明网站 https://s10sso.ruishan.cc 和软件包名 com.ruishan.authcenter 的 Android 应用可以共享通行密钥,请使用以下内容创建一个名为 fido2-trusted-facets.json 的文件:
    [
    {
      "relation" : [
        "delegate_permission/common.get_login_creds"
      ],
      "target" : {
        "namespace" : "android_app",
        "package_name" : "com.ruishan.authcenter",
        "sha256_cert_fingerprints" : [
          SHA_HEX_VALUE
        ]
      }
    }
    ]
    
    relation 字段是包含一个或多个字符串的数组,用于描述所声明的关系。如需声明应用和网站可共享登录凭据,请指定字符串 delegate_permission/common.get_login_creds。 target 字段是一个对象,用于指定声明所适用的资源。 以下字段用于标识 Android 应用:
namespace android_app
package_name 应用的清单文件中声明的软件包名称,例如 com.ruishan.authcenter
sha256_cert_fingerprints 应用的 签名证书 的 SHA256 指纹。
  • 将这个 JSON 文件托管在登录网域中 例如,如果你的登录网域是 s10sso.ruishan.cc,请将 JSON 文件托管在以下位置。Digital Asset Links 文的 MIME 类型需为 JSON。确保服务器在响应中发送 Content-Type: application/json 标头。
    https://s10sso.ruishan.cc/.well-known/fido2-trusted-facets.json
    

统一认证服务端配置:识别APP认证

sso组件:application-sys.properties中加入APP的签名:

cas.authn.mfa.web-authn.core.allowed-originsandroid:apk-key-hash:aSCmCAdGEhSJ3kMYwTaM+bT50xosoqoQoIwSIjKfm+g

其中aSCmCAdGEhSJ3kMYwTaM+bT50xosoqoQoIwSIjKfm+g为例子,需要填入接入APP的key-hash。

计算 Key Hash: 使用以下命令来计算 Key Hash:
echo -n "<your_sha1_value>" | openssl sha1 -binary | openssl base64
将 <your_sha1_value> 替换为你APP签名的SHA1值。

UNI-APP的调用DEMO:

UNI-APP的调用DEMO地址

©2025 锐捷网络股份有限公司 all right reserved,powered by Gitbook该文章修订时间: 2026-05-07 11:14:26

results matching ""

    No results matching ""