升级In-App Billing Plugin 6.7.0后Android端PurchaseAsync空引用异常求助
解决Android端PurchaseAsync的NullReferenceException问题
步骤1:在Activity1中配置MAUI Essentials的Activity生命周期回调
新版插件依赖MAUI Essentials获取当前Activity实例,你需要在Activity1.cs中重写生命周期方法,维护Platform.CurrentActivity的引用,替换原有注释掉的Xamarin.Essentials初始化逻辑:
using Microsoft.Maui.Essentials; using Android.OS; using Android.Runtime; using AndroidX.AppCompat.App; namespace YourAppNamespace.Droid; // 替换为你的项目实际命名空间 [Activity(Label = "@string/app_name", MainLauncher = true, Theme = "@style/AppTheme")] public class Activity1 : MauiAppCompatActivity { protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); // 初始化MAUI Essentials平台 Platform.Init(this, savedInstanceState); } protected override void OnResume() { base.OnResume(); // 恢复时设置当前Activity Platform.CurrentActivity = this; } protected override void OnPause() { base.OnPause(); // 暂停时清理引用,避免内存泄漏 if (Platform.CurrentActivity == this) { Platform.CurrentActivity = null; } } protected override void OnDestroy() { base.OnDestroy(); // 销毁时彻底清理引用 if (Platform.CurrentActivity == this) { Platform.CurrentActivity = null; } } // 处理权限请求回调,MAUI Essentials需要此方法 public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults) { Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults); base.OnRequestPermissionsResult(requestCode, permissions, grantResults); } }
步骤2:确保插件初始化时传入正确上下文
在调用PurchaseAsync前,确认插件已通过MAUI Essentials获取到当前Activity:
var billing = CrossInAppBilling.Current; if (!billing.IsConnected) { // 传入Platform.CurrentActivity作为Android上下文 await billing.ConnectAsync(Platform.CurrentActivity); } // 执行购买操作 var purchase = await billing.PurchaseAsync(productId, ItemType.InAppPurchase);
关键说明
- 新版In-App Billing Plugin不再依赖Xamarin.Essentials,而是通过
Microsoft.Maui.Essentials.Platform.CurrentActivity获取Android上下文,因此必须在Activity生命周期中维护这个引用。 - 确保你的Activity继承自
MauiAppCompatActivity,而非旧版的AppCompatActivity,以保证MAUI Essentials的兼容性。
内容的提问来源于stack exchange,提问作者John_Kub
相关产品推荐
相关产品推荐

