【发布时间】:2016-11-14 06:25:01
【问题描述】:
我在我的应用程序中使用cordova fingerprint auth plugin,但应用程序崩溃并在 logcat 中显示以下错误。
11-14 11:12:47.671:W/PluginManager(30565):线程警告:exec() 调用 FingerprintAuth.authenticate 阻塞了主线程 33 毫秒。 插件应该使用 CordovaInterface.getThreadPool()。
11-14 11:12:47.712: D/FingerprintAuthDialog(30565): disableBackup: 假 11-14 11:12:47.713: W/ResourceType(30565): 没有包标识符 当获取资源号 0x00000000 11-14 的值时 11:12:47.713:D/AndroidRuntime(30565):关闭 VM 11-14 11:12:47.716:E/AndroidRuntime(30565):致命异常:主要 11-14 11:12:47.716:E/AndroidRuntime(30565):进程:com.fingerPrint,PID: 30565 11-14 11:12:47.716:E/Android 运行时(30565): android.content.res.Resources$NotFoundException:资源 ID #0x0 11-14 11:12:47.716: E/AndroidRuntime(30565): 在 android.content.res.Resources.getValue(Resources.java:1351) 11-14 11:12:47.716:E/AndroidRuntime(30565):在 android.content.res.Resources.loadXmlResourceParser(Resources.java:2777) 11-14 11:12:47.716: E/AndroidRuntime(30565): 在 android.content.res.Resources.getLayout(Resources.java:1165) 11-14 11:12:47.716:E/AndroidRuntime(30565):在 android.view.LayoutInflater.inflate(LayoutInflater.java:421) 11-14 11:12:47.716:E/AndroidRuntime(30565):在 com.fingerPrint.FingerprintAuthenticationDialogFragment.onCreateView(FingerprintAuthenticationDialogFragment.java:87) 11-14 11:12:47.716: E/AndroidRuntime(30565): 在 android.app.Fragment.performCreateView(Fragment.java:2220) 11-14 11:12:47.716:E/AndroidRuntime(30565):在 android.app.FragmentManagerImpl.moveToState(FragmentManager.java:973) 11-14 11:12:47.716: E/AndroidRuntime(30565): 在 android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1148) 11-14 11:12:47.716: E/AndroidRuntime(30565): 在 android.app.BackStackRecord.run(BackStackRecord.java:793) 11-14 11:12:47.716:E/AndroidRuntime(30565):在 android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1537) 11-14 11:12:47.716: E/AndroidRuntime(30565): 在 android.app.FragmentManagerImpl$1.run(FragmentManager.java:482) 11-14 11:12:47.716:E/AndroidRuntime(30565):在 android.os.Handler.handleCallback(Handler.java:746) 11-14 11:12:47.716:E/AndroidRuntime(30565):在 android.os.Handler.dispatchMessage(Handler.java:95) 11-14 11:12:47.716:E/AndroidRuntime(30565):在 android.os.Looper.loop(Looper.java:148) 11-14 11:12:47.716: E/AndroidRuntime(30565):在 android.app.ActivityThread.main(ActivityThread.java:5443) 11-14 11:12:47.716:E/AndroidRuntime(30565):在 java.lang.reflect.Method.invoke(本机方法)11-14 11:12:47.716: E/AndroidRuntime(30565):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 11-14 11:12:47.716: E/AndroidRuntime(30565): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 11-14 11:12:47.718: E/com.worklight.common.Logger$UncaughtExceptionHandler(30565): Logger.java:471 中的 Logger$UncaughtExceptionHandler.uncaughtException :: 未捕获的异常 11-14 11:12:47.718: E/com.worklight.common.Logger$UncaughtExceptionHandler(30565): android.content.res.Resources$NotFoundException:资源 ID #0x0 11-14 11:12:47.718: E/com.worklight.common.Logger$UncaughtExceptionHandler(30565):在 android.content.res.Resources.getValue(Resources.java:1351) 11-14 11:12:47.718: E/com.worklight.common.Logger$UncaughtExceptionHandler(30565):在 android.content.res.Resources.loadXmlResourceParser(Resources.java:2777) 11-14 11:12:47.718: E/com.worklight.common.Logger$UncaughtExceptionHandler(30565):在 android.content.res.Resources.getLayout(Resources.java:1165) 11-14 11:12:47.718: E/com.worklight.common.Logger$UncaughtExceptionHandler(30565):在 android.view.LayoutInflater.inflate(LayoutInflater.java:421) 11-14 11:12:47.718: E/com.worklight.common.Logger$UncaughtExceptionHandler(30565):在 com.fingerPrint.FingerprintAuthenticationDialogFragment.onCreateView(FingerprintAuthenticationDialogFragment.java:87) 11-14 11:12:47.718: E/com.worklight.common.Logger$UncaughtExceptionHandler(30565):在 android.app.Fragment.performCreateView(Fragment.java:2220) 11-14 11:12:47.718: E/com.worklight.common.Logger$UncaughtExceptionHandler(30565):在 android.app.FragmentManagerImpl.moveToState(FragmentManager.java:973) 11-14 11:12:47.718: E/com.worklight.common.Logger$UncaughtExceptionHandler(30565):在 android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1148) 11-14 11:12:47.718: E/com.worklight.common.Logger$UncaughtExceptionHandler(30565):在 android.app.BackStackRecord.run(BackStackRecord.java:793) 11-14 11:12:47.718: E/com.worklight.common.Logger$UncaughtExceptionHandler(30565):在 android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1537) 11-14 11:12:47.718: E/com.worklight.common.Logger$UncaughtExceptionHandler(30565):在 android.app.FragmentManagerImpl$1.run(FragmentManager.java:482) 11-14 11:12:47.718: E/com.worklight.common.Logger$UncaughtExceptionHandler(30565):在 android.os.Handler.handleCallback(Handler.java:746) 11-14 11:12:47.718: E/com.worklight.common.Logger$UncaughtExceptionHandler(30565):在 android.os.Handler.dispatchMessage(Handler.java:95) 11-14 11:12:47.718: E/com.worklight.common.Logger$UncaughtExceptionHandler(30565):在 android.os.Looper.loop(Looper.java:148) 11-14 11:12:47.718: E/com.worklight.common.Logger$UncaughtExceptionHandler(30565):在 android.app.ActivityThread.main(ActivityThread.java:5443) 11-14 11:12:47.718: E/com.worklight.common.Logger$UncaughtExceptionHandler(30565):在 java.lang.reflect.Method.invoke(本机方法)11-14 11:12:47.718: E/com.worklight.common.Logger$UncaughtExceptionHandler(30565):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 11-14 11:12:47.718: E/com.worklight.common.Logger$UncaughtExceptionHandler(30565):在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 11-14 11:12:47.723: D/com.worklight.wlclient.api.WLLifecycleHelper(30565): WLLifecycleHelper.java:109 中的 WLLifecycleHelper.logAppSession :: 试过 记录没有起始时间戳的应用崩溃
遵循的步骤:
- 在 android/src/com/ 文件夹
-
添加到 config.xml
<feature name="FingerprintAuth"> <param name="android-package" value="com.fingerPrint.FingerprintAuth"/> </feature> 在 common/js 文件夹中添加了 FingerprintAuth.js
-
每次部署到设备之前,在 cordova_plugins.js 中添加以下内容
{ "id": "FingerprintAuth", "file": "../js/FingerprintAuth.js", "clobbers": [ "FingerprintAuth" ] }
5.在main.js文件中添加以下代码检查指纹认证
FingerprintAuth.isAvailable(function(result) {
if (result.isAvailable) {
var client_id = "Your client ID";
var client_secret = "A very secret client secret (once per device)";
if(result.hasEnrolledFingerprints){
FingerprintAuth.show({
clientId: client_id,
clientSecret: client_secret
}, function (result) {
if (result.withFingerprint) {
alert("Authentication Success");
//$location.path("singin");
} else if (result.withPassword) {
alert("Authenticated with backup password");
}
}, function(error) {
console.log(error); // "Fingerprint authentication not available"
});
}else{
alert("Fingerprint auth available, but no fingerprint registered on the device");
}
}
}, function(message) {
alert("Cannot detect fingerprint device : "+ message);
});
【问题讨论】:
-
这是使用 MobileFirst CLI 7.1 创建的 Cordova 应用程序,还是使用 MobileFirst Studio 7.1 创建的混合应用程序?
-
在 MobileFirst Studio 7.1 中创建的混合应用,刚刚添加了 cordova-plugin
-
插件是怎么添加的?混合应用程序并不真正支持 3rd 方 cordova 插件。
-
后续步骤 1.Added plugin FingerprintAuth.java,FingerprintAuthenticationDialogFragment.java, FingerprintUiHelper.java 文件到android src/com/
文件夹 2.Added 到 config.xml 3.将 FingerprintAuth.js 添加到 common/js 文件夹 4.每次添加 { "id": "FingerprintAuth" , "file": "../js/FingerprintAuth.js", "clobbers": [ "FingerprintAuth" ] } 在 cordova_plugins.js 中部署到设备之前。
标签: android cordova ibm-mobilefirst android-fingerprint-api