集成指南

1.SDK 目录结构

目录

2.准备工作

2.1 获取SDK Demo压缩包

请联系您的Linkface专属商务获取SDK Demo压缩包;

商务邮箱:market@linkface.cn

2.2 获取APP_KEY、 APP_SECRET

  1. 访问Linkface官网https://www.linkface.cn ,点击右上角“管理中心”;
  2. 按照流程提示完成账号的注册及登录,添加应用;
  3. 在应用管理界面,可以看到您应用的API ID、API SECRET,即SDK中需要使用的APP_KEY,、APP_SECRET。 获取APP_KEY、 APP_SECRET

3.Demo示例

  1. 使用Android Studio打开SDK压缩包中银行卡识别Demo或身份证识别Demo项目

  2. 找到项目中MyApplication.java文件。 需要注释掉“注意”的一行文字,并填入2.2 获取APP_KEY, APP_SECRET得到的APP_KEY值。 MyApplication

    而APP_SECRET的值,需要在 LFMainActivity.java文件中 找到方法getAppSecret

    private String getAppSecret() { return LFSpUtils.getAppSecret(getApplicationContext(), ""); }

    将APP_SECRET填入 default即可。

    完成以上步骤,即可运行体验Demo功能了。

4. 集成指南

如果集成过程中碰到错误或问题,请按如下步骤尝试解决:
  1. 先查看Android Studio打出的log信息尝试解决;
  2. 参考《常见问题》部分解决;
  3. 利用搜索引擎搜索遇到的问题,尝试解决;
  4. 联系Linkface售后,协助解决。

4.1 将SDK集成到工程

4.1.1 集成方式一:将UI层(LFOCRUILib)作为一个工程依赖(Demo工程使用此方式)

  1. 假如您开发的工程名为MyOCRProject,用Android Studio打开该工程。目录结构如下: 项目结构

    然后将LFOCRUILib整个工程拷贝到MyOCRProject工程的同级目录下,如图:目录

  2. 在工程MyOCRProject的根目录下的settings.gradle文件中加入

    includeFlat 'LFOCRUILib'
    include ':LFOCRUILib:LFCard'
    

    最终settings.gradle如图:

    settings

  3. 添加依赖

    在工程MyOCRProject的app/builde.gradle下添加

    repositories {
     flatDir {
         dirs '../../LFOCRUILib/LFCard/libs'
     }
    }
    

    在dependencies{}中添加

    implementation project(path: ':LFOCRUILib:LFCard')
    

    最终,build.gradle中有

    repositories {
     flatDir {
         dirs '../../LFOCRUILib/LFCard/libs'
     }
    }
    dependencies {
       implementation project(path: ':LFOCRUILib:LFCard')
    }
    

  4. 在项目build.gradle中添加abiFilters为armeabi-v7a,代码如下:

    defaultConfig {
         ...
         ndk {
             abiFilters "armeabi-v7a"
         }
     }
    
  5. 添加权限。在 AndroidManifest.xml中增加如下权限,代码如下:

     <uses-permission android:name="android.permission.CAMERA" />
     <uses-permission android:name="android.permission.VIBRATE" />
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    

    权限说明:

     CAMERA:调用相机进行扫描或拍照
     VIBRATE:调用手机震动器再识别成功时发出震动
     WRITE_EXTERNAL_STORAGE:拍摄照片时的临时存储
     INTERNET:访问网络权限,用于请求服务端识别结果
     ACCESS_NETWORK_STATE:获取网络状态
    
  6. 动态申请系统权限。Android6.0之后需要动态申请权限。在相应权限使用之前,请添加相应权限的申请。此处给出CAMERA权限的判断和动态申请示例:

    /**
      * 判断是否有权限,没有就去请求
      *
      * @param permissionRequestCode
      * @return
      */
     private boolean isHavePermission(int permissionRequestCode) {
         boolean isHave = true;
         if (isMarshmallow()) {
    
             if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
                 // Permission has not been granted and must be
                 // requested.
    
                 if (shouldShowRequestPermissionRationale(Manifest.permission.CAMERA)) {
                     // Provide an additional rationale to the user if
                     // the permission was not granted
                     // and the user would benefit from additional
                     // context for the use of the permission.
                 }
                 // Request the permission. The result will be received
                 // in onRequestPermissionResult()
                 isHave = false;
                 requestPermissions(
                         new String[]{Manifest.permission.CAMERA},
                         permissionRequestCode);
             } else {
                 // Permission is already available, start camera preview
                 isHave = true;
             }
         } else {
             isHave = true;
         }
         return isHave;
     }
    
    private static boolean isMarshmallow() {
         return Build.VERSION.SDK_INT >= 23;
     }
    
     /**
      * 请求权限返回
      *
      * @param requestCode
      * @param permissions
      * @param grantResults
      */
     public void onRequestPermissionsResult(int requestCode,
                                            String[] permissions, int[] grantResults) {
         if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
             //申请权限成功,跳到扫描界面
             toScanActivity(requestCode);
         } else {
             showToast(LFConstants.ERROR_CAMERA_REFUSE);
         }
     }
    

    其他权限原理相同,可自行修改添加。详细可参考Demo代码。

  7. 初始化SDK。在APP启动时,进行SDK的初始化。如在MyApplication的onCreate方法中,示例代码如下:

     public class MyApplication extends Application {
    
         #注意:请替换appId及appSecret
         private static final String LF_APP_ID = "LF_APP_ID";
         private static final String LF_APP_SECRET = "LF_APP_SECRET";
    
         public void onCreate() {
             super.onCreate();
             //初始化OCR SDK,注意:context必须传application全局context
             LFCardOcr.init(getApplicationContext(), LF_APP_ID, LF_APP_SECRET);
         }
    
     }
    
  8. 此时可以跳转扫描界面。可参考Demo中LFMainActivity.java中的代码。跳转方式,以及数据获取方式参考身份证接口调用流程银行卡接口调用流程

