تکمیل خودکار در نوشتن

برخی از برنامه‌ها، مانند مدیریت رمز عبور، می‌توانند اجزای دیگر برنامه‌ها را با داده‌های ارائه شده توسط کاربر پر کنند. برنامه هایی که اجزای دیگر برنامه ها را پر می کنند، خدمات تکمیل خودکار نامیده می شوند. چارچوب تکمیل خودکار ارتباط بین یک برنامه و یک سرویس تکمیل خودکار را مدیریت می کند.

پر کردن مدارک و فرم ها یک کار زمان بر و مستعد خطا است. تکمیل خودکار به کاربران امکان می دهد در زمان پر کردن فیلدها صرفه جویی کنند و خطاهای ورودی کاربر را به حداقل می رساند.

تنها با چند خط کد، می توانید تکمیل خودکار را در Compose پیاده سازی کنید. این ویژگی مزایای زیر را برای کاربران فراهم می کند:

مدارک را پر کنید

تکمیل خودکار به کاربران این امکان را می دهد که اعتبار خود را به روش های زیر پر کنند:

  • هنگامی که کاربر به فیلدی ضربه می‌زند که معنای تکمیل خودکار تنظیم شده است، سیستم پیشنهادات تکمیل خودکار را برای کاربر نمایش می‌دهد.
  • این سیستم پیشنهادات تکمیل خودکار را برای کاربر نمایش می دهد و آنها را بر اساس آنچه کاربر تایپ می کند فیلتر می کند.

ذخیره اعتبار

کاربران می توانند اعتبارنامه ها را از طریق تکمیل خودکار به روش های زیر ذخیره کنند:

  • سیستم یک گفتگوی ذخیره را راه‌اندازی می‌کند، که از کاربر می‌خواهد وقتی اطلاعات جدید یا به‌روزرسانی‌شده را در یک فیلد با قابلیت تکمیل خودکار وارد می‌کند، اطلاعات را ذخیره کند. ذخیره سازی به دو صورت انجام می شود:
    • به طور صریح، با تعهد اطلاعات (مثلاً از طریق کلیک روی دکمه)
    • به طور ضمنی، زمانی که کاربر از صفحه دور می‌شود
  • بسته به ارائه‌دهنده اعتبار شما، زمانی که یک فیلد ContentType.NewPassword تنظیم شده باشد، ممکن است سیستم رمز عبور قوی به کاربر پیشنهاد دهد.

می‌توانید از «تکمیل خودکار» در برنامه‌تان برای ساده‌سازی بازیابی داده‌های ذخیره‌شده برای کاربران استفاده کنید. تکمیل خودکار از اجزای متنی از طریق BasicTextField و تمام فیلدهای متن Material که بر روی آن مؤلفه ساخته می شوند، پشتیبانی می کند.

تکمیل خودکار را تنظیم کنید

قبل از استفاده از API های تکمیل خودکار در دستگاه یا شبیه ساز خود، باید تکمیل خودکار را در تنظیمات فعال کنید. در آنجا، می‌توانید یک ارائه‌دهنده اعتبار برای تکمیل خودکار تعیین کنید تا اعتبار شما را ذخیره کند.

صفحه تنظیماتی که نحوه تعیین ارائه دهنده اعتبار را نشان می دهد.
شکل 1. صفحه تنظیمات که نحوه تعیین یک ارائه دهنده اعتبار را نشان می دهد.

با استفاده از نوع محتوا، تکمیل خودکار را به فیلد متنی خود اضافه کنید

برای نشان دادن اینکه یک TextField با تکمیل خودکار فعال است، معنای ContentType را با انواعی که فیلد می تواند بپذیرد تنظیم کنید. این به خدمات تکمیل خودکار نشان می دهد که چه نوع داده های کاربر ممکن است مربوط به این فیلد خاص باشد. از ContentType.Username برای تنظیم یک TextField استفاده کنید که کاربران می توانند با نام کاربری خود پر کنند.

TextField(
    value = textFieldValue.value,
    onValueChange = {textFieldValue.value = it},
    modifier = Modifier.semantics { contentType = ContentType.Username }
)

