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

Android14+.NET8+MAUI中Azure B2C登录卡在BrowserTabActivity求助

解决MAUI+Azure B2C在Android14+.NET8下登录卡在BrowserTabActivity的问题

针对你遇到的场景,以下几个方向可以尝试排查和解决:

1. 调整自定义MsalActivity的配置

你的自定义MsalActivity继承自BrowserTabActivity,当前的启动模式可能不兼容Android14的Intent回调机制,建议修改Activity属性:

using Microsoft.Identity.Client;
using Android.App;
using Android.Content;

namespace Project.Platforms.Android
{
    [Activity(NoHistory = true, 
              LaunchMode = LaunchMode.SingleTask,  // 替换SingleTop为SingleTask
              Exported = true, 
              ExcludeFromRecents = true)]
    [IntentFilter(new[] { Intent.ActionView },
        Categories = new[] { Intent.CategoryBrowsable, Intent.CategoryDefault },
        DataScheme = $"msal<<<clientId>>>",
        DataHost = "auth")]
    public class MsalActivity : BrowserTabActivity
    {
        // 显式传递Intent给MSAL处理,确保回调被正确接收
        protected override void OnNewIntent(Intent intent)
        {
            base.OnNewIntent(intent);
            Microsoft.Identity.Client.Platforms.Android.BrowserTabActivity.OnNewIntent(intent);
        }
    }
}

同时移除Manifest.xml中手动配置的BrowserTabActivity节点(即使用你提供的第二种Manifest配置),避免重复注册导致冲突。

2. 确保MSAL初始化时绑定父Activity

在MAUI的服务初始化代码中,必须明确指定父Activity,否则Android14下无法正确完成回调:

var pca = PublicClientApplicationBuilder.Create("<你的ClientId>")
    .WithB2CAuthority("https://<你的B2C租户>.b2clogin.com/<你的B2C租户>.onmicrosoft.com/<你的SignUpSignInPolicy>")
    .WithRedirectUri($"msal<你的ClientId>://auth")
    .WithParentActivityOrWindow(() => Platform.CurrentActivity) // 关键:绑定当前Activity
    .Build();

3. 更新MSAL包到最新稳定版

.NET8和Android14的兼容性需要最新版MSAL支持,确保你引用的是Microsoft.Identity.Client.Maui而非旧版Microsoft.Identity.Client,并更新到当前最新稳定版本。

4. 补充Android14的包可见性配置

Android14对应用调用外部应用的限制更严格,在Manifest的queries节点中补充浏览器相关配置,确保能正常唤起自定义标签页:

<queries>
  <intent>
    <action android:name="android.support.customtabs.action.CustomTabsService" />
  </intent>
  <!-- 添加常用浏览器包名,确保应用可见性 -->
  <package android:name="com.android.chrome" />
  <package android:name="com.google.android.apps.chrome" />
  <package android:name="org.mozilla.firefox" />
</queries>

5. 抓取隐藏日志排查细节

调试时用ADB命令查看MSAL相关日志,可能找到未在VS调试窗口输出的错误信息:

adb logcat | grep -i "msal\|browser\|intent"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 17:55:06