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

MAUI Android CredentialManager上下文错误:无法启动选择器UI

解决AndroidX.Credentials在.NET MAUI Blazor中调用CreateCredentialAsync的上下文问题

核心问题分析

错误提示明确要求传递基于Activity的上下文,你之前尝试的ApplicationContext、BaseContext都是应用级上下文,不具备启动UI组件的能力,这就是它们无效的原因。API34能正常运行可能是因为系统对上下文的校验逻辑有所放松,但低版本系统严格要求必须传入当前活跃的Activity实例。

可行解决方案

1. 直接使用当前活跃的Activity实例

在MAUI中,Platform.CurrentActivity是当前前台的Activity实例,直接用它作为上下文参数:

var act = Platform.CurrentActivity;
if (act == null)
{
    // 处理Activity为空的情况,比如提示用户回到应用前台
    return;
}
_credentialManager.CreateCredentialAsync(
    act,
    request,
    null,
    ContextCompat.GetMainExecutor(act),
    callback
);

注意:在Blazor组件中调用时,要确保应用处于前台状态,Platform.CurrentActivity才会有有效值。

2. 缓存当前Activity(更可靠的方式)

如果Platform.CurrentActivity偶尔为空(比如应用后台切换时),可以在Android项目的MainActivity中通过生命周期回调缓存实例:

namespace YourAppName.Platforms.Android;

public class MainActivity : MauiAppCompatActivity
{
    public static MainActivity CurrentActivity { get; private set; }

    protected override void OnResume()
    {
        base.OnResume();
        CurrentActivity = this;
    }

    protected override void OnPause()
    {
        base.OnPause();
        if (CurrentActivity == this)
            CurrentActivity = null;
    }
}

调用时直接使用缓存的Activity实例:

var act = MainActivity.CurrentActivity;
if (act != null)
{
    _credentialManager.CreateCredentialAsync(
        act,
        request,
        null,
        ContextCompat.GetMainExecutor(act),
        callback
    );
}

3. 检查依赖与系统配置

  • 确保Android项目中引用的Xamarin.AndroidX.Credentials NuGet包是最新版本,不同版本对低API的兼容可能存在差异。
  • 针对API29+设备,确认AndroidManifest.xml中添加了必要权限:
    <uses-permission android:name="android.permission.INTERNET" />
    
    如果使用了Google凭证提供器,还需添加对应的provider配置:
    <application>
        <provider
            android:name="com.google.android.gms.auth.api.credentials.CredentialsProvider"
            android:authorities="${applicationId}.credentials"
            android:exported="false" />
    </application>
    

额外测试建议

  • 在API33和29的设备/模拟器上,确保系统WebView组件是最新版本,因为凭证选择器UI依赖WebView渲染。
  • 调用前务必校验Activity实例不为空,避免空引用异常。

内容的提问来源于stack exchange,提问作者Kebechet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 14:37:45