Como implementar atualisação automatica google play api versão 2022 no flutter com kotlin sem precisar de biblioteca
Olá se deve ter vindo até este artigo ou voce esta em um projeto onde voce precisa implementar a atualisação automatica ou talvez voce ja tenha tentado por diversas vezes e acabou chegando aqui de tanto procurar por um guia descente pois bem espero que encontre aqui vamos ao inicio antes de tudo certifique de atualisar a versão do flutter do seu aplicativo e tambem o dart o kotlin atualise tudo que possivel a IDE o ajudará depois de se certificar de estar tudo atualizado.
No final da implementação do codigo pode ser que ainda assim não funcione vou te ensinar um macete que garante 90 % chance de funcionar sua atualisação automatica no aparelho nas configurações do celular ao qual o aplicativo esta instalado va em configurações aplicativos procure pelo aplicativo google play clique nele vá em armazenamento e limpe os dados e o cache do aplicativo google play se possivel vou ele para versão de fabrica e abra novamente o seu aplicativo provavelmente se houver atualisação disponivel aparecerá o label
Primeiro passo entre na url
https://developer.android.com/guide/playcore/in-app-updates/kotlin-java?hl=pt-br
voce encontra um vasto material porem este guia não irei me atentar a explicação de todos as opções que a api do google nos tras mas sim para a pratica desta implemntação entrando na url va até a onde tem um codigo parecido com este e tem como titulo
val appUpdateManager = AppUpdateManagerFactory.create(context)
// Returns an intent object that you use to check for an update.
val appUpdateInfoTask = appUpdateManager.appUpdateInfo
// Checks that the platform will allow the specified type of update.
appUpdateInfoTask.addOnSuccessListener { appUpdateInfo ->
if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
// This example applies an immediate update. To apply a flexible update
// instead, pass in AppUpdateType.FLEXIBLE
&& appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)
) {
// Request the update.
}
}
este codigo verifica se há um atualização e no centro do if e voce coloca este codigo a api de atualisação
No centro do if voce colocara este codigo que implementa atualisação
appUpdateManager.startUpdateFlowForResult(
// Pass the intent that is returned by 'getAppUpdateInfo()'.
appUpdateInfo,
// Or 'AppUpdateType.FLEXIBLE' for flexible updates.
AppUpdateType.IMMEDIATE,
// The current activity making the update request.
this,
// Include a request code to later monitor this update request.
MY_REQUEST_CODE)
Este e o meu codigo com algumas mudanças use o meu codigo pronto logo abaixo no seu aplicativo coloque ele no main activy ou coloque ele em um metodo
val appUpdateManager = AppUpdateManagerFactory.create(context)
val appUpdateInfoTask = appUpdateManager.appUpdateInfo
appUpdateInfoTask.addOnSuccessListener { appUpdateInfo ->
if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
&& appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)
) {
update = true;
appUpdateManager.startUpdateFlowForResult(
appUpdateInfo,
AppUpdateType.IMMEDIATE,
this,
5
)
}
Um outra forma de implmentar e via Platafform Channel codigo logo abaixo um simples metodo updat()
var request = 5;
fun updat(): Task<AppUpdateInfo> {
val appUpdateManager = AppUpdateManagerFactory.create(context)
val appUpdateInfoTask = appUpdateManager.appUpdateInfo
return appUpdateInfoTask.addOnSuccessListener { appUpdateInfo ->
if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
&& appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)
) {
update = true;
appUpdateManager.startUpdateFlowForResult(
appUpdateInfo,
AppUpdateType.IMMEDIATE,
this,
5
)
}else {
appUpdateInfoTask.addOnSuccessListener { appUpdateInfo ->
if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)
) {
update = true;
appUpdateManager.startUpdateFlowForResult(
appUpdateInfo,
AppUpdateType.FLEXIBLE,
this,
5
)
}
}
}
}
}
E por ultimo o plataform channel do kotlin
private val CHANNEL = "com.example.br"
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler {
call, result ->
if (call.method == "update") {
try{
updat();
result.success(update)
} catch (e: Throwable) {
//print(e);
result.success(e)
}
}
A chamada aqui é update que sera colocado no metodo do dart abaixo
Agora o platafform channel do dart
static plataformChanell(String chamada) async {
try {
final result = await platform.invokeMethod(chamada);
return result;
} on PlatformException catch (e) {
return e;
}
}
String chamada = "update";
plataformChanell ( chamada );
static const platform = const MethodChannel("com.example.br");
para chamar o metodo use