InfinitumSDKMobile 0.1.83

InfinitumSDKMobile 0.1.83

infinitum-dev 维护。



  • infinitum_dev

Infinitum 移动 SDK

目录

  1. 安装
    1. iOS
    2. Android
  2. 使用
    1. iOS
    2. Android-Kotlin
    3. Android-Java
  3. 模块
    1. Infinitum
    2. 应用
    3. 认证
    4. 设备位置
    5. 用户
    6. 工具
  4. 响应
    1. 错误响应
    2. 配置响应
    3. 初始化响应
    4. 应用
    5. 照片响应
    6. 设备位置响应
    7. 用户响应

安装

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导入您的项目,您需要做以下操作

  1. Jitpack仓库添加到您的项目 build.gradle文件中
allprojects {
	repositories {
		...
		maven { url 'https://jitpack.io' }
	}
}
  1. 将SDK依赖项添加到您的应用程序 build.gradle文件中
dependencies {
	implementation('com.github.infinitum-dev:mobile-sdk:latest-version@aar') {
		transitive = true
	}
}
  1. 有时构建可能会因为重复的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? = ""
)