4.1.2 集成方式二:将UI层(module:LFCard)作为一个module导入

  1. 假如您开发的工程名为MyOCRProject,Android Studio打开该工程。然后点击File->New->Import Module,选择压缩包根录下LFOCRUILib工程中的LFCard模块,点击Finish完成导入。
  2. 添加依赖,在MyOCRProject的app/builde.gradle下添加

     repositories {
      flatDir {
         dirs '../LFCard/libs'
      }
     }
    

    在dependencies{}中添加

     implementation project(':LFCard')
    

最终,build.gradle中有

    repositories {
     flatDir {
        dirs '../LFCard/libs'
        }
    }
    dependencies {
      implementation project(':LFCard')
    }

后续步骤与第一种集成步骤的4-8相同。点此跳转。

4.1.3 集成方式三: 将aar包拆解集成(不推荐)

1.将lfocrapi.aar后缀重命名为.zip文件,解压。目录结构如图

目录

2.将解压目录中assets文件夹下的模型文件ocr.model拷贝到 app/src/main/assets 目录中。

3.将解压目录中jni文件夹下的so文件夹拷贝到 app/src/main/jniLibs/armeabi-v7a 目录中。

4.将 classes.jar 引入到工程中。如在Android Studio中,将jar文件拷贝 app/libs 目录下,在builde.gradle添加依赖。注:可重命名该文件。

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
}

后续步骤与第一种集成步骤的4-8相同。点此跳转。

开发者可根据OCR SDK提供的识别功能自行开发UI等相关功能。可参考LFOCRUILib下的module:LFCard。

4.2 查看sdk版本号

可以通过以下api获取sdk版本号:

String LF_OCR_SDK_VERSION = LFCardOcr.SDK_VERSION;

4.3 解决代码混淆

在proguard文件中加入下面的代码解决:

-keep class com.linkface.** { *; }

results matching ""

    No results matching ""