{ "id": "150518", "key": "TIMOB-19376", "fields": { "issuetype": { "id": "2", "description": "A new feature of the product, which has yet to be developed.", "name": "New Feature", "subtask": false }, "project": { "id": "10153", "key": "TIMOB", "name": "Titanium SDK/CLI", "projectCategory": { "id": "10100", "description": "Titanium and related SDKs used in application development", "name": "Client" } }, "fixVersions": [ { "id": "16980", "description": "New V8", "name": "Release 6.0.0", "archived": false, "released": true, "releaseDate": "2016-11-15" } ], "resolution": { "id": "1", "description": "A fix for this issue is checked into the tree and tested.", "name": "Fixed" }, "resolutiondate": "2016-07-27T18:55:50.000+0000", "created": "2015-08-19T04:53:08.000+0000", "epic": { "id": 150513, "key": "TIMOB-19371", "name": "Android: Android M Updates", "summary": "Android: Android M Updates", "color": { "key": "color_5" }, "done": false }, "priority": { "name": "High", "id": "2" }, "labels": [ "parity", "touchid" ], "versions": [], "issuelinks": [ { "id": "52281", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "162184", "key": "MOD-2278", "fields": { "summary": "Android: Fingerprint ti.touchid UI", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "Medium", "id": "3" }, "issuetype": { "id": "4", "description": "An improvement or enhancement to an existing feature or task.", "name": "Improvement", "subtask": false } } } } ], "assignee": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "updated": "2017-01-04T10:53:22.000+0000", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "components": [ { "id": "10202", "name": "Android", "description": "Android Platform" } ], "description": "Android M supports fingerprint authentication. Refer to\r\nhttp://developer.android.com/preview/api-overview.html\r\nand https://github.com/googlesamples/android-FingerprintDialog\r\nTry to achieve parity and package with ti.touchid module.", "attachment": [ { "id": "59741", "filename": "2016_07_08_15_38_38.mp4", "author": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2016-07-08T22:47:30.000+0000", "size": 3079567, "mimeType": "video/mp4" }, { "id": "59923", "filename": "Screenshot_20160727-155415.png", "author": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "created": "2016-07-27T07:59:09.000+0000", "size": 98219, "mimeType": "image/png" } ], "flagged": false, "summary": "Android: Fingerprint support", "creator": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "subtasks": [], "reporter": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "environment": null, "closedSprints": [ { "id": 627, "state": "closed", "name": "2016 Sprint 10 SDK", "startDate": "2016-05-07T00:43:56.954Z", "endDate": "2016-05-21T00:43:00.000Z", "completeDate": "2016-05-23T02:06:04.349Z", "originBoardId": 114 }, { "id": 682, "state": "closed", "name": "2016 Sprint 15 SDK", "startDate": "2016-07-16T00:19:20.819Z", "endDate": "2016-07-30T00:19:00.000Z", "completeDate": "2016-08-01T04:40:11.421Z", "originBoardId": 114 } ], "comment": { "comments": [ { "id": "374787", "author": { "name": "tmanaa", "key": "tmanaa", "displayName": "Talal M", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Did any body find a solution for Android touchid fingerprint authentication using ti.touchid or any other module built for Appcelerator Titanium ?", "updateAuthor": { "name": "tmanaa", "key": "tmanaa", "displayName": "Talal M", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2016-01-18T12:33:22.000+0000", "updated": "2016-01-18T12:33:22.000+0000" }, { "id": "377275", "author": { "name": "p.saamy@gmail.com", "key": "p.saamy@gmail.com", "displayName": "saamy", "active": true, "timeZone": "America/Havana" }, "body": "I'm looking for Android TouchID module as well. \r\n\r\nAny Update from Appcelerator ? or anyone created module already ? \r\n\r\n", "updateAuthor": { "name": "p.saamy@gmail.com", "key": "p.saamy@gmail.com", "displayName": "saamy", "active": true, "timeZone": "America/Havana" }, "created": "2016-02-18T18:45:50.000+0000", "updated": "2016-02-18T18:45:50.000+0000" }, { "id": "382192", "author": { "name": "saamyce@gmail.com", "key": "saamyce@gmail.com", "displayName": "sponnusamy", "active": true, "timeZone": "America/Los_Angeles" }, "body": "When we can expect this module ?", "updateAuthor": { "name": "saamyce@gmail.com", "key": "saamyce@gmail.com", "displayName": "sponnusamy", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2016-04-08T14:06:20.000+0000", "updated": "2016-04-08T14:06:20.000+0000" }, { "id": "382271", "author": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "body": "We are working on it. See Fix Release version. Do also note that the only devices that support this is Nexus 5x and 6p.", "updateAuthor": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2016-04-11T03:28:56.000+0000", "updated": "2016-04-11T03:28:56.000+0000" }, { "id": "384982", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "PR: https://github.com/appcelerator-modules/ti.touchid/pull/18", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-05-06T10:42:23.000+0000", "updated": "2016-05-06T10:42:23.000+0000" }, { "id": "385956", "author": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "body": "PR reviewed and merged.", "updateAuthor": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "created": "2016-05-17T23:49:05.000+0000", "updated": "2016-05-17T23:49:05.000+0000" }, { "id": "386621", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "PR (titanium_mobile/master): https://github.com/appcelerator/titanium_mobile/pull/8017", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-05-24T14:24:42.000+0000", "updated": "2016-05-24T14:24:42.000+0000" }, { "id": "386743", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "[~titanium@webmasterei-hamburg.de] tested the module in master and had some trouble we might want to address:\r\n\r\n{quote}\r\n1. He needed to rebuild, because a jar was missing\r\n2. He needed to set the permissions {{}} manually (can we put it into timodule.xml?? At least we should leave a comment about it in the example)\r\n3. The module must be required after opening a window/activity \r\n4. TiTouchId.isSupported() always returns {{true}}?\r\n(5. We should start to create a README.md for that project to note those infos)\r\n{quote}", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-05-25T07:20:06.000+0000", "updated": "2016-05-25T07:21:13.000+0000" }, { "id": "386745", "author": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "body": "For usage with old API levels we need a method like `getAuthorisationOrTrueIfOldVersion()` for usage the same async structur.\r\n\r\nThese helper functions has different output, maybe it is a good idea to make in same style:\r\n\r\n[INFO] : isSupported()=true\r\n\r\n[INFO] : {\"canAuthenticate\":true}\r\n\r\n", "updateAuthor": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-05-25T08:06:55.000+0000", "updated": "2016-05-25T08:06:55.000+0000" }, { "id": "386805", "author": { "name": "hpham", "key": "hpham", "displayName": "Hieu Pham", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Thanks [~hansknoechel], I'll look into these issues.", "updateAuthor": { "name": "hpham", "key": "hpham", "displayName": "Hieu Pham", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2016-05-25T20:50:25.000+0000", "updated": "2016-05-25T20:50:25.000+0000" }, { "id": "386807", "author": { "name": "hpham", "key": "hpham", "displayName": "Hieu Pham", "active": true, "timeZone": "America/Los_Angeles" }, "body": "1. Which jar is missing?\r\n2. The permission should already be in timodule.xml: https://github.com/appcelerator-modules/ti.touchid/blob/master/android/timodule.xml#L11\r\n3. What do you mean? It doesn't work if you do require(\"touch.id\") before you open a window? That doesn't sound right.\r\n4. This will return false on devices that doesn't have fingerprint support. There are currently only Nexus 5x and 6p that support this feature.", "updateAuthor": { "name": "hpham", "key": "hpham", "displayName": "Hieu Pham", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2016-05-25T21:22:02.000+0000", "updated": "2016-05-25T21:22:02.000+0000" }, { "id": "386864", "author": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "body": "1. Hans sent me azip of module. After including and usage came an error \"jat not found\" and I have recomplied => without error at runtime\r\n2. you are right, I forgot to copy \r\n3. I have embed the module at \"construction time\" of window and a weird error message came. Then I have embed the code after open event of activity and the error disappeared.\r\n4. if the module should run in all devices and the critical action is inside the async node, then it is a good idea to offer a dummy method. In other case the coder must implement a logic to realize this. (similar this wrapper: https://gist.github.com/AppWerft/6ba7b7ba8d14a269bb05f1b319d754f4)", "updateAuthor": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-05-26T07:02:06.000+0000", "updated": "2016-05-26T07:02:06.000+0000" }, { "id": "386927", "author": { "name": "hpham", "key": "hpham", "displayName": "Hieu Pham", "active": true, "timeZone": "America/Los_Angeles" }, "body": "[~titanium@webmasterei-hamburg.de], which error did you see on 3? ", "updateAuthor": { "name": "hpham", "key": "hpham", "displayName": "Hieu Pham", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2016-05-26T17:30:30.000+0000", "updated": "2016-05-26T17:30:30.000+0000" }, { "id": "390204", "author": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "body": "I see the following issues running the example app from the module:\r\n1. I click on {{Authenticate}} & place my correct finger on the fingerprint reader.\r\n2. I get alert {{YAY! success}}.\r\n3. I click on authenticate again & place the incorrect finger on the fingerprint reader.\r\n4. I get alert {{Message:Unable to recognize fingerprint}}.\r\n5. I click {{Authenticate}} again.\r\n6. I get alert {{Message: Fingerprint operation cancelled}}. I get this as long as I keep scanning my wrong finger.\r\n7. If I place my correct finger on the fingerprint scanner it scans & I get a success.\r\n\r\nAttached a video for this issue: [^2016_07_08_15_38_38.mp4]\r\n\r\nReopening as of now.\r\n\r\nEnvironment:\r\nAppc Studio : 4.7.0.201607070843\r\nTi SDK : 5.4.0.v20160705213725\r\nTi CLI : 5.0.9\r\nAlloy : 1.9.1\r\nMAC El Capitan : 10.11.5\r\nAppc NPM : 4.2.8-1\r\nAppc CLI : 5.4.0-28\r\nNode: 4.4.4\r\nNexus5X: Android 6.0.1\r\n", "updateAuthor": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2016-07-08T22:48:28.000+0000", "updated": "2016-07-08T22:48:43.000+0000" }, { "id": "390251", "author": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "body": "[~lchoudhary] I assume the expected behaviour for number 6 would be the same results as number 4?", "updateAuthor": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "created": "2016-07-11T03:07:46.000+0000", "updated": "2016-07-11T03:07:46.000+0000" }, { "id": "390337", "author": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "body": "[~msamah], \r\n1. Everything works fine until {{step 4}}. \r\n2. At {{step 5}} I again click {{authenticate}} & I after clicking {{authenticate}} I get alert {{Message: Fingerprint operation cancelled}}.\r\n3. I keep on getting this {{Message: Fingerprint operation cancelled}} until I scan my correct finger.\r\n\r\nSo basically, after a failure it will keep showing you alert {{Message: Fingerprint operation cancelled}} every time I click {{authenticate}}, until you scan the correct finger (FYI, at this step even though you get an alert {{Message: Fingerprint operation cancelled}} the scanner can still scan the finger.)\r\n", "updateAuthor": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2016-07-11T17:49:30.000+0000", "updated": "2016-07-11T21:13:23.000+0000" }, { "id": "391634", "author": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "body": "[~lchoudhary]\r\nThis is actually expected behaviour.\r\nWhat's happening is that at step 4, once you get an {{Unable to recognize fingerprint}}, you should not press authenticate again. Instead, you should just provide another fingerprint for the sensor to read.\r\n\r\nIdeally it should instead show a blocking dialog UI for the fingerprint. Be it success or failure. This is because it is waiting till you provide a correct fingerprint and will stay there even at failure. (You might have a dirty finger after all and need to clean it. Thus it lets you read it again).\r\n!Screenshot_20160727-155415.png|thumbnail!\r\n\r\nI would suggest that we resolve this ticket (and perhaps document this) as it is and create a ticket for a improvement on this flow. [~lchoudhary]\r\n\r\nReference https://github.com/googlesamples/android-FingerprintDialog", "updateAuthor": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "created": "2016-07-27T08:01:23.000+0000", "updated": "2016-07-27T08:03:47.000+0000" }, { "id": "391635", "author": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "body": "[~lchoudhary] If my idea is acceptable please resolve this issue.", "updateAuthor": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "created": "2016-07-27T08:02:04.000+0000", "updated": "2016-07-27T08:02:04.000+0000" }, { "id": "391637", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "[~msamah] Can we make a tiny doc-note for that? Guess it's fine then.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-07-27T08:04:25.000+0000", "updated": "2016-07-27T08:04:25.000+0000" }, { "id": "391638", "author": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "body": "Ya. I'll proceed with a doc.", "updateAuthor": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "created": "2016-07-27T08:09:39.000+0000", "updated": "2016-07-27T08:09:39.000+0000" }, { "id": "391641", "author": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "body": "Doc PR: https://github.com/appcelerator-modules/ti.touchid/pull/21 [~hansknoechel] For your review.", "updateAuthor": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "created": "2016-07-27T08:30:40.000+0000", "updated": "2016-07-27T08:30:40.000+0000" }, { "id": "391661", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Merged. Please also consider to update the pre-packaged, although it's only a docs update.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-07-27T13:36:58.000+0000", "updated": "2016-07-27T13:37:18.000+0000" }, { "id": "391714", "author": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "body": "The behaviour seems to be as expected. Verified the addition of doc note.\r\n\r\nClosing.\r\n\r\nEnvironment:\r\nAppc Studio : 4.7.0.201607111053\r\nTi SDK : 5.4.0.v20160725003348\r\nTi CLI : 5.0.9\r\nAlloy : 1.9.1\r\nMAC El Capitan : 10.11.5\r\nAppc NPM : 4.2.8-1\r\nAppc CLI : 5.4.0-34\r\nNode: 4.4.4\r\nNexus 5X - Android 6.0.1", "updateAuthor": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2016-07-27T18:55:00.000+0000", "updated": "2016-07-27T18:55:43.000+0000" }, { "id": "391715", "author": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Reopening to correct comment\r\n", "updateAuthor": { "name": "lchoudhary", "key": "lchoudhary", "displayName": "Lokesh Choudhary", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2016-07-27T18:55:34.000+0000", "updated": "2016-07-27T18:55:34.000+0000" }, { "id": "391765", "author": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "body": "Created ticket MOD-2278 for the improvement mentioned here.", "updateAuthor": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "created": "2016-07-28T02:34:32.000+0000", "updated": "2016-07-28T02:34:32.000+0000" }, { "id": "391805", "author": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "body": "For document update:\r\nUpdated module PR: https://github.com/appcelerator-modules/ti.touchid/pull/22\r\nAdded to release: https://github.com/appcelerator-modules/ti.touchid/releases/tag/android-2.0.1\r\nTi SDK PR: https://github.com/appcelerator/titanium_mobile/pull/8166", "updateAuthor": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "created": "2016-07-28T08:36:24.000+0000", "updated": "2016-07-28T08:36:24.000+0000" }, { "id": "391807", "author": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "body": "PRs merged.", "updateAuthor": { "name": "msamah", "key": "msamah", "displayName": "Ashraf Abu", "active": false, "timeZone": "Asia/Singapore" }, "created": "2016-07-28T09:03:44.000+0000", "updated": "2016-07-28T09:03:44.000+0000" }, { "id": "403948", "author": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "body": "Using of version 2.0.1 (compiled with SDK6.0.0) doesn't show any UI.\r\ntestes devices: Galaxy6Edge with M and ZTEBlade7 with M.", "updateAuthor": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-01-02T19:19:31.000+0000", "updated": "2017-01-02T19:19:31.000+0000" }, { "id": "403951", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "[~titanium@webmasterei-hamburg.de] See the mentioned ticket (MOD-2278) for this, we discussed it earlier. The current Touch ID implementation on Android does not seem to have a UI expected. Feel free to add this functionality on Android as well.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-01-02T23:17:12.000+0000", "updated": "2017-01-02T23:17:12.000+0000" }, { "id": "403952", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Addition: And it is not natively supported. All that the [Google sample|https://github.com/googlesamples/android-FingerprintDialog] does is to create a custom UI to mock this behavior. Developers usually create their own UI on Android, see [this|http://blog.m2sys.com/wp-content/uploads/2015/11/Android-fingerprint.jpg] and [this|http://cdn.bgr.com/2015/05/dashlane-android-m-fingerprint-support.jpg?quality=98&strip=all] example as well.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-01-02T23:20:44.000+0000", "updated": "2017-01-02T23:20:44.000+0000" }, { "id": "403973", "author": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "body": "In this case a modified example/app.js is meaningful.\r\nThis irritates me: after start of `authenticate` comes immediately the error message (\"Cancel by user\"). I could create a dialog with text/image, but how handle, if the function doesn't wait. ", "updateAuthor": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-01-03T09:53:06.000+0000", "updated": "2017-01-03T09:53:06.000+0000" }, { "id": "403981", "author": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "body": "This works for me:\r\n```javascript\r\nmodule.exports = function(options, callbacks) {\r\n\tvar start = new Date().getTime();\r\n\tif (!TouchId.isSupported()) {\r\n\t\talert(\"This device doesn't support fingerprint sensor\");\r\n\t\treturn;\r\n\t}\r\n\tvar dialog = null;\r\n\tif (Ti.Platform.osname == \"android\") {\r\n\t\tvar timer = 0;\r\n\t\tvar cronHandler = function() {\r\n\t\t\ttimer++;\r\n\t\t\tif (timer == 600) {\r\n\t\t\t\tclearInterval(cron);\r\n\t\t\t} else {\r\n\t\t\t\tandroidView.children[0].backgroundImage = \"/assets/fingerprint\"\r\n\t\t\t\t\t\t+ timer % 9 + '.png';\r\n\t\t\t\tprogress.setValue(timer);\r\n\t\t\t}\r\n\t\t};\r\n\t\tvar cron = setInterval(cronHandler, 100);\r\n\t\tvar androidView = Ti.UI.createView({\r\n\t\t\ttop : 10,\r\n\t\t\tbottom : 10\r\n\t\t});\r\n\t\tandroidView.add(Ti.UI.createView({\r\n\t\t\ttop : 10,\r\n\t\t\tleft : 10,\r\n\t\t\twidth : 80,\r\n\t\t\theight : 90,\r\n\t\t\tbackgroundImage : \"/assets/fingerprint.png\"\r\n\t\t}));\r\n\t\tandroidView.add(Ti.UI.createLabel({\r\n\t\t\tleft : 100,\r\n\t\t\tright : 10,\r\n\t\t\ttop : 5,\r\n\t\t\ttext : options.message\r\n\t\t}));\r\n\t\tvar progress = Ti.UI.createProgressBar({\r\n\t\t\twidth : Ti.UI.FILL,\r\n\t\t\ttop : 100,\r\n\t\t\tleft : 10,\r\n\t\t\tright : 10,\r\n\t\t\tmin : 0,\r\n\t\t\tmax : 600\r\n\t\t});\r\n\t\tandroidView.add(progress);\r\n\t\tprogress.show();\r\n\t\tdialog = Ti.UI.createOptionDialog({\r\n\t\t\ttitle : options.title,\r\n\t\t\tandroidView : androidView,\r\n\t\t\tbuttonNames : [ \"Abbruch\" ]\r\n\t\t});\r\n\t\tdialog.addEventListener(\"click\",function(e){\r\n\t\t\tconsole.log(e.index);\r\n\t\t})\r\n\t\tdialog.show();\r\n\t}\r\n\tTouchId\r\n\t\t\t.authenticate({\r\n\t\t\t\treason : 'We need your fingerprint to continue.',\r\n\t\t\t\tcallback : function(e) {\r\n\t\t\t\t\tif (!!dialog)\r\n\t\t\t\t\t\tdialog.hide();\r\n\t\t\t\t\tconsole.log(\"Code=\" + e.code);\r\n\t\t\t\t\tif (!e.success) {\r\n\t\t\t\t\t\tvar end = new Date().getTime();\r\n\t\t\t\t\t\tconsole.log(\"TIMEOUT=\" + parseInt(end - start));\r\n\t\t\t\t\t\tTi.Media.vibrate([ 0, 30 ]);\r\n\t\t\t\t\t\tTi.UI\r\n\t\t\t\t\t\t\t\t.createNotification(\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tmessage : \"Zugang zur Belegübersicht ohne Fingersensorschutz\"\r\n\t\t\t\t\t\t\t\t\t\t}).show();\r\n\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tcallbacks.onsuccess();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n};\r\n```", "updateAuthor": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-01-03T12:56:51.000+0000", "updated": "2017-01-03T12:56:51.000+0000" }, { "id": "403983", "author": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "body": "This are possible payloads from callback:\r\n\r\n{\"message\":\"GurgsDNfmFvbkiR6IK0atg==\\n\",\"success\":true}\r\n{\"error\":\"Unable to recognize fingerprint\",\"success\":false}\r\n{\"error\":\"Fingerprint operation canceled.\",\"success\":false}\r\n\r\nMaybe we need an integer result code to better analyze the result.\r\n\r\nIn FingerPrintHelper.java#115 we need an additional property \"code\" and in 124, 131,140 modifications. next time I will send a PR.", "updateAuthor": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-01-03T13:26:04.000+0000", "updated": "2017-01-03T13:26:04.000+0000" }, { "id": "404072", "author": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "body": "I have a PR done.\r\nIt adds resultcodes to every callback (for i18n) and exposed the helpers/hints like \"Make sure that your finger covers the entire Home key\" or \"Keep your finger on the Home key a little longer\" with resultcode. A list of new constants is added.\r\n\r\n", "updateAuthor": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-01-04T10:41:10.000+0000", "updated": "2017-01-04T10:41:10.000+0000" }, { "id": "404077", "author": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "body": "For UI look to this [gist](https://gist.github.com/AppWerft/53469996b2a0589a037d2622fea6eb65)\r\n!https://github.com/AppWerft/ti.touchid/blob/master/android/assets/fingerprintDialog_screenshot.png!\r\n\r\n", "updateAuthor": { "name": "titanium@webmasterei-hamburg.de", "key": "titanium@webmasterei-hamburg.de", "displayName": "Rainer Schleevoigt", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-01-04T10:53:22.000+0000", "updated": "2017-01-04T10:53:22.000+0000" } ], "maxResults": 35, "total": 35, "startAt": 0 } } }