پیکربندی Remote برای بررسی بروزرسانی‌های برنامه

ترجمه و تالیف : پوریا شریفی
تاریخ انتشار : 11 شهریور 99
خواندن در 3 دقیقه
دسته بندی ها : اندروید

فایربیس یک بستر توسعه نرم‌افزار موبایل و وب است که در سال 2011 توسط .INC ایجاد شده و سپس گوگل در سال 2014 آن را بدست آورد. از مارس 2014 پلتفرم فایربیس دارای 19 محصول است که توسط بیش از 1.5 میلیون برنامه استفاده می‌شود.

فایربیس این روزها برای توسعه‌دهندگان اندروید بسیار ضروری شده است. در این مقاله نحوه استفاده از Remote Config را برای نمایش بروزرسانی pop-up با استفاده از Rest Api یاد خواهیم گرفت.

بروزرسانی برنامه چیست؟

بروزرسانی برنامه چیزی نیست جز نسخه جدید موجود در فروشگاه، اما در حالی که کاربر از نسخه قدیمی استفاده می‌کند. این یک چیز عادی است که هنگامی که یک نسخه جدید اختیاری یا نسخه جدید اجباری launch می‌شود، یک pop-up برای آن نمایش داده شود.

بنابریان برای درک بهتر بیایید یک مثال بزنیم، فرض کنید که من یک برنامه در play store دارم اما یک خطای برنامه‌ای یا تغییر در کسب و کار رخ داده و نمی‌خواهم هیچ یک از کاربران قدیمی یا کاربران جدید من نسخه قدیمی برنامه را نصب یا استفاده کنند. بنابراین چه باید کرد؟ اگر آن مشکل را حل کنیم و نسخه جدیدی از برنامه را در فروشگاه منتشر کنم.

آیا این کافی است؟ خیر، فقط حل مسئله قابل قبول نیست. اینجا ما شرطی داریم که هیچ کاربری نمی‌تواند از نسخه قدیمی استفاده کند. پس چه کنیم؟ در اینجا ما باید یک بروزرسانی اجباری نشان دهیم. دو نوع بروزرسانی برنامه وجود دارد:

  • بروزرسانی اجباری: در اینجا ما بطور کلی یک pop-up اجباری برای بروزرسانی برنامه نشان می‌دهیم و به کاربر اجازه استفاده از برنامه را نمی‌دهیم. اجباری یعنی اینکه کاربر نمی‌تواند از ویژگی‌های برنامه بدون بروزرسانی به آخرین نسخه استفاده کند.

  • آخرین بروزرسانی: در اینجا بطور کلی یک pop-up را نشان می‌دهیم که نسخه جدیدی از برنامه در فروشگاه وجود دارد و از کاربر درخواست می‌کنیم برای استفاده بهتر، برنامه را بروز کند. این یک بروزرسانی اختیاری است و ما آن را بطور تصادفی نشان می‌دهیم، نه همیشه که باعث نارضایتی کاربر شود. کاربر در اینجا بدون بروزرسانی به آخرین نسخه، از هر ویژگی برنامه می‌تواند استفاده کند.

فکر کنم که تا اینجا یک دید کلی نسبت به آنچه که می‌خواهیم انجام دهیم بدست آورده‌اید، بنابراین بیایید قسمت کدگذاری را بررسی کنیم.

چه کاری می‌خواهیم انجام دهیم؟

بیایید قسمت کدگذاری را به صورت مرحله به مرحله انجام دهیم تا بتوانیم آن را درک کنیم.

  • تنطیم پیکربندی firebase remote config
  • اضافه کردن پارامترهای مورد نیاز در بخش remote config در کنسول فایربیس
  • تنظیم مقادیر پیش‌فرض پارامترها برای بررسی نیاز به بروزرسانی
  • اضافه کردن منطقی برای واکشی، فعال‌سازی و دریافت مقادیر پارامترها
  • پس از دریافت آخرین مقادیر، نسخه فعلی برنامه و نسخه remote را مقایسه کرده و در صورت لزوم pop-up بروزرسانی را نشان دهید

