Cara membuat dialog update aplikasi secara otomatis

Cara membuat dialog update aplikasi secara otomatis

بِسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيم

Hallo om pengguna Source Code Aliendroid, pasti pernahkan kalian melakukan update versi uplikasi dari versi 1 ke versi yang lebih tinggi. Dan bagaimana cara kalian memberitahukan kepada pengguna jika aplikasi kalian sudah update? penulis sendiri mempunyai beberapa cara seperti menambahkan code Google Cloud Messaging atau onesignal, akan tetapi kadang pengguna aplikasi kita mengabaikan notifikasi yang dikirim atau tertumpuk oleh notifikasi pesan lainnya. Berdasarkan pengalaman ini, ahirnya penulis mulai menggunakan libs play core untuk mendukung dialog update otomatis, terdapat dua metode dialog update yang disediakan yaitu Immediate (tulisan ini) dan Flexible. 

Immediate adalah metode update yang menghentikan semua tindakan dalam aplikasi, jadi pengguna tidak bisa menggunakan aplikasi jika belum beres proses download update. Sedangkan Flexible adalah metode update tanpa mengganggu penggunaan aplikasi, proses update akan berjalan di belakang sistem.

Dengan libs ini, pengguna aplikasi kita akan terus mendapatkan notifikasi berupa dialog update jika apliaksi kita belum melakukan update. Tetapi dengan terus memunculkan dialog update, pengguna aplikasi kita akan sedikit tergganggu, karena itu dalam latihan kali ini penulis membuat metode immadiate dengan menambahkan tombol untuk melakukan update. Untuk memulai silahkan tambah Libs Play Core di build.gradle : module.

build.gradle : module

plugins {
id 'com.android.application'
}

android {
compileSdkVersion 30
buildToolsVersion "30.0.2"

defaultConfig {
applicationId "com.aliendroid.latihanupdateapp"
minSdkVersion 21
targetSdkVersion 30
versionCode 1
versionName "1.0"

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}

dependencies {

implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.2.1'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
testImplementation 'junit:junit:4.13.1'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
implementation 'com.google.android.play:core:1.8.3'
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/laymain"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">


<Button
android:id="@+id/tb_update"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Check Update" />

</RelativeLayout>

MainActivity.java

package com.aliendroid.latihanupdateapp;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.content.IntentSender;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import com.google.android.material.snackbar.Snackbar;
import com.google.android.play.core.appupdate.AppUpdateInfo;
import com.google.android.play.core.appupdate.AppUpdateManager;
import com.google.android.play.core.appupdate.AppUpdateManagerFactory;
import com.google.android.play.core.install.InstallStateUpdatedListener;
import com.google.android.play.core.install.model.AppUpdateType;
import com.google.android.play.core.install.model.InstallStatus;
import com.google.android.play.core.install.model.UpdateAvailability;

public class MainActivity extends AppCompatActivity {
private static final int MY_REQUEST_CODE = 999 ;
AppUpdateManager appUpdateManager;
com.google.android.play.core.tasks.Task appUpdateInfoTask;
InstallStateUpdatedListener listener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

/*
cekversi(); adalah void pelanggilan cek versi update, anda bisa meletaknnya dimanapun,
bisa saat aplikasi dibuka atau disaat tombol ditekan
Contoh saat aplikasi di buka :
setContentView(R.layout.activity_main);
cekversi();
*/

Button tb_update = findViewById(R.id.tb_update);
tb_update.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

/*
contoh saat menekan tombol update
*/
cekversi();

}
});

}
private void cekversi(){
appUpdateManager = AppUpdateManagerFactory.create(MainActivity.this);
appUpdateInfoTask = appUpdateManager.getAppUpdateInfo();
appUpdateInfoTask.addOnSuccessListener(appUpdateInfo -> {
if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
&& appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)) {

try {
listener = state -> {
if (state.installStatus() == InstallStatus.DOWNLOADED) {
popupSnackbarForCompleteUpdate();
}

if (state.installStatus() == InstallStatus.INSTALLED){
appUpdateManager.unregisterListener(listener);
}
};

appUpdateManager.registerListener(listener);
appUpdateManager.startUpdateFlowForResult(
appUpdateInfo, AppUpdateType.IMMEDIATE,
this,
MY_REQUEST_CODE);
} catch (IntentSender.SendIntentException e) {
e.printStackTrace();
}
}
});
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

if (requestCode == MY_REQUEST_CODE) {
if (resultCode != RESULT_OK) {
}
}
super.onActivityResult(requestCode, resultCode, data);
}

private void popupSnackbarForCompleteUpdate() {
Snackbar snackbar =
Snackbar.make(
findViewById(R.id.laymain),
"An update has just been downloaded.",
Snackbar.LENGTH_INDEFINITE);
snackbar.setAction("RESTART", view -> appUpdateManager.completeUpdate());
snackbar.setActionTextColor(
getResources().getColor(R.color.black));
snackbar.show();
}

}

Pada tahap ini pembuatan metode update telah selesai, untuk melakukan ujicoba anda wajib upload uplikasi ke produksi beta di playstore dengan versi 2 (contoh) dan install juga di smartphone anda dengan versi 1 (contoh). Jika aplikasi sudah di upload dengan versi 2 di playstore, dan anda membuka aplikasi dengan versi 1 maka secara otomatis anda akan mendapatkan dialog update. Selamat mencoba.