{"id":788,"date":"2018-02-01T20:46:26","date_gmt":"2018-02-01T18:46:26","guid":{"rendered":"http:\/\/fatihsoysal.com\/blog\/?p=788"},"modified":"2018-02-09T21:47:42","modified_gmt":"2018-02-09T19:47:42","slug":"android-parmak-izi-kimlik-dogrulama-ornek-uygulama","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/android-parmak-izi-kimlik-dogrulama-ornek-uygulama\/","title":{"rendered":"Android Parmak \u0130zi Kimlik Do\u011frulamas\u0131 &#8211; \u00d6rnek Uygulama"},"content":{"rendered":"<blockquote><p>Bu yaz\u0131da, Android Uygulamada Parmak izi veya Biyometrik Kimlik Do\u011frulama y\u00f6nteminin nas\u0131l kullan\u0131laca\u011f\u0131n\u0131 \u00f6\u011frenece\u011fiz.<\/p><\/blockquote>\n<p>Android cihaz\u0131n parmak izi sens\u00f6r\u00fcn\u00fc kullanarak kullan\u0131c\u0131n\u0131n kimli\u011fini do\u011frulamak istiyoruz. Bunun i\u00e7in <strong>FingerprintManager<\/strong> s\u0131n\u0131f\u0131n\u0131n bir \u00f6rne\u011fini kullanaca\u011f\u0131z ve <strong>authenticate()<\/strong> fonksiyonunu \u00e7a\u011f\u0131raca\u011f\u0131z. Bildi\u011finiz \u00fczere Android cihazlar\u0131n \u00e7o\u011fu parmak izi alg\u0131lay\u0131c\u0131lar\u0131 desteklenmiyor, bu makalede olu\u015fturulan \u00f6rnek uygulama <strong>API 23<\/strong> \u00fczerinde \u00e7al\u0131\u015fmaktad\u0131r.<\/p>\n<p><strong>Yeni bir proje olu\u015ftural\u0131m<\/strong><\/p>\n<p>Android studio \u00fczerinde <strong>File \u21d2 New \u21d2 New Projects <\/strong>olarak ilerleyelim\u00a0ve minimum SDK s\u00fcr\u00fcm\u00fcn\u00fc<strong> API 23: Android 6.0 (Marshmallow)<\/strong> olarak ayarlayal\u0131m.<\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"aligncenter size-large wp-image-789\" src=\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2018\/02\/fingerprint_min_sdk_api-1024x686.png\" alt=\"\" width=\"600\" height=\"402\" srcset=\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2018\/02\/fingerprint_min_sdk_api-1024x686.png 1024w, https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2018\/02\/fingerprint_min_sdk_api-300x201.png 300w, https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2018\/02\/fingerprint_min_sdk_api-768x514.png 768w, https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2018\/02\/fingerprint_min_sdk_api-800x536.png 800w, https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2018\/02\/fingerprint_min_sdk_api.png 1062w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/p>\n<p><strong>\u0130zinleri Ayarlayal\u0131m<\/strong><\/p>\n<p>Kullan\u0131c\u0131n\u0131n kimli\u011fini do\u011frulamak i\u00e7in, <strong>AndroidManifest.xml<\/strong> dosyas\u0131nda <strong>USE_FINGERPRINT<\/strong> iznini ekleyelim.<\/p>\n<pre class=\"lang:default decode:true \">&lt;uses-permission android:name=\"android.permission.USE_FINGERPRINT\" \/&gt;<\/pre>\n<p><strong>Layout Ekleme \u0130\u015flemleri<\/strong><\/p>\n<p><strong>Activity_main.xml<\/strong> dosyas\u0131na a\u015fa\u011f\u0131daki kodu ekleyelim. <a href=\"https:\/\/images.vexels.com\/media\/users\/3\/126591\/raw\/e9a30fe9e5299be75e99f836e4f09809-gradient-fingerprint-illustration.jpg\" target=\"_blank\" rel=\"noopener\">Buradan <\/a>\u00f6rnek g\u00f6rsele ula\u015fabilirsiniz.<\/p>\n<pre class=\"lang:default decode:true \">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;RelativeLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\r\n    xmlns:tools=\"http:\/\/schemas.android.com\/tools\"\r\n    android:layout_width=\"match_parent\"\r\n    android:layout_height=\"match_parent\"\r\n    android:paddingBottom=\"@dimen\/activity_vertical_margin\"\r\n    android:paddingLeft=\"@dimen\/activity_horizontal_margin\"\r\n    android:paddingRight=\"@dimen\/activity_horizontal_margin\"\r\n    android:paddingTop=\"@dimen\/activity_vertical_margin\"\r\n    tools:context=\"in.studytutorial\r\n           .androidfingerprintauthentication.MainActivity\"&gt;\r\n \r\n \r\n    &lt;LinearLayout\r\n        android:layout_width=\"match_parent\"\r\n        android:id=\"@+id\/headerLayout\"\r\n        android:orientation=\"vertical\"\r\n        android:gravity=\"center\"\r\n        android:layout_marginTop=\"100dp\"\r\n        android:layout_height=\"wrap_content\"&gt;\r\n \r\n \r\n        &lt;ImageView\r\n            android:id=\"@+id\/icon\"\r\n            android:layout_width=\"50dp\"\r\n            android:layout_height=\"50dp\"\r\n            android:src=\"@drawable\/ic_fp\"\r\n            android:paddingTop=\"2dp\"\r\n            android:layout_marginBottom=\"30dp\"\/&gt;\r\n \r\n \r\n \r\n        &lt;TextView\r\n            android:layout_width=\"match_parent\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:textColor=\"#000\"\r\n            android:textSize=\"16sp\"\r\n            android:textAlignment=\"center\"\r\n            android:gravity=\"center\"\r\n            android:id=\"@+id\/desc\"\r\n            android:text=\"Please place your fingertip \r\n                  on the scanner to verify your identity\"\r\n            android:layout_margin=\"16dp\"\r\n            android:paddingEnd=\"30dp\"\r\n            android:paddingStart=\"30dp\"\/&gt;\r\n \r\n \r\n        &lt;TextView\r\n            android:layout_width=\"match_parent\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:textColor=\"@color\/errorText\"\r\n            android:textSize=\"14sp\"\r\n            android:textAlignment=\"center\"\r\n            android:id=\"@+id\/errorText\"\r\n            android:paddingEnd=\"30dp\"\r\n            android:paddingStart=\"30dp\"\r\n            android:layout_marginTop=\"30dp\"\r\n            android:gravity=\"center\"\/&gt;\r\n \r\n    &lt;\/LinearLayout&gt;\r\n    &lt;TextView\r\n        android:layout_width=\"wrap_content\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:textColor=\"#000\"\r\n        android:textSize=\"14sp\"\r\n        android:text=\"(Your device should have at \r\n         least one fingerprint registered in device settings)\"\r\n        android:layout_marginLeft=\"16dp\"\r\n        android:textAlignment=\"center\"\r\n        android:layout_marginRight=\"16dp\"\r\n        android:layout_marginBottom=\"26dp\"\r\n        android:layout_alignParentBottom=\"true\"\/&gt;\r\n&lt;\/RelativeLayout&gt;<\/pre>\n<p><img decoding=\"async\" class=\"wp-image-790 size-medium alignleft\" src=\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2018\/02\/fingerprint_layout-169x300.png\" alt=\"\" width=\"169\" height=\"300\" srcset=\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2018\/02\/fingerprint_layout-169x300.png 169w, https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2018\/02\/fingerprint_layout-768x1365.png 768w, https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2018\/02\/fingerprint_layout-576x1024.png 576w, https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2018\/02\/fingerprint_layout-800x1422.png 800w, https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2018\/02\/fingerprint_layout.png 1080w\" sizes=\"(max-width: 169px) 100vw, 169px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p><strong>Solda g\u00f6rd\u00fc\u011f\u00fcn\u00fcz ekran\u0131 olu\u015fturduk. \u015eimdi ikinci bir activity olu\u015ftural\u0131m.<\/strong><\/p>\n<p>Kimlik do\u011frulamas\u0131n\u0131 ba\u015far\u0131l\u0131 bir \u015fekilde yapt\u0131ktan sonra kullan\u0131c\u0131ya ba\u015fka bir activity g\u00f6sterece\u011fiz. Dolay\u0131s\u0131yla, HomeActivity olarak ad\u0131nda yeni bir activity olu\u015fturmam\u0131z gerekiyor. A\u015fa\u011f\u0131daki kodu acitivity_home.xml dosyas\u0131na ekleyelim.<\/p>\n<pre class=\"lang:default decode:true \">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;RelativeLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\r\n    xmlns:tools=\"http:\/\/schemas.android.com\/tools\"\r\n    android:layout_width=\"match_parent\"\r\n    android:layout_height=\"match_parent\"\r\n    android:paddingBottom=\"@dimen\/activity_vertical_margin\"\r\n    android:paddingLeft=\"@dimen\/activity_horizontal_margin\"\r\n    android:paddingRight=\"@dimen\/activity_horizontal_margin\"\r\n    android:paddingTop=\"@dimen\/activity_vertical_margin\"\r\n    tools:context=\"in.studytutorial\r\n           .androidfingerprintauthentication.HomeActivity\"&gt;\r\n \r\n    &lt;TextView\r\n        android:layout_width=\"match_parent\"\r\n        android:text=\"Welcome To Home Activity\"\r\n        android:layout_centerVertical=\"true\"\r\n        android:textSize=\"24sp\"\r\n        android:textAlignment=\"center\"\r\n        android:textColor=\"@color\/colorPrimary\"\r\n        android:layout_height=\"wrap_content\" \/&gt;\r\n \r\n \r\n    &lt;TextView\r\n        android:layout_width=\"match_parent\"\r\n        android:text=\"You have successfully authenticate \r\n          with fingerprint\"\r\n        android:layout_alignParentBottom=\"true\"\r\n        android:textSize=\"14sp\"\r\n        android:textAlignment=\"center\"\r\n        android:textColor=\"@color\/colorPrimary\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:layout_marginBottom=\"24dp\"\/&gt;\r\n \r\n&lt;\/RelativeLayout&gt;<\/pre>\n<p><img decoding=\"async\" class=\"size-medium wp-image-791 alignleft\" src=\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2018\/02\/homeactivity-169x300.png\" alt=\"\" width=\"169\" height=\"300\" srcset=\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2018\/02\/homeactivity-169x300.png 169w, https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2018\/02\/homeactivity-768x1365.png 768w, https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2018\/02\/homeactivity-576x1024.png 576w, https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2018\/02\/homeactivity-800x1422.png 800w, https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2018\/02\/homeactivity.png 1080w\" sizes=\"(max-width: 169px) 100vw, 169px\" \/><\/p>\n<p>Soldaki ekran ba\u015far\u0131l\u0131 bi\u00e7imde parmak izini girmi\u015f kullan\u0131c\u0131lar\u0131n g\u00f6rece\u011fi ekran.<\/p>\n<p><strong>Parmak \u0130zi Kimlik Do\u011frulama \u0130\u015flemi i\u00e7in S\u0131n\u0131f\u0131 Olu\u015fturma<\/strong><\/p>\n<p><strong>FingerprintAuthenticationHandler<\/strong> ad\u0131nda yeni bir java s\u0131n\u0131f\u0131 ad\u0131 olu\u015fturaca\u011f\u0131z. Bunu kimlik do\u011frulama yan\u0131t\u0131n\u0131 i\u015flemek i\u00e7in kullanaca\u011f\u0131z.<\/p>\n<pre class=\"lang:default decode:true \">import android.Manifest;\r\nimport android.app.Activity;\r\nimport android.content.Context;\r\nimport android.content.Intent;\r\nimport android.content.pm.PackageManager;\r\nimport android.hardware.fingerprint.FingerprintManager;\r\nimport android.os.CancellationSignal;\r\nimport android.support.v4.app.ActivityCompat;\r\nimport android.support.v4.content.ContextCompat;\r\nimport android.widget.TextView;\r\n \r\n \r\npublic class FingerprintAuthenticationHandler extends\r\n                      FingerprintManager.AuthenticationCallback {\r\n \r\n \r\n    private Context context;\r\n \r\n    \/\/ Constructor\r\n    public FingerprintAuthenticationHandler(Context mContext) {\r\n        context = mContext;\r\n    }\r\n \r\n \r\n    public void startAuth(FingerprintManager manager, \r\n                   FingerprintManager.CryptoObject cryptoObject) {\r\n \r\n        CancellationSignal cancellationSignal = new CancellationSignal();\r\n        if (ActivityCompat.checkSelfPermission(context, \r\n               Manifest.permission.USE_FINGERPRINT) != \r\n                PackageManager.PERMISSION_GRANTED) {\r\n            return;\r\n        }\r\n        manager.authenticate(cryptoObject, cancellationSignal, 0, this, null);\r\n    }\r\n \r\n \r\n    @Override\r\n    public void onAuthenticationError(int errMsgId, CharSequence errString) {\r\n        this.update(\"Fingerprint Authentication error\\n\" + errString, false);\r\n    }\r\n \r\n \r\n    @Override\r\n    public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {\r\n        this.update(\"Fingerprint Authentication help\\n\" + helpString, false);\r\n    }\r\n \r\n \r\n    @Override\r\n    public void onAuthenticationFailed() {\r\n        this.update(\"Fingerprint Authentication failed.\", false);\r\n    }\r\n \r\n \r\n    @Override\r\n    public void onAuthenticationSucceeded(\r\n             FingerprintManager.AuthenticationResult result) {\r\n        this.update(\"Fingerprint Authentication succeeded.\", true);\r\n    }\r\n \r\n \r\n    public void update(String e, Boolean success){\r\n        TextView textView = (TextView) ((Activity)context)\r\n           .findViewById(R.id.errorText);\r\n        textView.setText(e);\r\n        if(success){\r\n            textView.setTextColor(ContextCompat.getColor(context,\r\n               R.color.colorPrimaryDark));\r\n            Intent i = new Intent(context, HomeActivity.class);\r\n            context.startActivity(i);\r\n        }\r\n    }\r\n}<\/pre>\n<p><strong>MainActivity S\u0131n\u0131f\u0131<\/strong><\/p>\n<p>Bu s\u0131n\u0131fta, donan\u0131m \u00f6zelliklerini kontrol etmek, \u015fifre anahtar\u0131 olu\u015fturmak, \u015fifreli Parmak \u0130zi Y\u00f6neticisi ve kimlik do\u011frulama s\u00fcrecini y\u00f6netmek i\u00e7in kullan\u0131lan baz\u0131 y\u00f6ntemleri uygulayaca\u011f\u0131z.<\/p>\n<p>Hem Android Tu\u015f Kilidi Y\u00f6neticisi hem de Parmak \u0130zi Y\u00f6neticisi&#8217;ni ba\u015flataca\u011f\u0131z. Tu\u015f Kilidi Y\u00f6neticisi, ayarlarda etkinle\u015ftirilmi\u015f kilit ekran\u0131 g\u00fcvenli\u011fini kontrol etmek i\u00e7in kullan\u0131l\u0131r. Parmak \u0130zi Y\u00f6neticisi, donan\u0131m \u00f6zelliklerini kontrol etmek i\u00e7in kullan\u0131l\u0131r. Ayr\u0131ca a\u015fa\u011f\u0131daki metodlar\u0131 da olu\u015fturun:<\/p>\n<ul>\n<li><strong>generateKey()<\/strong> fonksiyonu, cihazda g\u00fcvenli bir \u015fekilde saklanan bir \u015fifreleme anahtar\u0131 \u00fcretir.<\/li>\n<li><strong>cipherInit()<\/strong>\u00a0\u015fifreli parmak izi y\u00f6neticisi olu\u015fturmak i\u00e7in kullan\u0131lacak \u015fifreyi ba\u015flatan fonksiyon.<\/li>\n<li><strong>CryptoObject<\/strong> onCreate() fonksiyonunda kullan\u0131lan kimlik do\u011frulama i\u015flemini ba\u015flatmadan \u00f6nce \u00f6rnek ve \u00e7e\u015fitli di\u011fer kontrolleri i\u00e7erir.<\/li>\n<\/ul>\n<pre class=\"lang:default decode:true\">import android.Manifest;\r\nimport android.annotation.TargetApi;\r\nimport android.app.KeyguardManager;\r\nimport android.content.pm.PackageManager;\r\nimport android.hardware.fingerprint.FingerprintManager;\r\nimport android.os.Build;\r\nimport android.security.keystore.KeyGenParameterSpec;\r\nimport android.security.keystore.KeyPermanentlyInvalidatedException;\r\nimport android.security.keystore.KeyProperties;\r\nimport android.support.v4.app.ActivityCompat;\r\nimport android.support.v7.app.AppCompatActivity;\r\nimport android.os.Bundle;\r\nimport android.widget.TextView;\r\nimport java.io.IOException;\r\nimport java.security.InvalidAlgorithmParameterException;\r\nimport java.security.InvalidKeyException;\r\nimport java.security.KeyStore;\r\nimport java.security.KeyStoreException;\r\nimport java.security.NoSuchAlgorithmException;\r\nimport java.security.NoSuchProviderException;\r\nimport java.security.UnrecoverableKeyException;\r\nimport java.security.cert.CertificateException;\r\nimport javax.crypto.Cipher;\r\nimport javax.crypto.KeyGenerator;\r\nimport javax.crypto.NoSuchPaddingException;\r\nimport javax.crypto.SecretKey;\r\n \r\n \r\npublic class MainActivity extends AppCompatActivity {\r\n \r\n    private KeyStore keyStore;\r\n    \/\/ Variable used for storing the key in the Android Keystore container\r\n    private static final String KEY_NAME = \"studytutorial\";\r\n    private Cipher cipher;\r\n    private TextView textView;\r\n    public KeyguardManager keyguardManager;\r\n    public FingerprintManager fingerprintManager;\r\n \r\n \r\n    @Override\r\n    protected void onCreate(Bundle savedInstanceState) {\r\n        super.onCreate(savedInstanceState);\r\n        setContentView(R.layout.activity_main);\r\n \r\n        \/\/ Initializing both Android Keyguard Manager and Fingerprint Manager\r\n        keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);\r\n        fingerprintManager = (FingerprintManager) getSystemService(FINGERPRINT_SERVICE);\r\n \r\n \r\n        textView = (TextView) findViewById(R.id.errorText);\r\n \r\n        checkFingerPrintScanner();\r\n \r\n    }\r\n \r\n    protected void checkFingerPrintScanner(){\r\n        \/\/ Check whether the device has a Fingerprint sensor.\r\n        if(!fingerprintManager.isHardwareDetected()){\r\n            \/**\r\n             * An error message will be displayed if the device does not contain the fingerprint hardware.\r\n             * However if you plan to implement a default authentication method,\r\n             *\/\r\n            textView.setText(\"Your Device does not have a Fingerprint Sensor\");\r\n        }else {\r\n            \/\/ Checks whether fingerprint permission is set on manifest\r\n            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.USE_FINGERPRINT) != PackageManager.PERMISSION_GRANTED) {\r\n                textView.setText(\"Fingerprint authentication permission not enabled\");\r\n            }else{\r\n                \/\/ Check whether at least one fingerprint is registered\r\n                if (!fingerprintManager.hasEnrolledFingerprints()) {\r\n                    textView.setText(\"Register at least one fingerprint in Settings\");\r\n                }else{\r\n                    \/\/ Checks whether lock screen security is enabled or not\r\n                    if (!keyguardManager.isKeyguardSecure()) {\r\n                        textView.setText(\"Lock screen security not enabled in Settings\");\r\n                    }else{\r\n                        generateKey();\r\n \r\n \r\n                        if (cipherInit()) {\r\n                            FingerprintManager.CryptoObject cryptoObject = new FingerprintManager.CryptoObject(cipher);\r\n                            FingerprintAuthenticationHandler helper = new FingerprintAuthenticationHandler(this);\r\n                            helper.startAuth(fingerprintManager, cryptoObject);\r\n \r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n \r\n \r\n    @TargetApi(Build.VERSION_CODES.M)\r\n    protected void generateKey() {\r\n        try {\r\n            keyStore = KeyStore.getInstance(\"AndroidKeyStore\");\r\n        } catch (Exception e) {\r\n            e.printStackTrace();\r\n        }\r\n \r\n \r\n        KeyGenerator keyGenerator;\r\n        try {\r\n            keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, \"AndroidKeyStore\");\r\n        } catch (NoSuchAlgorithmException | NoSuchProviderException e) {\r\n            throw new RuntimeException(\"Failed to get KeyGenerator instance\", e);\r\n        }\r\n \r\n \r\n        try {\r\n            keyStore.load(null);\r\n            keyGenerator.init(new\r\n                    KeyGenParameterSpec.Builder(KEY_NAME,\r\n                    KeyProperties.PURPOSE_ENCRYPT |\r\n                            KeyProperties.PURPOSE_DECRYPT)\r\n                    .setBlockModes(KeyProperties.BLOCK_MODE_CBC)\r\n                    .setUserAuthenticationRequired(true)\r\n                    .setEncryptionPaddings(\r\n                            KeyProperties.ENCRYPTION_PADDING_PKCS7)\r\n                    .build());\r\n            keyGenerator.generateKey();\r\n        } catch (NoSuchAlgorithmException |\r\n                InvalidAlgorithmParameterException\r\n                | CertificateException | IOException e) {\r\n            throw new RuntimeException(e);\r\n        }\r\n    }\r\n \r\n \r\n    @TargetApi(Build.VERSION_CODES.M)\r\n    public boolean cipherInit() {\r\n        try {\r\n            cipher = Cipher.getInstance(KeyProperties.KEY_ALGORITHM_AES + \"\/\" + KeyProperties.BLOCK_MODE_CBC + \"\/\" + KeyProperties.ENCRYPTION_PADDING_PKCS7);\r\n        } catch (NoSuchAlgorithmException | NoSuchPaddingException e) {\r\n            throw new RuntimeException(\"Failed to get Cipher\", e);\r\n        }\r\n \r\n \r\n        try {\r\n            keyStore.load(null);\r\n            SecretKey key = (SecretKey) keyStore.getKey(KEY_NAME,\r\n                    null);\r\n            cipher.init(Cipher.ENCRYPT_MODE, key);\r\n            return true;\r\n        } catch (KeyPermanentlyInvalidatedException e) {\r\n            return false;\r\n        } catch (KeyStoreException | CertificateException | UnrecoverableKeyException | IOException | NoSuchAlgorithmException | InvalidKeyException e) {\r\n            throw new RuntimeException(\"Failed to init Cipher\", e);\r\n        }\r\n    }\r\n}<\/pre>\n<p>Bir sonraki makalemizde g\u00f6r\u00fc\u015fmek \u00fczere, soru g\u00f6r\u00fc\u015f ve \u00f6nerileriniz i\u00e7in ileti\u015fim b\u00f6l\u00fcm\u00fcn\u00fc kullanabilirsiniz.<\/p>\n","protected":false},"excerpt":{"rendered":"Bu yaz\u0131da, Android Uygulamada Parmak izi veya Biyometrik Kimlik Do\u011frulama y\u00f6nteminin nas\u0131l kullan\u0131laca\u011f\u0131n\u0131 \u00f6\u011frenece\u011fiz. Android cihaz\u0131n parmak izi&hellip;","protected":false},"author":1,"featured_media":792,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[134,10],"tags":[268,267,270,269],"class_list":{"0":"post-788","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-java-android-development","8":"category-yazilim","9":"tag-android-parmak-izi","10":"tag-android-parmak-izi-kimlik-dogrulama","11":"tag-android-studio-parmak-izi-ornegi","12":"tag-parmak-izi-uygulamasi","13":"cs-entry","14":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Android Parmak \u0130zi Kimlik Do\u011frulamas\u0131 - \u00d6rnek Uygulama - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/android-parmak-izi-kimlik-dogrulama-ornek-uygulama\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Android Parmak \u0130zi Kimlik Do\u011frulamas\u0131 - \u00d6rnek Uygulama\" \/>\n<meta property=\"og:description\" content=\"Bu yaz\u0131da, Android Uygulamada Parmak izi veya Biyometrik Kimlik Do\u011frulama y\u00f6nteminin nas\u0131l kullan\u0131laca\u011f\u0131n\u0131 \u00f6\u011frenece\u011fiz. Android cihaz\u0131n parmak izi&hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/android-parmak-izi-kimlik-dogrulama-ornek-uygulama\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2018-02-01T18:46:26+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-02-09T19:47:42+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2018\/02\/finger.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"576\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/android-parmak-izi-kimlik-dogrulama-ornek-uygulama\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/android-parmak-izi-kimlik-dogrulama-ornek-uygulama\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Android Parmak \u0130zi Kimlik Do\u011frulamas\u0131 &#8211; \u00d6rnek Uygulama\",\"datePublished\":\"2018-02-01T18:46:26+00:00\",\"dateModified\":\"2018-02-09T19:47:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/android-parmak-izi-kimlik-dogrulama-ornek-uygulama\/\"},\"wordCount\":448,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"image\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/android-parmak-izi-kimlik-dogrulama-ornek-uygulama\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2018\/02\/finger.jpg\",\"keywords\":[\"android parmak izi\",\"Android Parmak \u0130zi Kimlik Do\u011frulama\",\"android studio parmak izi \u00f6rne\u011fi\",\"parmak izi uygulamas\u0131\"],\"articleSection\":[\"JAVA - Android\",\"Yaz\u0131l\u0131m\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/android-parmak-izi-kimlik-dogrulama-ornek-uygulama\/#respond\"]}],\"copyrightYear\":\"2018\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/android-parmak-izi-kimlik-dogrulama-ornek-uygulama\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/android-parmak-izi-kimlik-dogrulama-ornek-uygulama\/\",\"name\":\"Android Parmak \u0130zi Kimlik Do\u011frulamas\u0131 - \u00d6rnek Uygulama - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/android-parmak-izi-kimlik-dogrulama-ornek-uygulama\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/android-parmak-izi-kimlik-dogrulama-ornek-uygulama\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2018\/02\/finger.jpg\",\"datePublished\":\"2018-02-01T18:46:26+00:00\",\"dateModified\":\"2018-02-09T19:47:42+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/android-parmak-izi-kimlik-dogrulama-ornek-uygulama\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/android-parmak-izi-kimlik-dogrulama-ornek-uygulama\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/android-parmak-izi-kimlik-dogrulama-ornek-uygulama\/#primaryimage\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2018\/02\/finger.jpg\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2018\/02\/finger.jpg\",\"width\":1024,\"height\":576},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/android-parmak-izi-kimlik-dogrulama-ornek-uygulama\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Android Parmak \u0130zi Kimlik Do\u011frulamas\u0131 &#8211; \u00d6rnek Uygulama\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Android Parmak \u0130zi Kimlik Do\u011frulamas\u0131 - \u00d6rnek Uygulama - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/android-parmak-izi-kimlik-dogrulama-ornek-uygulama\/","og_locale":"tr_TR","og_type":"article","og_title":"Android Parmak \u0130zi Kimlik Do\u011frulamas\u0131 - \u00d6rnek Uygulama","og_description":"Bu yaz\u0131da, Android Uygulamada Parmak izi veya Biyometrik Kimlik Do\u011frulama y\u00f6nteminin nas\u0131l kullan\u0131laca\u011f\u0131n\u0131 \u00f6\u011frenece\u011fiz. Android cihaz\u0131n parmak izi&hellip;","og_url":"https:\/\/fatihsoysal.com\/blog\/android-parmak-izi-kimlik-dogrulama-ornek-uygulama\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2018-02-01T18:46:26+00:00","article_modified_time":"2018-02-09T19:47:42+00:00","og_image":[{"width":1024,"height":576,"url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2018\/02\/finger.jpg","type":"image\/jpeg"}],"author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"8 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/android-parmak-izi-kimlik-dogrulama-ornek-uygulama\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/android-parmak-izi-kimlik-dogrulama-ornek-uygulama\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Android Parmak \u0130zi Kimlik Do\u011frulamas\u0131 &#8211; \u00d6rnek Uygulama","datePublished":"2018-02-01T18:46:26+00:00","dateModified":"2018-02-09T19:47:42+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/android-parmak-izi-kimlik-dogrulama-ornek-uygulama\/"},"wordCount":448,"commentCount":1,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"image":{"@id":"https:\/\/fatihsoysal.com\/blog\/android-parmak-izi-kimlik-dogrulama-ornek-uygulama\/#primaryimage"},"thumbnailUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2018\/02\/finger.jpg","keywords":["android parmak izi","Android Parmak \u0130zi Kimlik Do\u011frulama","android studio parmak izi \u00f6rne\u011fi","parmak izi uygulamas\u0131"],"articleSection":["JAVA - Android","Yaz\u0131l\u0131m"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/android-parmak-izi-kimlik-dogrulama-ornek-uygulama\/#respond"]}],"copyrightYear":"2018","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/android-parmak-izi-kimlik-dogrulama-ornek-uygulama\/","url":"https:\/\/fatihsoysal.com\/blog\/android-parmak-izi-kimlik-dogrulama-ornek-uygulama\/","name":"Android Parmak \u0130zi Kimlik Do\u011frulamas\u0131 - \u00d6rnek Uygulama - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/android-parmak-izi-kimlik-dogrulama-ornek-uygulama\/#primaryimage"},"image":{"@id":"https:\/\/fatihsoysal.com\/blog\/android-parmak-izi-kimlik-dogrulama-ornek-uygulama\/#primaryimage"},"thumbnailUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2018\/02\/finger.jpg","datePublished":"2018-02-01T18:46:26+00:00","dateModified":"2018-02-09T19:47:42+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/android-parmak-izi-kimlik-dogrulama-ornek-uygulama\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/android-parmak-izi-kimlik-dogrulama-ornek-uygulama\/"]}]},{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/android-parmak-izi-kimlik-dogrulama-ornek-uygulama\/#primaryimage","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2018\/02\/finger.jpg","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2018\/02\/finger.jpg","width":1024,"height":576},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/android-parmak-izi-kimlik-dogrulama-ornek-uygulama\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Android Parmak \u0130zi Kimlik Do\u011frulamas\u0131 &#8211; \u00d6rnek Uygulama"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/788","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=788"}],"version-history":[{"count":11,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/788\/revisions"}],"predecessor-version":[{"id":803,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/788\/revisions\/803"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media\/792"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=788"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=788"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=788"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}