پیاده سازی

قدم اول: اضافه کردن وابستگی‌ها

اگر قبلاً فایربیس را اضافه نکرده‌اید، فایربیس را به پروژه اندروید خود اضافه کنید. سپس بیایید وابستگی‌های remote config را به build.gradle سطح برنامه اضافه کنیم.

implementation 'com.google.firebase:firebase-config-ktx:19.1.4'
implementation 'com.google.firebase:firebase-analytics-ktx:17.4.3'

برای remote config، گوگل آنالتیکس نیز برای conditional targeting برنامه به خصوصیات کاربر، مخاطبان و پیش‌بینی‌های فایربیس مورد نیاز است. بنابراین مطمئن شوید که گوگل آنالتیکس را به پروژه خود اضافه کرده‌اید.

قدم دوم: اضافه کردن پارامترهای مورد نیاز

اکنون زمان آن رسیده است که مقادیر لازم را در کنسول اضافه کنید. از کنسول فایربیس پروژه خود را باز کنید، سپس remote config را زیر قسمت Grew از بخش سمت چپ انتخاب کنید.

پارامترهای مورد نیاز عبارتند از:

  1. min_version_of_app: حداقل نسخه مورد نیاز برای استفاده از برنامه را مشخص می‌کند. بدون این نسخه یا یک نسخه بالاتر کاربر نمی‌تواند به محتوای برنامه دسترسی داشته باشد. ما بروزرسانی اجباری را از طریق این مورد نشان می‌دهیم.
  2. last_version_of_app: آخرین نسخه برنامه موجود در فروشگاه را مشخص می‌کند. ما از طریق این مورد بروزرسانی اختیاری را اعمال می‌کنیم.

نکته: نام پارامترها می‌تواند هرچیزی که دوست دارید باشد، اما موضوع پارامترها مهم است زیرا آن‌ها نیازهای ما را برآورده می‌کنند.

Parameter key و default value مقادیری هستند که باید پر کنیم و در آخر کلیک بر روی publish changes را فراموش نکنید تا تغییرات ما به صورت زنده اعمال شود. پارامترهای min_version_of_app و last_version_of_app را اضافه کنید و بر روی ذخیره تغییرات ضربه بزنید.

اکنون کار ما با سمت سرور به پایان رسیده است، پس بیایید به پیاده سازی سمت کلاینت برویم.

قدم سوم: تنظیم مقادیر پیش‌فرض پارامترهای مورد نیاز برنامه

ما می‌توانیم مقادیر پیش‌فرض پارامترهای داخل برنامه را در شیء remote config تنظیم کنیم تا برنامه قبل از اتصال به backend، remote config همانطور که در نظر گرفته شده است رفتار کند و به این ترتیب مقادیر پیش‌فرض در صورت عدم تنظیم در backend در دسترس باشند.

  1. مجموعه‌ای از نام پارامترها و مقادیر پیش‌فرض پارامترها را با استفاده از یک شیء map یا یک فایل xml ذخیره شده در res/xml تعریف کنید. Remote config از فایل xml برای تعریف نام و مقادیر پیش‌فرض پارامترها‌ استفاده میکند.
  2. این مقادیر را با استفاده از setDefaultAsync(int) به شیء remote config اضافه کنید، همانند زیر:
val remoteConfig = Firebase.remoteConfig
remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)

در این پروژه ما بر روی res کلیک راست می‌کنیم و در صورتی که پوشه xml وجو نداشت، آن را اضافه کنید و سپس فایل xml را با attribute به اسم welcome_image اضافه می‌کنیم.

قدم چهارم: بهترین کار مقداردهی اولیه همه موارد مرتبط با فایربیس در oncreate() کلاس اپلیکیشن همانند زیر است:

package com.example.viewmodel

