You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 20:50:29