Google 提供了一种实现应用内更新的新方法:https://developer.android.com/guide/app-bundle/in-app-updates,可用于强制用户使用最新版本更新其应用程序可用版本。
为了能够使用此新功能,需要使用 Play Core Library 1.5.0 或更高版本:https://developer.android.com/guide/app-bundle/playcore
可以从 Xamarin 使用它并使用此新功能实现应用内更新吗?
问候
更新:检查https://github.com/PatGet/XamarinPlayCoreUpdater
我能够为 Play 核心库提供 Xamarin 绑定,可以在我的驱动器上找到它
很快就会将其打包到 NuGet,一旦完成就会在这里更新
这个答案是针对 Xamarin Android 的新开发人员的,因为我正在寻找解决方案,但找不到任何地方,因此根据 Android 论坛上建议的 java 实现为 C# 实现了它。这是我的示例 - 从 nuget 管理器安装 Google play 核心库 Xamarin.GooglePlayServices.Base。并将命名空间添加到 MainActivity.cs 或任何要检查更新的活动中:
using Com.Google.Android.Play.Core.Appupdate;
using Com.Google.Android.Play.Core.Tasks;
using Com.Google.Android.Play.Core.Install.Model;
在您的活动中为 IAppUpdateManager 创建一个变量,并在该活动上实现 IOnSuccessListener,该活动具有 OnSuccess 方法,如下所示:
public void OnSuccess(Java.Lang.Object p0)
{
if ((p0 as AppUpdateInfo).UpdateAvailability() == UpdateAvailability.UpdateAvailable && (p0 as AppUpdateInfo).IsUpdateTypeAllowed(AppUpdateType.Immediate))
{
appUpdateManager.StartUpdateFlowForResult(p0 as AppUpdateInfo, this, AppUpdateOptions.NewBuilder(AppUpdateType.Immediate).Build(), TaskId);
}
}
如果您有要求,您可以将 AppUpdateType 更改为 FLEXIBLE 而不是 Immediate。并按照您希望在活动中的任何位置检查更新。
appUpdateManager = AppUpdateManagerFactory.Create(this);
// Returns an intent object that you use to check for an update.
var appUpdateInfoTask = appUpdateManager.AppUpdateInfo;
if (appUpdateInfoTask != null)
{
//Register the listener and you can check for the response of this listener at OnSuccess method implemented.
appUpdateInfoTask.AddOnSuccessListener(this);
}
库中有更多可用选项,您可以在此处查看并根据需要实施。请记住它是 Java 或 Kotlin,但上面的示例将有助于 C# 实现:https://developer.android.com/guide/playcore/in-app-updates/kotlin-java#java
对于 MAUI,现在一切都在一行中实现:
<PackageReference Include="Oscore.Maui.Android.InAppUpdates" Version="0.9.1" />
MauiProgram.cs
CreateMauiApp
方法中:builder
.UseMauiApp<App>()
.UseAndroidInAppUpdates()
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
});