Lite SDK Enrollment 卓系统 Enrollment
本页提供了用于安卓注册的 YunoLite SDK 指南。该 SDK 简化了集成流程,具有基本的注册功能,非常适合有以下需求的商家:
- 需要快速实施,并将定制要求降至最低
- 希望将重点主要放在付款方式注册上
- 首选可处理注册流程的即用型用户界面
Lite SDK 包括以下核心功能:
- 预置的注册用户界面组件
- 卡片注册处理
- 基本注册状态处理
- 基本错误管理
对于需要多种支付方式、自定义用户界面或高级防欺诈等更高级功能的商户,请考虑使用我们的 Full SDK来代替。
要求
在开始 Yuno Android SDK 集成之前,请确保您的项目符合技术要求。此外,还要确保具备以下先决条件:
- 您必须拥有一个激活的 Yuno 帐户
- 您需要 Yuno API 凭据 (
public-api-key),您可以从 Yuno 仪表板的开发人员部分 - 在注册付款方式之前,必须先使用创建客户endpoint创建一个客户
步骤 1:创建客户
在 Yuno 系统中使用 创建客户endpoint 在注册付款方式之前,该端点将返回该endpoint 将返回一个 customer_id 用于将已注册的付款方式与特定客户关联起来。
endpoint 将返回一个 customer_session 在调用注册方法时需要使用。
第 2 步:在项目中加入程序库
将 YunoLite SDK 添加到您的 Android 项目中:
添加存储库
将 Yuno 的 Maven 仓库添加到项目的 Gradle 配置中:
maven { url "https://yunopayments.jfrog.io/artifactory/snapshots-libs-release" }在 build.gradle 文件,将 Yuno SDK 依赖关系添加到应用程序中:
dependencies {
implementation 'com.yuno.payments:android-sdk:{last_version}'
}权限
Yuno SDK 包括 INTERNET 默认情况下,该权限是提出网络请求所必需的。
<uses-permission android:name="android.permission.INTERNET" />步骤 3:使用公钥Initialize SDK
Initialize SDK:
- 从Yuno 控制面板获取公共 API 密钥
- 如果尚未创建自定义应用程序类,请创建自定义应用程序类
- 在
onCreate()方法,调用Yuno.initialize()使用您的 API 密钥:
class CustomApplication : Application() {
override fun onCreate() {
super.onCreate()
Yuno.initialize(
this,
PUBLIC_API_KEY,
config: YunoConfig,
)
}
}使用数据类 YunoConfig 来定制 SDK 的行为。在调用 Yuno.initialize().可用的选项有
data classYunoConfig(
val cardFlow:CardFormType =CardFormType.ONE_STEP、
val saveCardEnabled:Boolean = false、
val keepLoader:Boolean = false、
val cardFormDeployed:Boolean = false、
val language:YunoLanguage? = null、
val styles:YunoStyles? = null
)下表介绍了每个自定义选项:
定制选项 | 说明 |
|---|---|
卡片流 | 该可选配置定义了支付和注册卡流程。默认情况下 |
SaveCardEnabled | 启用卡片流上的保存卡片复选框。请参阅保存卡片部分了解更多信息。 |
保持装载机 | 保留 Yuno 的加载屏幕,直到您创建并继续付款。要使用此功能,请使用功能 |
语言 | 定义付款表单中使用的语言。您可以将其设置为可用语言选项之一:
|
| |
款式 | 支持 SDK 范围内的用户界面自定义。使用它可以定义全局可视化样式,如字体家族和按钮外观(颜色、填充、半径、排版)。 |
您还需要更新您的清单,以便使用您的应用程序:
<application android:name=".CustomApplication"></application>步骤 4:注册新的付款方式
注册流程分为两步。首先,initialize 流程,设置必要的组件。然后,启动用户界面流程,让用户注册付款方式。
4.1Initialize 注册程序
致电 initEnrollment 方法中的 onCreate 方法来准备您的应用程序以处理注册流程。这是 Android 操作系统要求的一个强制设置步骤,目的是注册合约,以便 SDK 将最终注册状态发送回您的应用程序。
fun ComponentActivity.initEnrollment(
callbackEnrollmentState: ((String?) -> Unit)? = null
)4.2 启动注册流程
致电 startEnrollment 方法启动用户界面并开始注册新的支付方式。您可以在 initEnrollment 例如当用户点击 "注册新付款方式 "按钮时。
fun Activity.startEnrollment(
customerSession:String、
countryCode:countryCode: String、
showEnrollmentStatus:Boolean = true、
callbackEnrollmentState: ((String?) -> Unit)? = null、
requestCode:Int
)下表介绍了 startEnrollment 参数
回拨注册状态
"(《世界人权宣言》) callbackEnrollmentState 参数是一个返回当前注册流程状态的函数。只有在要跟踪注册状态时才提供该函数。
使用 AppCompatActivity.enrollmentStatus() 函数来随时检查当前的注册状态。该函数是可选的,接受的参数与 startEnrollment.以下代码块显示了函数签名:
fun AppCompatActivity.enrollmentStatus(
customerSession:String、
countryCode:countryCode: String、
showEnrollmentStatus:Boolean = false、
callbackEnrollmentState: ((String?) -> Unit)? = null、
)
可选功能使用功能
enrollmentStatus是可选的。这不是完成注册过程的必要条件。 了解更多
回调覆盖如果在调用函数时提供新的回调
enrollmentStatus时设置的回调。initEnrollment.
下面的代码块显示了可能的状态:
const valSUCCEEDED=SUCCEEDED" (SUCCEEDED")
const val ENROLLMENT_STATE_FAIL = "FAIL" (失败)
const val ENROLLMENT_STATE_PROCESSING = "PROCESSING" (处理中)
const val ENROLLMENT_STATE_REJECT = "REJECT" (拒绝)
const val ENROLLMENT_STATE_INTERNAL_ERROR = "INTERNAL_ERROR" (内部错误)
const val ENROLLMENT_STATE_CANCELED_BY_USER = "CANCELED" (取消)下表提供了有关可能状态的更多信息:
| 国家 | 说明 | 需要采取的额外行动 |
|---|---|---|
SUCCEEDED | 注册过程顺利完成,未出现任何错误。 | 不 |
FAIL | 由于数据验证问题、服务器连接失败或技术问题等错误,注册尝试失败。 | 调查故障原因(验证、网络、服务器)并采取纠正措施。 |
PROCESSING | 目前报名正在进行中,等待批准或核实。 | 不 |
REJECT | 由于缺少要求或检测到不一致等原因,注册被拒绝。 | 是的,通知用户被拒绝,尽可能说明原因,并建议下一步措施。 |
INTERNAL_ERROR | 处理注册过程的系统出现意外内部错误。 | 是。需要技术干预,以审查系统、修复内部问题、重试或通知用户。 |
CANCELED | 用户自愿取消注册过程或在注册完成前退出。 | 不 |
使用 OnActivityResult 方法
OnActivityResult 方法
已废弃的方法"(《世界人权宣言》)
onActivityResult方法已经过时。如果要执行新的 Android 集成,Yuno 建议使用initEnrollment()合同,该合同遵循谷歌的最佳实践。
当活动返回结果时,会自动调用onActivityResult方法。只要注册状态发生变化,就可以使用该选项执行操作。请按照以下步骤处理注册结果:
使用默认请求代码如果您使用的是
onActivityResult方法,但没有通知requestCode在调用startEnrollment于 步骤 3您必须使用YUNO_ENROLLMENT_REQUEST_CODE由 Yuno 提供。
- 覆盖
onActivityResult方法。这样可以确保层次调用得到尊重。
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
}- 检查是否
requestCode相当于YUNO_ENROLLMENT_REQUEST_CODE.由于您正在运行Yuno您可以在应用程序中导入YUNO_ENROLLMENT_REQUEST_CODE来使用它。
如果 (requestCode == YUNO_ENROLLMENT_REQUEST_CODE) {
}- 如果
requestCode匹配,处理注册结果。使用YUNO_ENROLLMENT_RESULT由 Yuno 库提供的密钥。创建一个onEnrollmentStateChange函数来处理状态变化。
onEnrollmentStateChange(data.getStringExtra(YUNO_ENROLLMENT_RESULT))下面的代码块显示了使用 OnActivityResult 方法,以便在注册状态发生变化时执行函数:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == YUNO_ENROLLMENT_REQUEST_CODE) {
val enrollmentState = data?.getStringExtra(YUNO_ENROLLMENT_RESULT)
onEnrollmentStateChange(enrollmentState)
}
}
fun onEnrollmentStateChange(enrollmentState: String?) {
when (enrollmentState) {
"SUCCEEDED" -> {
}
"FAIL" -> {
}
}
}步骤 5:获取注册状态
致电 initEnrollment 方法中的 onCreate 方法注册回调,以获取最终的注册状态。
补充功能
Yuno Android SDK 提供额外的服务和配置,您可以用来改善客户体验。使用SDK 定制功能可更改 SDK 外观,使其与您的品牌相匹配,或配置加载器。
styles
styles随着 styles 自定义选项,您可以通过一个 YunoStyles 对象。通过自定义按钮外观和排版,您可以在整个 SDK 中应用一致的品牌。
data classYunoStyles(
val buttonStyles:YunoButtonStyles? = null、
val fontFamily:= null
)| 参数 | 说明 |
|---|---|
buttonStyles | 自定义 SDK 中显示的主要按钮。 |
fontFamily | 设置所有 SDK 文本元素使用的字体系列。 |
"(《世界人权宣言》) YunoButtonStyles 对象可让您定义按钮外观的特定设置:
data class YunoButtonStyles(
val backgroundColor: Color? = null、
val contentColor: Color? = null、
val cornerRadius:= null
val elevation:= null、
val padding:= null、
val fontFamily:= null、
val fontSize:TextUnit? = null、
val fontStyle:FontStyle?
)使用 YunoConfig 数据类,以使用步骤 3 中描述的 styles 自定义选项。
装载机
通过 keepLoader 参数中的 YunoConfig 数据类,该类已在上文 SDK 配置部分内嵌记录。
渲染选项
您可以选择两种卡片表单渲染选项。下面的截图显示了 cardFormType ONE_STEP 和 STEP_BY_STEP:
SDK 定制
您可以更改 SDK 的外观,使其与您的品牌相匹配。有关详细信息,请参阅SDK 定制页面。
演示应用程序除了提供的代码示例,您还可以查看Yuno 存储库,以完成 Yuno Android SDK 的实施。
渲染模式(报名)
通过 Yuno SDK 渲染模式,您可以将注册流程与完整的 UI 控制集成在一起,同时保留 SDK 验证和逻辑。SDK 返回安卓 Fragment 实例,您可以在 Jetpack Compose(通过 AndroidView)和传统 XML 布局中显示这些实例。
主要功能 startEnrollmentRender
startEnrollmentRenderfun Activity.startEnrollmentRender(
customerSession:String、
countryCode:countryCode: String、
submitButton:Boolean = false、
coroutineScope:CoroutineScope、
listener:YunoEnrollmentRenderListener
):YunoEnrollmentFragmentController参数
| 参数 | 类型 | 需要 | 说明 |
|---|---|---|---|
customerSession | String | 是 | 当前注册流程的客户会话 |
countryCode | String | 是 | 用于区域配置的国家代码 |
submitButton | Boolean | 没有 | 如果 true,SDK 会在内部渲染提交操作;否则,请使用您的用户界面 |
coroutineScope | CoroutineScope | 是 | 用于运行与活动生命周期相关的异步操作的范围 |
listener | YunoEnrollmentRenderListener | 是 | 接收片段、加载和最终状态事件的监听器 |
返回值
返回一个 YunoEnrollmentFragmentController 控制注册流程(如提交表格)。
使用示例
class EnrollmentActivity : Activity() {
private lateinit var fragmentController: YunoEnrollmentFragmentController
private fun initializeEnrollment() {
fragmentController = startEnrollmentRender(
customerSession = "your_customer_session_id",
countryCode = "US",
submitButton = false,
coroutineScope = lifecycleScope,
listener = enrollmentRenderListener
)
}
}接口: YunoEnrollmentRenderListener
YunoEnrollmentRenderListener执行此接口可接收注册片段和事件。
interface YunoEnrollmentRenderListener {
fun showView(fragment: Fragment, needSubmit: Boolean)
fun returnStatus(resultCode: Int, paymentStatus: String)
fun loadingListener(isLoading: Boolean)
}showView(fragment: 片段, needSubmit: 布尔值)
- 接收要在用户界面容器中显示的片段
needSubmit表示是否应显示自己的提交按钮(当submitButton = false)
示例 (XML):
override fun showView(fragment: Fragment, needSubmit: Boolean) {
supportFragmentManager.beginTransaction()
.replace(R.id.enrollment_container, fragment)
.commit()
clientSubmitButton.isVisible = needSubmit
if (needSubmit) {
clientSubmitButton.setOnClickListener { fragmentController.submitForm() }
}
}returnStatus(resultCode: Int, paymentStatus: String)
- 最终注册状态事件。用它来通知用户成功或失败
loadingListener(isLoading: 布尔值)
- 加载状态回调,用于显示/隐藏旋转器和禁用/启用用户界面
override fun loadingListener(isLoading: Boolean) {
progressBar.isVisible = isLoading
clientSubmitButton.isEnabled = !isLoading
}接口: YunoEnrollmentFragmentController
YunoEnrollmentFragmentController返回 startEnrollmentRender 来控制报名流量。
接口 YunoEnrollmentFragmentController {
fun submitForm()
}val fragmentController = startEnrollmentRender(
customerSession = "your_customer_session_id"、
countryCode = "US"、
submitButton = false、
coroutineScope = lifecycleScope、
listener = enrollmentRenderListener
)- 控制流量(必要时提交):
fragmentController.submitForm()渲染模式的优势
用户界面的灵活性
- 与 Compose(通过 AndroidView)和 XML 兼容
- 完全控制视图显示的位置和方式
- 轻松匹配您的应用程序设计系统
流量控制
- 使用
submitForm()
重要考虑因素
- 领带
coroutineScope到您的活动/片段生命周期(如lifecycleScope) - 何时
needSubmit = true渲染自己的提交按钮,并调用submitForm() - 在 Compose 中,将片段放在
AndroidView集装箱
3 个月前已更新