با تنظیم معنای ContentType ، کاربران شما می‌توانند به اطلاعات تکمیل خودکار که قبلاً در ارائه‌دهنده اعتبار دستگاهشان ذخیره شده است دسترسی داشته باشند. به عنوان مثال، اگر کاربری قبلاً از طریق مرورگر Chrome در لپ‌تاپ خود وارد برنامه شما شده باشد و رمز عبور خود را از طریق ارائه‌دهنده اعتبار ذخیره کرده باشد، اعتبار او از طریق تکمیل خودکار به او ارائه می‌شود.

فیلدهای تکمیل خودکار را با انواع مختلف اضافه کنید

در برخی موارد، ممکن است بخواهید TextField شما بیش از یک ContentType داشته باشد. برای مثال، یک فیلد ورود ممکن است یک آدرس ایمیل یا یک نام کاربری را بپذیرد. با عملگر + می توانید چندین نوع محتوا را به TextField خود اضافه کنید.

TextField(
    value = textFieldValue.value,
    onValueChange = { textFieldValue.value = it },
    modifier = Modifier.semantics {
        contentType = ContentType.Username + ContentType.EmailAddress
    }
)

برای همه انواع داده‌های موجود برای ذخیره با تکمیل خودکار، به مرجع ContentType مراجعه کنید.

داده ها را با تکمیل خودکار پر کنید

هنگامی که یک ContentType در یک TextField اضافه می کنید، برای اینکه کاربران بتوانند اعتبارنامه ها را پر کنند، نیازی به انجام کار دیگری نخواهید داشت.

وقتی کاربر روی یک فیلد فعال شده با تکمیل خودکار کلیک می‌کند، اگر داده‌های مرتبط ذخیره شده باشد، تراشه‌ای را در نوار ابزار بالای صفحه‌کلید می‌بیند که از او می‌خواهد اعتبارنامه‌ها را پر کند.

تراشه‌هایی در نوار ابزار متن که اعتبار ذخیره‌شده را نشان می‌دهد.
شکل 2. تراشه‌هایی در نوار ابزار متن که اعتبار ذخیره شده را نشان می‌دهد.

داده ها را با تکمیل خودکار از طریق پیمایش ذخیره کنید

نوشتن به طور خودکار سعی می کند تعیین کند که کاربر چه زمانی از یک صفحه حرکت می کند و اعتبارنامه های وارد شده را متعهد می کند. هنگامی که یک فیلد با تکمیل خودکار فعال شود، هنگامی که کاربر بدون نیاز به کد اضافی از صفحه خارج می شود، به طور خودکار اطلاعات اعتبارنامه را ذخیره می کند.

داده ها را به صراحت با تکمیل خودکار ذخیره کنید

برای ذخیره صریح اعتبارنامه‌های جدید از طریق فیلدهای متنی با تکمیل خودکار، متن تکمیل خودکار باید توسط مدیر تکمیل خودکار متعهد (یا لغو) شود. سپس مدیر تکمیل خودکار محلی هر زمان که لازم باشد با چارچوب تکمیل خودکار ارتباط برقرار می کند. اگر می‌خواهید اعتبارنامه‌هایی را که کاربر وارد کرده است حذف کنید، با AutofillManager.cancel تماس بگیرید تا داده‌های معلق را بدون ذخیره کردن حذف کنید.

قطعه‌های زیر نحوه ذخیره داده‌ها با تکمیل خودکار را به‌صراحت با استفاده از یک دکمه نشان می‌دهند:

  1. یک متغیر محلی برای نگه داشتن مدیر تکمیل خودکار ایجاد کنید که به روش زیر قابل بازیابی است:

    val autofillManager = LocalAutofillManager.current

  2. در TextField(s) خود، نوع محتوای مورد نظر خود را از طریق Modifier.semantics اضافه کنید:

    val autofillManager = LocalAutofillManager.current
    
    Column {
        TextField(
            value = textFieldValue.value,
            onValueChange = { textFieldValue.value = it },
            modifier = Modifier.semantics { contentType = ContentType.NewUsername }
        )
    
        Spacer(modifier = Modifier.height(16.dp))
    
        TextField(
            value = textFieldValue.value,
            onValueChange = { textFieldValue.value = it },
            modifier = Modifier.semantics { contentType = ContentType.NewPassword }
        )
    }

  3. متن تکمیل خودکار را در صورت نیاز از طریق یک کلیک دکمه متعهد کنید:

    val autofillManager = LocalAutofillManager.current
    
    Column {
        TextField(
            value = textFieldValue.value,
            onValueChange = { textFieldValue.value = it },
            modifier = Modifier.semantics { contentType = ContentType.NewUsername },
        )
    
        Spacer(modifier = Modifier.height(16.dp))
    
        TextField(
            value = textFieldValue.value,
            onValueChange = { textFieldValue.value = it },
            modifier = Modifier.semantics { contentType = ContentType.NewPassword },
        )
    
        // Submit button
        Button(onClick = { autofillManager?.commit() }) { Text("Reset credentials") }
    }