import android.app.Application
import android.util.Log
import com.google.firebase.FirebaseApp
import com.google.firebase.remoteconfig.FirebaseRemoteConfig
import com.google.firebase.remoteconfig.FirebaseRemoteConfigSettings

class SampleApplication : Application() {

    override fun onCreate() {
        super.onCreate()
        initFirebaseRemoteConfig()
    }

    private fun initFirebaseRemoteConfig() {
        FirebaseApp.initializeApp(this)
        FirebaseRemoteConfig.getInstance().apply {
            //set this during development
            val configSettings = FirebaseRemoteConfigSettings.Builder()
                .setMinimumFetchIntervalInSeconds(0)
                .build()
            setConfigSettingsAsync(configSettings)
            //set this during development

            setDefaultsAsync(R.xml.remote_config_defaults)
            fetchAndActivate().addOnCompleteListener { task ->
                val updated = task.result
                if (task.isSuccessful) {
                    val updated = task.result
                    Log.d("TAG", "Config params updated: $updated")
                } else {
                    Log.d("TAG", "Config params updated: $updated")
                }
            }
        }

    }
}

این ابتدا فایربیس را مقداردهی می‌کند و مقادیر پیش‌فرض را با setDefaultAsync() تنظیم می‌کند و سپس واکشی انجام می‌دهد. پس از دریافت مقادیر از فایربیس از fetchAndActivate استفاده کردیم که به معنای واکشی و فعال کردن مقادیر یک‌بار دریافت شده است، بدین معنی که اگر کسی از آن نقطه پارامترها را از remoteConfigObject درخواست کند، آخرین مقادیر دریافت شده از سرور را خواهد داشت.

  1. برای واکشی مقدایر پارامترها از remote config backend، متد fetch() را صدا بزنید. مقادیری که در backend تنظیم کرده‌اید در شیء remote config دریافت و ذخیره می‌شود.
  2. برای دسترسی به مقادیر پارامترها در برنامه خود، متد activate را صدا بزنید.
  3. برای مواردی که می‌خواهید مقادیر را در یک فراخوانی واکشی و فعال کنید، می‌توانید از درخواست fetchAndActivate() برای واکشی از remote config backend استفاده کنید و آن‌ها را در دسترس برنامه قرار دهید.

بنابراین آخرین مقادیر را از کنسول فایربیس دریافت می‌کنیم.

قدم پنجم: همانطور که آخرین مقادیر را از کنسول دریافت کرده‌ایم، قدم بعدی بررسی بروزرسانی اجباری است زیرا دارای اولویت بالایی است. باید نسخه برنامه را با استفاده از متد getAppVersion() از دستگاه دریافت کرده و min_version_of_app واکشی شده از کنسول را بدست آوریم و آن‌ها را با استفاده از checkMandateVersionApplication() مقایسه کنیم.

از آنجا که این برنامه فقط دارای نقطه در نام نسخه است، ما فقط از نقطه "." با استفاده از متد getAppVersionWithoutAlphaNumeric() استفاده می‌کنیم. ما هر دو نسخه اپلیکیشن و last_version_of_app را بررسی می‌کنیم و اگر یکی نبودند pop-up بروزرسانی اختیاری را نشان می‌دهیم و در صورت عبور از این شرط کاربر می‌تواند به جریان عادی برگردد. بهترین کار این است که در SplashActivity آن را انجام دهید زیرا صفحه نمایش راه‌اندازی اولیه است.

منبع

گردآوری و تالیف پوریا شریفی
آفلاین
user-avatar

ابتدا که با برنامه‌نویسی آشنا شدم به سمت php و طراحی وب رفتم، بعد از اون به توسعه‌ی اندروید علاقه‌مند شدم و تقریبا ۲ سال است که مشغول به برنامه‌نویسی اندروید هستم، همچنین عاشق یادگیری چیزهای جدید هستم.

دیدگاه‌ها و پرسش‌ها

برای ارسال نظر لازم است ابتدا وارد سایت شوید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید