Ali Shobeyri
Ali Shobeyri
خواندن ۴ دقیقه·۴ سال پیش

پیاده سازی in-app-update

خیلی از اپلیکیشن ها رو دیدید که وقتی نسخه تون آپدیت نیست بهتون پیشنهاد آپدیت میده، ولی این کار رو می‌تونیم بدون کمک back-end هم انجام بدیم. گوگل پلی یک ویژگی داره برای این کار که باهاش می‌تونیم آپدیت نبودن اپلیکیشن رو بررسی کنیم و به کاربر بر اساس شرایطی پیشنهاد آپدیت بدیم که بهش in app update می‌گیم.

javahttps://giphy.com/embed/2x0tJVAL3IqFnZYhYt


نکته : این ویژگی نیازمند اینه که ورژن اندروید 5 استفاده بشه

ما این کار رو به وسیله ابزاری به اسم AppUpdateManager انجام می‌دیم ، شما می‌تونید به این ابزار یک Listener وصل کنید و چک کنید که آیا آپدیت جدیدی در دسترس هست یا نه :

https://gist.github.com/sasssass/d86e5699d6cd01e6232738afa4c07a49

مثلا در کد بالا ما یک Listener از نوع Success گذاشتیم (می‌تونید از نوع Failed هم بذارید که اسمش addOnFailureListener هست) و میایم چک می‌کنیم که updateAvailability ما برابر با UpdateAvailability.UPDATE_AVAILABLE هست یا نه ، سه مقدار دیگه به جز این مقدار وجود داره که می‌تونید از خودِ اون کلاس ببینید ، مثلا UPDATE_NOT_AVAILABLE که نشون میده آپدیتی نیست) ، شرط دومی که من چک کردم updatePriority هست ، 6 مقدار از صفر تا پنج برای این شرط وجود داره ، شما بعدا از آپدیت های جدید رو با استفاده از یک api تغییر بدید ، متن زیر چیزی هست که به api باید پاس بدید ، این پست رو بخونید :

یک شرط جالب دیگه clientVersionStalenessDays هست ، در واقع با این شرط بررسی میشه که چند روز از آپدیت گذشته ، اگه این مقدار null بود به صورت پیشفرض -1 رو براش در نظر گرفتم (یعنی الان من گفتم نگاه کن ببین اگه آپدیت رو اولیت 4 به بالا بود و 3 روز ازش گذشته بود بعد پیغام آپدیت رو نشون بده) ، شرط دیگه ای هم داریم .

قبل از اینکه ادامه کار رو بگم باید عنوان کنم که دو نوع آپدیت وجود داره، یکی flexible و یکی immediate ، اگه شما به صورت flexible آپدیت کنید می‌تونید حین کار با اپ مراحل آپدیت رو انجام بدید ولی در نوع immediate نمی‌تونید این کار رو بکنید، وقتی به صورت flexible درخواست آپدیت می‌دید یک دیالوگ برای شما باز میشه ولی تو نوع immediate این دیالوگ تمام صفحه خواهد بود (اینکه چطوری باید بگیم آپدیت بعدی ما immediate هست یا نیست رو هم هیچ جا ننوشته چطوریه :) تو خودِ داک گوگل هم نیست ، تو استک اور فلو و ... رو هم شخم زدم و نبود، اگه پیدا کردید بهم بگید ولی عموما نوشتن که نمیشه فورس کرد که آپدیتی که دادید حتما flexible یا immediate باشه، چیزی که فهمیدم اینه که فقط برای این مهمه که نوعِ آپدیت کردنتون دست خودتون باشه و به صورت کلی به نظر چیز چرتی میاد)
چپی ها نوع flexible هست که اجازه استفاده از اپ رو دارید در حین آپدیت و راستی ها immediate که نمی‌ذاره از اپ استفاده کنید
چپی ها نوع flexible هست که اجازه استفاده از اپ رو دارید در حین آپدیت و راستی ها immediate که نمی‌ذاره از اپ استفاده کنید


در ادامه فرایند شما می‌تونید یک نوع دیگه از Listener رو هم داشته باشید، یک Listener مخصوص که نشون بده چقدر از وضعیت آپدیت شما جلو رفته :

https://gist.github.com/sasssass/2509f253dcb58973517e3dd137e26e94

همون طور که می‌بینید اگه وضعیت Downloaded باشه می‌تونیم یه دیالوگی چیزی به طرف نشون بدیم و وقتی هم که داره Downloading میشه می‌تونیم یک لودینگ به کاربر نشون بدیم ، نکته اینه که کار هنوز تموم نشده ، الان صرفا آپدیت تموم شد، حالا می‌تونیم با همون AppUpdateManager که داشتیم کار رو تموم کنیم :

appUpdateManager?.completeUpdate()

وقتی این متد رو صدا بزنید اکتیویتی ای که درونش هستید ریست میشه (در واقع صدا زده میشه دوباره) و اپ شما آپدیت شده !

در قسمت آخر مشکلی که کد بالا داره اینه که الان فقط ما داریم پروسه رو Listen می‌کنیم و جایی آپدیت رو صدا نکردیم ، در قسمت کامنتی که در کد اول گذاشتم نوشتم "پیشنهاد آپدیت" ، شما با این کد می‌تونید درخواست آپدیت رو بدید و بعدش با کد قسمت دوم Listen کنید :

appUpdateManager?.startUpdateFlowForResult(appUpdateInfo,AppUpdateType.FLEXIBLE,activity,UPDATE_REQUEST_CODE)

متغیر appUpdateInfo رو که در بالا داشتیم ، ورودی دوم میگیم به حالت Flexible آپدیت رو انجام بده، تو ورودی سوم اکتیویتی حالِ حاضر رو پاس میدیم و تو ورودی چهارم یک ریکوئست کد پاس میدیم، این ریکوئست کد به این درد میخوره که ما بعدا می‌تونیم از onActivityResult ببینیم آیا ریکوئست موفق رفته یا نه ، اگه نبود میتونید دوباره درخواست آپدیت بدید :

حالا چطوری تستش کنیم؟ حتما بریم یه ورژن تو گوگل پلی بذاریم؟ نه ! پنلی وجود داره (Internal app sharing) که می‌تونید اپ رو برای tester ها اضافه کنید ، شما می‌تونید به جای آپلود روی گوگل پلی روی اون آپلود کنید و مراحل رو تست کنید :

https://support.google.com/googleplay/android-developer/answer/9844679

آدرس کانال تلگرامی ما : لینک

من رو در لینکدین ، اینستاگرام و یوتیوب دنبال کنید !!!

اگه دوست داشتید می‌تونید به صفحه Spotify و SoundCloud بنده هم برید و موسیقی های منو گوش بدید !!!

androidjavakotlinprogrammingبرنامه نویسی
برنامه نویس اندروید - https://www.linkedin.com/in/iryebohs/
شاید از این پست‌ها خوشتان بیاید