هر زمان که کاربر از صفحه دور شود، Commit فراخوانی می شود. اگر دکمه ارسال به ناوبری مرتبط باشد، دیگر نیازی به فراخوانی Commit نیست. اگر همچنان می‌خواهید روی ارسال کلیک کنید تا گفتگوی ذخیره فعال شود، Commit را در اینجا اضافه کنید.

وقتی کاربر روی دکمه کلیک می‌کند، این صفحه پایین را می‌بیند که از او می‌خواهد اعتبارنامه‌ها را در ارائه‌دهنده اعتبار انتخابی ذخیره کند:

برگه پایین که از کاربران می خواهد رمز عبور را ذخیره کنند.
شکل 3. برگه پایینی که از کاربران می خواهد رمز عبور را ذخیره کنند.

داده ها را با تکمیل خودکار از طریق پیشنهاد رمز عبور قوی ذخیره کنید

بسته به ارائه‌دهنده اعتبار شما، زمانی که از انواع محتوای NewUsername و NewPassword استفاده می‌کنید، کاربران ممکن است دکمه‌ای را در صفحه کلید برای پیشنهاد رمز عبور قوی ببینند. وقتی روی این کلیک می‌کنند، یک صفحه پایین ظاهر می‌شود که به آنها اجازه می‌دهد اعتبار خود را ذخیره کنند. برای اینکه کاربران این تجربه را داشته باشند، نیازی به پیاده سازی چیز دیگری ندارید.

تراشه رمز عبور قوی پیشنهاد در نوار ابزار صفحه کلید.
شکل 4. تراشه رمز عبور قوی پیشنهاد در نوار ابزار صفحه کلید.
برگه پایینی که کاربران را به استفاده از رمز عبور قوی ترغیب می کند.
شکل 5. برگه پایینی که کاربران را به استفاده از رمز عبور قوی ترغیب می کند.

عیب یابی

هنگام فراخوانی سفر کاربر "ذخیره"، اگر بیش از یک بار روی "الان نه" کلیک کنید، ممکن است ارائه دهنده اعتبار شما دیگر برگه پایینی را نمایش ندهد. برای فعال کردن مجدد آن و نمایش مجدد آن، باید برنامه های خاصی را حذف کنید که «این رمز عبور را به خاطر بسپارید؟» را مسدود کرده اند.

برگه پایین که از کاربران می خواهد رمز عبور را ذخیره کنند.
شکل 6. برگه پایینی که از کاربران می خواهد رمز عبور را ذخیره کنند.

تکمیل خودکار را بیشتر سفارشی کنید

در یک سفر معمولی کاربر تکمیل خودکار، هنگامی که یک مؤلفه دارای قابلیت تکمیل خودکار با اعتبارنامه ها پر می شود، رنگ آن تغییر می کند و برجسته می شود تا به کاربر سیگنال دهد که تکمیل خودکار با موفقیت انجام شده است.

برای سفارشی کردن این رنگ هایلایت، از CompositionLocal استفاده کنید و هر رنگی را که می خواهید ارائه دهید.

val customHighlightColor = Color.Red

CompositionLocalProvider(LocalAutofillHighlightColor provides customHighlightColor) {
    TextField(
        value = textFieldValue.value,
        onValueChange = { textFieldValue.value = it },
        modifier = Modifier.semantics { contentType = ContentType.Username }
    )
}

رنگ برجسته‌سازی تکمیل خودکار پیش‌فرض به صورت Color(0x4dffeb3b) تعریف می‌شود.