---
title: "طريقة سهلة لبناء ميزة رمز PIN تفاعلية وآمنة في Android"
description: "إليكم طريقة سهلة لبناء ميزة رمز PIN تفاعلية (reactive) في Android مع حماية البيانات."
canonical: https://oozou.com/ar/blog/an-easy-way-to-make-reactive-android-pin-code-feature-with-secure-data-91
locale: ar
date: 2020-09-09
author: "OOZOU Team"
---

# طريقة سهلة لبناء ميزة رمز PIN تفاعلية وآمنة في Android

> إليكم طريقة سهلة لبناء ميزة رمز PIN تفاعلية (reactive) في Android مع حماية البيانات.

Published: 2020-09-09 · Author: OOZOU Team (Engineering) · 3 min read

قبل سنوات عديدة، لم يكن بناء ميزة رمز PIN مع حماية البيانات أمرًا سهلًا من دون Data Binding. كان عليكم ربما إنشاء ملف XML إلى جانب صنف (class) مخصص للعرض، أما مع Data Binding فيمكنكم بناء ميزة رمز PIN بسهولة أكبر.

سأوضح كيفية استخدام Data Binding من خلال بناء ميزة رمز PIN تحدّث واجهة المستخدم تفاعليًا مع كل تغيير في البيانات.

**ما هو Data Binding في Android؟**مكتبة Data Binding مكتبة دعم تتيح لكم ربط مكونات واجهة المستخدم في التخطيطات (layouts) بمصادر البيانات في تطبيقكم باستخدام صيغة تصريحية بدلًا من الربط البرمجي. _--_ [_Data Binding Library_](https://developer.android.com/topic/libraries/data-binding)كنت أتساءل: "لماذا نستخدم Data Binding ولدينا Kotlin Synthetics التي تتيح الوصول إلى مكونات الواجهة مباشرة من الـ fragment/activity؟" الجواب أن Data Binding يتيح لكم الوصول إلى الـ ViewModel مباشرة وتفاعليًا من ملف XML، ويمكننا كتابة تعبير بسيط لا يحتاج إلى أي كود برمجي داخل الـ fragment/activity.**طريقة التنفيذ.**

لنبدأ بملف PinCodeViewModel.kt الذي يحتوي على منطق إضافة أرقام رمز PIN وحذفها.

```
package com.him.secured_pincode.ui.main

import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel

class PinCodeViewModel : ViewModel() {

    val pinCode = MutableLiveData<String>().also {
        it.value = ""
    }

    val numPadListener = object : NumPadListener {
        override fun onNumberClicked(number: Char) {
            val existingPassCode = pinCode.value ?: ""
            val newPassCode = existingPassCode + number
            pinCode.postValue(newPassCode)
        }

        override fun onEraseClicked() {
            val droppedLast = pinCode.value?.dropLast(1) ?: ""
            pinCode.postValue(droppedLast)
        }
    }

}
<strong>language-</strong>kotlin
```

إنشاء نقاط رمز PIN وتغيير لونها تفاعليًا
أنشئوا ملف layout_pin_code_dots.xml. يحتوي الملف على نقاط رمز PIN، ويحوّل كل نقطة بيضاء إلى نقطة بنفسجية كلما أدخل المستخدم رقمًا من الرمز، وذلك بإضافة تعبير بسيط إلى النقاط كما يلي:

```xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>

        <variable
            name="pinCode"
            type="androidx.lifecycle.MutableLiveData&lt;java.lang.String>" />
    </data>

....
        <View
            android:id="@+id/dot1"
            android:layout_width="@dimen/pincode_dot_size"
            android:layout_height="@dimen/pincode_dot_size"
            android:background="@drawable/pass_code_dot_selector"

<-- We will change the first dot to a purple dot when the user entered the first pin code -->
            android:enabled="@{pinCode.length() >= 1}" />

        <View
            android:id="@+id/dot2"
            android:layout_width="@dimen/pincode_dot_size"
            android:layout_height="@dimen/pincode_dot_size"
            android:layout_marginStart="16dp"
            android:background="@drawable/pass_code_dot_selector"
            android:enabled="@{pinCode.length() >= 2}" />
<strong>...</strong>
```

أنشئوا ملف XML للوحة الأرقام وأضيفوا callback إلى كل زر، بحيث نضيف أرقام الرمز إلى الـ ViewModel مباشرة من دون أي كود إضافي داخل الـ fragment/activity.

```xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>

        <variable
            name="numPadListener"
            type="com.him.secured_pincode.ui.main.NumPadListener" />

    </data>

...
        <Button
            style="@style/passCodeButton"
            android:onClick="@{(v) -> numPadListener.onNumberClicked('1')}"
            android:text="1" />

        <Button
            style="@style/passCodeButton"
            android:layout_marginStart="24dp"
            android:onClick="@{(v) -> numPadListener.onNumberClicked('2')}"
            android:text="2" />
...
```

وهذا كل شيء، بهذه السهولة نبني ميزة رمز PIN باستخدام Data Binding. شاركونا إن كانت لديكم أفكار أخرى، ويمكنكم العثور على الكود المصدري على [Github](https://github.com/arohim/secure-pin-code-sample)
وفي الجزء التالي، سأشرح [طريقة سهلة لتأمين رمز PIN في Android.](https://oozou.com/blog/an-easy-way-to-secure-your-sensitive-data-on-android-92?preview_token=PZF78y2E7SsdShtKiue1Bon1)

---

Contact OOZOU: hello@oozou.com · +66 2544 0000 · https://oozou.com/ar/contact

More for AI agents: https://oozou.com/llms.txt · every page has a markdown twin at its URL plus ".md"
