Infinitum 移动 SDK
目录
安装
iOS
可以使用 Cocoapods 将 Infinitum SDK 添加到项目中。
首先,您需要将 Cocoapods 添加到项目中。只需进入终端,导航到项目文件夹,并输入以下命令
pod init
然后前往生成的 Podfile,并添加以下 pod
pod 'InfinitumSDKMobile'
默认情况下,将使用最新版本。
请注意,目前没有对仿真器的支持。
Android
使用Java编写安卓应用程序在能使用Infinitum之前需要做一些配置。由于Infinitum是一个多平台库,它使用Kotlin,因此您需要启用Kotlin。最简单的方法是在您的项目中创建一个随机的Kotlin文件。然后,Android Studio IDE会提示您配置Kotlin。按“ configure”,“ All modules containing Kotlin files”并等待项目同步。第二步,请将以下行添加到您的应用程序 build.gradle中的 android 任务
compileOptions {
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
}
这会使您的应用程序能够使用Java 1.8,该版本引入了lambda表达式到Java中。这使我们能够使用函数作为回调。
要将Infinitum SDK导入您的项目,您需要做以下操作
- 将Jitpack仓库添加到您的项目 build.gradle文件中
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
- 将SDK依赖项添加到您的应用程序 build.gradle文件中
dependencies {
implementation('com.github.infinitum-dev:mobile-sdk:latest-version@aar') {
transitive = true
}
}
- 有时构建可能会因为重复的META-INF文件而失败。要解决此问题,请将以下行添加到您的应用程序 build.gradle文件中的android任务
packagingOptions {
exclude 'META-INF/*.kotlin_module'
}
用法
对我们API的每次调用都需要两个回调,onSuccess和onFailure。onSuccess lambda将根据被调用的方法所需不同的参数。例如,config将需要接收ConfigResponse对象的lambda,doInit需要InitResponse等。另一方面,onFailure始终需要带有一个ErrorResponse参数的lambda。
Infinitum有多个模块,用于实现不同的目标。要使用这些模块,您需要通过以下方式初始化SDK
iOS Android Kotlin Android Java
iOS
let infinitum = Infinitum.Companion().getInstance(applicationContext: ApplicationContext())
infinitum.config(
domain: "demo.infinitum.app",
appType: "biometric-clock",
onSuccess: { (response) in self.doInit(configResponse: response)},
onFailure: { (error) in print(error) })
func doInit(configResponse: ConfigResponse) {
infinitum.doInit(
domain: "demo.infinitum.app",
appToken: configResponse.apps.first?.token ?? "default",
onSuccess: photo, //Another way to send a lambda
onFailure: {(error) in print(error)}),
eventBuilder: NodeEvent.NodeEventBuilder().addEvent(event: "device-licensed", onEvent: {() in print("LICENSED")}))
}
由于这是一个多平台SDK,并且我们需要Android应用发送它们的Context,因此必须创建一个名为ApplicationContext的类,并针对iOS和Android提供不同的实现。iOS实现不需要任何参数。
初始化SDK后,它将记住您的会话,因此您无需每次应用启动时都重复这些步骤。
所有模块都可通过Infinitum类访问。以下是一个使用Auth模块photo方法的示例:
func photo() {
let image = UIImage(imageLiteralResourceName: "resource")
let image64 = ImageUtils().convertImageToBase64(image: image)
infinitum.auth()?.photo(
photoB64: image64,
onSuccess: {(response) in print(response)},
onFailure: {(error) in print(error)})
}
Android - Kotlin
infinitum = Infinitum.Companion.getInstance(ApplicationContext(baseContext))
infinitum.config(
"demo.infinitum.app",
"Biometric-clock",
onSuccess = ::doInit,
onFailure = { error ->
//error handling
Log.d(TAG, error.toString())
})
fun doInit(configResponse: ConfigResponse) {
val app = configResponse.apps[0]
infinitum.init(
domain = "demo.infinitum.app",
appToken = app.token,
onSuccess = ::countUsers,
onFailure = ::onError,
eventBuilder = NodeEvent.NodeEventBuilder().
addEvent("device-licensed", { println("----------LICENSED----------")}).
addEvent("device-unlicensed", {println("----------UNLICENSED----------")})
)
}
由于这是一个多平台SDK且我们要求Android应用发送它们的Context,因此有必要创建一个名为ApplicationContext的类,并为iOS和Android提供不同的实现。Android实现需要一个参数来发送上下文。
初始化SDK后,它将记住您的会话,因此您无需每次应用启动时都重复这些步骤。
所有模块都可通过Infinitum类访问。以下是一个使用App模块getAppById方法的示例:
fun getAppById(initResponse: InitResponse) {
infinitum.apps()?.getAppById(
40,
onSuccess = { app ->
println(app)
},
onFailure = { errorResponse ->
Log.d(TAG, errorResponse.toString())
})
}
Android - Java
Infinitum infinitum = Infinitum.Companion.getInstance(new ApplicationContext(this));
infinitum.config(
"demo.infinitum.app",
"biometric-clock",
this::configSuccess,
this::error
);
private Unit configSuccess(ConfigResponse response) {
infinitum.init(
"demo.infinitum.app",
response.getApps().get(0).getToken(),
this::initSuccess,
errorResponse -> {
Log.d(TAG, errorResponse.toString());
return Unit.INSTANCE;
}
);
return Unit.INSTANCE;
}
请注意,所有作为参数发送的函数(回调)都需要以return Unit.INSTANCE结尾。这是因为Kotlin没有Java中的Void,而Unit基本上是一样的。
由于这是一个多平台SDK且我们要求Android应用发送它们的Context,因此有必要创建一个名为ApplicationContext的类,并为iOS和Android提供不同的实现。Android实现需要一个参数来发送上下文。
初始化SDK后,它将记住您的会话,因此您无需每次应用启动时都重复这些步骤。
所有模块都可通过Infinitum类访问。以下是一个使用Auth模块photo方法的示例:
private Unit photo(InitResponse response) {
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.resource);
String image = ImageUtils.INSTANCE.convertImageToBase64(bitmap);
infinitum.auth().photo(
image,
photoResponse -> {
System.out.println(photoResponse.toString());
return Unit.INSTANCE;
},
errorResponse -> {
System.out.println(errorResponse.toString());
return Unit.INSTANCE; });
return Unit.INSTANCE;
}
模块
Infinitum
我们的主类Infinitum包含初始化SDK和所有可用模块的引用的函数。
fun config(
domain: String,
appType: String,
onSuccess: (ConfigResponse) -> Unit,
onFailure: (ErrorResponse) -> Unit
) {
domain - 公司名称的域。例如:demo.infinitum.app来使用演示。
appType - 您想要连接的应用类型。
onSuccess - 如果请求成功将被执行的功能。返回一个包含给定类型应用程序列表的ConfigResponse对象。
onFailure - 如果请求失败将被执行的功能。返回一个ErrorResponse对象。
fun init(
domain: String,
appToken: String,
onSuccess: (InitResponse) -> Unit,
onFailure: (ErrorResponse) -> Unit,
eventBuilder: NodeEventBuilder
) {
domain - 公司名称的域。例如:demo.infinitum.app来使用演示。
appToken - 应用程序令牌。
eventBuilder - SDK的websocket将监听的事件。期望一个NodeEventBuilder对象。(事件示例:”device-licensed”, “device-unlicensed”)。
onSuccess - 如果请求成功,将执行的函数。返回一个包含有关选择的 InitResponse 对象,其中包含更多关于应用程序的信息。
onFailure - 如果请求失败将被执行的功能。返回一个ErrorResponse对象。
fun apps(): Apps? {
如果 SDK 已经初始化,则返回 Apps 模块,否则返回 null。
fun auth(): Auth? {
如果 SDK 已经初始化,则返回 Auth 模块,否则返回 null。
fun devicePosition(): DevicePosition? {
如果 SDK 已经初始化,则返回 DevicePosition 模块,否则返回 null。
fun users(): Users? {
如果 SDK 已经初始化,则返回 Users 模块,否则返回 null。
Apps
//Get all the apps associated with the domain given during the initialization.
fun getApps(
onSuccess: (List<App>) -> Unit,
onFailure: (ErrorResponse) -> Unit
) {
onSuccess - 如果请求成功,将执行的函数。返回一个包含 Applications 列表的 List。
onFailure - 如果请求失败将被执行的功能。返回一个ErrorResponse对象。
//Create a new Application
fun createApp(
appName: String,
appTypeId: Int,
token: String,
onSuccess: (Boolean) -> Unit,
onFailure: (ErrorResponse) -> Unit
) {
appName - 应用程序名称。
appTypeId - 应用程序类型。
token - 应用程序令牌。
onSuccess - 如果请求成功,将执行的函数。返回 true。
onFailure - 如果请求失败将被执行的功能。返回一个ErrorResponse对象。
//Get application by id
fun getAppById(
appId: Int,
onSuccess: (App) -> Unit,
onFailure: (ErrorResponse) -> Unit
) {
appId - 应用程序 id。
onSuccess - 如果请求成功,将执行的函数。返回一个 app 对象。
onFailure - 如果请求失败将被执行的功能。返回一个ErrorResponse对象。
//Deletes an Application
fun deleteApp(
appId: Int,
onSuccess: (Boolean) -> Unit,
onFailure: (ErrorResponse) -> Unit
) {
appId - 应用程序 id。
onSuccess - 如果请求成功,将执行的函数。返回 true。
onFailure - 如果请求失败将被执行的功能。返回一个ErrorResponse对象。
//Updates an Application
fun updateApp(
appId: Int,
appName: String,
appTypeId: Int,
onSuccess: (Boolean) -> Unit,
onFailure: (ErrorResponse) -> Unit
) {
appId - 应用程序 id。
appName - 应用程序名称。
appTypeId - 应用程序类型。
Auth
包含所有认证方法。
//Authentication with facial recognition.
fun photo(
photoB64: String,
onSuccess: (PhotoResponse) -> Unit,
onFailure: (ErrorResponse) -> Unit
) {
photoB64 - 以 Base64 格式的照片。确保图片大小不超过 1mb。
onSuccess - 如果请求成功,将执行的函数。返回一个包含有关已认证用户信息的 PhotoResponse 对象。
onFailure - 如果请求失败将被执行的功能。返回一个ErrorResponse对象。
DevicePosition
fun getAllDevicePositions(
onSuccess: (List<DevicePositionResponse>) -> Unit,
onFailure: (ErrorResponse) -> Unit
) {
onSuccess - 如果请求成功,将执行的函数。返回一个包含 DevicePositionResponse 列表的 List。
onFailure - 如果请求失败将被执行的功能。返回一个ErrorResponse对象。
fun newDevicePosition(
latitude: String,
longitude: String,
onSuccess: (Boolean) -> Unit,
onFailure: (ErrorResponse) -> Unit
) {
注意:此方法将此位置连接到您的设备标识。使用下一个方法关联到特定的设备 ID。
latitude - 当前位置的纬度。
longititude - 当前位置的经度。
onSuccess - 如果请求成功,将执行的函数。返回 true。
onFailure - 如果请求失败将被执行的功能。返回一个ErrorResponse对象。
fun newDevicePosition(
deviceId: Int,
latitude: String,
longitude: String,
onSuccess: (Boolean) -> Unit,
onFailure: (ErrorResponse) -> Unit
) {
deviceId - 设备 ID。
latitude - 当前位置的纬度。
longititude - 当前位置的经度。
onSuccess - 如果请求成功,将执行的函数。返回 true。
onFailure - 如果请求失败将被执行的功能。返回一个ErrorResponse对象。
fun deleteDevicePosition(
devicePositionId: Int,
onSuccess: (Boolean) -> Unit,
onFailure: (ErrorResponse) -> Unit
) {
devicePositionId - 要删除的设备位置 ID。
onSuccess - 如果请求成功,将执行的函数。返回 true。
onFailure - 如果请求失败将被执行的功能。返回一个ErrorResponse对象。
fun getDevicePositionById(
devicePositionId: Int,
onSuccess: (DevicePositionResponse) -> Unit,
onFailure: (ErrorResponse) -> Unit
) {
devicePositionId - 设备位置 ID。
onSuccess - 如果请求成功,将执行的函数。返回 DevicePositionResponse 对象。
onFailure - 如果请求失败将被执行的功能。返回一个ErrorResponse对象。
fun getDevicePositionsByDeviceId(
deviceId: Int,
onSuccess: (List<DevicePositionResponse>) -> Unit,
onFailure: (ErrorResponse) -> Unit
) {
deviceId - 设备 ID。
onSuccess - 如果请求成功,将执行的函数。返回与给定设备 ID 关联的 DevicePositionResponse 列表。
onFailure - 如果请求失败将被执行的功能。返回一个ErrorResponse对象。
fun updateDevicePosition(
devicePositionId: Int,
deviceId: Int,
latitude: String,
longitude: String,
onSuccess: (DevicePositionResponse) -> Unit,
onFailure: (ErrorResponse) -> Unit
) {
devicePositionId - 要更改的 DevicePosition 的 ID。
deviceId - 更新的设备 ID。
latitude - 更新的纬度。
longititude - 更新的经度。
onSuccess - 如果请求成功,将执行的函数。返回更新的 DevicePositionResponse。
onFailure - 如果请求失败将被执行的功能。返回一个ErrorResponse对象。
fun updateDevicePosition(
devicePositionId: Int,
latitude: String,
longitude: String,
onSuccess: (DevicePositionResponse) -> Unit,
onFailure: (ErrorResponse) -> Unit
) {
注意:使用此功能关联的设备将更改为该设备。devicePositionId - 要更改的DevicePosition的ID。
latitude - 更新的纬度。
longititude - 更新的经度。
onSuccess - 如果请求成功,将执行的函数。返回更新的 DevicePositionResponse。
onFailure - 如果请求失败将被执行的功能。返回一个ErrorResponse对象。
用户
fun getAllUsersCount(
onSuccess: (Int) -> Unit,
onFailure: (ErrorResponse) -> Unit
) {
onSuccess - 如果请求成功将执行的函数。返回表示该应用程序总用户数的整数。
onFailure - 如果请求失败将被执行的功能。返回一个ErrorResponse对象。
fun getAllUsers(
onSuccess: (List<UserResponse>) -> Unit,
onFailure: (ErrorResponse) -> Unit
) {
onSuccess - 如果请求成功将执行的函数。返回一个包含有关单个用户的更多信息的UserResponse对象列表。
onFailure - 如果请求失败将被执行的功能。返回一个ErrorResponse对象。
fun getUserById(
userId: Int,
onSuccess: (UserResponse) -> Unit,
onFailure: (ErrorResponse) -> Unit
) {
userId - 用户ID。
onSuccess - 如果请求成功将执行的函数。返回一个UserResponse对象。
onFailure - 如果请求失败将被执行的功能。返回一个ErrorResponse对象。
fun getUserByFace(
photo: String,
onSuccess: (UserResponse) -> Unit,
onFailure: (ErrorResponse) -> Unit
) {
photo - 包含多个面部图像的base64图像。 (您可以使用我们的Utils类将图像转换为base64)
onSuccess - 如果请求成功将执行的函数。如果API识别用户,则返回UserResponse对象列表。
onFailure - 如果请求失败将被执行的功能。返回一个ErrorResponse对象。
fun createUser(
name: String,
optionalParameters: UserOptionalParameters.Builder,
onSuccess: (Boolean) -> Unit,
onFailure: (ErrorResponse) -> Unit
) {
name - 用户姓名。
optionalParameters - 可选构建器,可用于添加有关用户的信息。 (例如:UserOptionalParameters.Builder().setPhone("911111111"))
onSuccess - 如果请求成功,将执行的函数。返回 true。
onFailure - 如果请求失败将被执行的功能。返回一个ErrorResponse对象。
fun deleteUser(
userId: Int,
onSuccess: (Boolean) -> Unit,
onFailure: (ErrorResponse) -> Unit
) {
userId - 用户ID。
onSuccess - 如果请求成功,将执行的函数。返回 true。
onFailure - 如果请求失败将被执行的功能。返回一个ErrorResponse对象。
fun updateUser(
userId: Int,
name: String,
otherParameters: UserOptionalParameters.Builder,
onSuccess: (UserResponse) -> Unit,
onFailure: (ErrorResponse) -> Unit
) {
userId - 用户ID。
name - 用户更新后的姓名。
optionalParameters - 可选构建器,可用于添加有关用户的信息。 (例如:UserOptionalParameters.Builder().setPhone("911111111"))
onSuccess - 如果请求成功将执行的函数。返回更新的UserResponse。
onFailure - 如果请求失败将被执行的功能。返回一个ErrorResponse对象。
fun userLivenessRequest(
onSuccess: () -> Unit,
onFailure: (ErrorResponse) -> Unit
) {
onSuccess - 如果请求成功将执行的函数。
onFailure - 如果请求失败将被执行的功能。返回一个ErrorResponse对象。
fun verifyDocuments(
front: String,
back: String,
onSuccess: (String) -> Unit,
onFailure: (ErrorResponse) -> Unit
) {
front - 文档前侧的Base64图像。 (您可以使用我们的Utils类将图像转换为base64)
back - 文档后侧的Base64图像。 (您可以使用我们的Utils类将图像转换为base64)
onSuccess - 如果请求成功将执行的函数。返回响应正文。
onFailure - 如果请求失败将被执行的功能。返回一个ErrorResponse对象。
fun verifyUserByPhoto(
photo: String,
onSuccess: (UserResponse) -> Unit,
onFailure: (ErrorResponse) -> Unit
){
photo - 用户Base64图像。 (您可以使用我们的Utils类将图像转换为base64)
onSuccess - 如果请求成功将执行的函数。返回一个UserResponse对象。
onFailure - 如果请求失败将被执行的功能。返回一个ErrorResponse对象。
fun verifyUserFaceProperties(
photo: String,
onSuccess: (String) -> Unit,
onFailure: (ErrorResponse) -> Unit
){
photo - 用户Base64图像。 (您可以使用我们的Utils类将图像转换为base64)
onSuccess - 如果请求成功将执行的函数。返回响应正文。
onFailure - 如果请求失败将被执行的功能。返回一个ErrorResponse对象。
Utils
包含有助于节省时间的函数。
fun convertImageToBase64(image: Image): String {
image - 将转换为Base64格式的图像。在iOS上此方法需要一个UIImage,在Android上接收一个Bitmap。
响应
ErrorResponse
class ErrorResponse(
var message: String?="",
var type: String?="",
var status: Int?=0)
ConfigResponse
class ConfigResponse(val apps: List<App>)
class App(
val name: String="",
val token: String="")
InitResponse
class InitResponse(val config: Config)
class Config(
val country: String = "",
val background: String = "",
val logo: String = "",
val text_color: String = "",
val button_color: String = "",
val button_text_color: String = "",
val pincode: String = "",
val offline: Int = -1
)
Apps
class App(
val id: Int,
val name: String,
val token: String,
val type: Type,
val client: Client
)
class Type(val alias: String)
class Client(
val id: String,
val secret: String)
PhotoResponse
class PhotoResponse(
val name: String,
val email: String
)
DevicePositionResponse
data class DevicePositionResponse(
val id: Int,
val device_id: Int,
val lat: String,
val lng: String
)
UserResponse
data class UserResponse(
val id: Int,
val name: String? = "",
val email: String = "",
val phone: String? = "",
val avatar: String? = "",
val info: Info? = null
)
data class Info(
val birthdate: String? = "",
val language: String? = "",
val photo: String? = "",
val data: String? = ""
)