uni-app 离线打包指纹识别检测

发布于 1周前 作者 itying888 来自 Uni-App

uni-app 离线打包指纹识别检测

操作步骤

checkIsSupportSoterAuthentication(mode = 'fingerPrint') {  
    uni.checkIsSupportSoterAuthentication({  
        success(res) {  
            console.log(res);  
        },  
        fail(err) {  
            console.log(err);  
        },  
        complete(res) {  
            console.log(res);  
        }  
    })  
}

预期结果

集成指纹识别,在hbuilderx中直接运行到手机uni.checkIsSupportSoterAuthentication可以正常检测出手机支持指纹识别:

{"supportMode":["fingerPrint"],"errMsg":"checkIsSupportSoterAuthentication:ok"}

离线打包后却检测出设备不支持:

{"supportMode":[],"errMsg":"checkIsSupportSoterAuthentication:ok"}

实际结果

集成指纹识别,在hbuilderx中直接运行到手机uni.checkIsSupportSoterAuthentication可以正常检测出手机支持指纹识别:

{"supportMode":["fingerPrint"],"errMsg":"checkIsSupportSoterAuthentication:ok"}

离线打包后却检测出设备不支持:

{"supportMode":[],"errMsg":"checkIsSupportSoterAuthentication:ok"}

bug描述

集成指纹识别,在hbuilderx中直接运行到手机uni.checkIsSupportSoterAuthentication可以正常检测出手机支持指纹识别:

{"supportMode":["fingerPrint"],"errMsg":"checkIsSupportSoterAuthentication:ok"}

离线打包后却检测出设备不支持:

{"supportMode":[],"errMsg":"checkIsSupportSoterAuthentication:ok"}

开发环境信息

项目 信息
产品分类 uniapp/App
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 win10
HBuilderX类型 正式
HBuilderX版本号 3.8.4
手机系统 Android
手机系统版本号 Android 10
手机厂商 华为
手机机型 mate10
页面类型 vue
vue版本 vue2
打包方式 离线
项目创建方式 HBuilderX

2 回复

遇到同样的问题,请问楼主解决了吗


在uni-app中实现离线打包并集成指纹识别检测功能,需要结合原生插件或SDK来完成。以下是一个基本的实现思路和代码案例,但请注意,实际开发中可能需要根据具体的平台和SDK进行调整。

步骤一:准备原生插件

首先,需要准备一个支持指纹识别的原生插件。这里以Android平台为例,你可以使用现有的指纹识别库,比如Android的FingerprintManager(API 23-28)或BiometricPrompt(API 28+)。

步骤二:创建原生插件

native-plugins目录下创建一个新的插件目录,比如fingerprint-auth,并编写相应的Android代码。

Android代码示例(FingerprintAuthPlugin.java)

package com.example.fingerprintauth;

import android.content.Context;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Build;
import android.os.CancellationSignal;
import androidx.annotation.RequiresApi;
import io.dcloud.feature.uniapp.bridge.UniJSCallback;
import io.dcloud.feature.uniapp.common.UniModule;

@UniModule(name = "fingerprintAuth")
public class FingerprintAuthPlugin {

    @RequiresApi(api = Build.VERSION_CODES.M)
    public void authenticate(Context context, UniJSCallback callback) {
        FingerprintManager fingerprintManager = (FingerprintManager) context.getSystemService(Context.FINGERPRINT_SERVICE);

        if (fingerprintManager != null && fingerprintManager.isHardwareDetected() && fingerprintManager.hasEnrolledFingerprints()) {
            // Create a CancellationSignal to cancel the authentication.
            CancellationSignal cancellationSignal = new CancellationSignal();

            // Start authentication.
            fingerprintManager.authenticate(
                    new FingerprintManager.CryptoOperationBuilder(context)
                            .build(),
                    cancellationSignal,
                    0, // flags
                    (result, errorMsg) -> {
                        if (result == FingerprintManager.FINGERPRINT_ACQUIRED) {
                            callback.invoke("Success");
                        } else if (errorMsg != null) {
                            callback.invoke("Error: " + errorMsg);
                        }
                    },
                    null // no need for a handler here
            );
        } else {
            callback.invoke("Error: Fingerprint hardware not available or no fingerprints enrolled.");
        }
    }
}

步骤三:在uni-app中调用插件

在你的uni-app项目中,通过uni.requireNativePlugin来调用这个原生插件。

const fingerprintAuth = uni.requireNativePlugin('fingerprintAuth');

fingerprintAuth.authenticate((result) => {
    console.log(result);
    if (result.startsWith("Success")) {
        uni.showToast({
            title: '指纹验证成功',
            icon: 'success'
        });
    } else {
        uni.showToast({
            title: result,
            icon: 'none'
        });
    }
});

注意事项

  1. 权限处理:确保在manifest.json中配置了相应的权限,如android.permission.USE_FINGERPRINT
  2. 兼容性:上述代码示例是基于Android M(API 23)及以上版本。如果你的应用需要支持更低版本,需要使用FingerprintManagerCompat
  3. UI提示:在实际应用中,应添加指纹识别的UI提示和错误处理逻辑。

以上代码是一个基本的实现思路,具体实现可能需要根据实际项目需求进行调整。

回到顶部