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

Xamarin.Forms中Azure Mobile Apps认证无法跳转回Android应用问题

解决Xamarin.Forms + Azure Mobile Apps服务器流认证失败问题

嘿,我帮你梳理下这个认证卡住的问题,分Android和UWP两个场景给你针对性的解决方案:


先看Android端的问题

你现在遇到的是登录后停留在浏览器、无法跳转回应用的情况,大概率是回调URL的配置或者代码调用的细节出了问题,按下面的步骤排查:

  1. 修正LoginAsync的调用参数
    你当前调用LoginAsync时只传了scheme,但SDK需要的是完整的回调URL。把代码改成这样:

    await client.LoginAsync(_context, MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory, new Uri("lookatmetestingthisurischeme://easyauth.callback"));
    

    或者直接传字符串形式的完整URL也行,之前只传scheme会导致SDK生成的回调地址不完整,没法触发Android的Intent跳转。

  2. 再核对Manifest的Activity配置
    你的Manifest配置看起来没问题,但要确认两点:

    • 包名com.companyname.MyApp和你Android项目的实际包名完全一致,包名不匹配会让Intent过滤失效。
    • 你已经正确安装了Microsoft.Azure.Mobile.Client NuGet包,确保RedirectUrlActivity这个类存在(是SDK自带的,不用自己写)。
  3. 检查Azure门户的回调URL
    一定要保证Azure Mobile Apps认证设置里的回调URL和你代码里用的完全一样——lookatmetestingthisurischeme://easyauth.callback,哪怕多一个空格或者拼写错一个字母,Azure都会拒绝回调,导致停在浏览器。

  4. 换系统浏览器测试
    有些第三方浏览器对自定义scheme支持不好,先用Chrome或者系统自带浏览器试试,排除浏览器兼容性问题。


再解决UWP端的跳转问题

UWP的服务器流认证需要配置协议激活,才能让系统在登录完成后唤起你的应用,步骤如下:

  1. 配置Package.appxmanifest的协议声明
    打开UWP项目的Package.appxmanifest:

    • 切换到「声明」选项卡,在下拉框选「协议」,点击「添加」。
    • 「名称」填你的自定义scheme:lookatmetestingthisurischeme,「显示名称」随便填个友好的名字就行。
    • 确保「可执行文件」和「入口点」默认选中你的应用主入口。
  2. 在Azure门户添加UWP的回调URL
    和Android一样,在Mobile Apps认证设置里添加lookatmetestingthisurischeme://easyauth.callback这个回调地址。

  3. 修改UWP的登录代码
    调用LoginAsync时指定完整的回调URL:

    await client.LoginAsync(MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory, new Uri("lookatmetestingthisurischeme://easyauth.callback"));
    
  4. 处理协议激活事件(关键步骤!)
    打开App.xaml.cs,重写OnActivated方法,把回调的授权码传递给SDK:

    // 先把你的MobileServiceClient实例改成App类的静态成员,方便这里访问
    public static MobileServiceClient Client { get; private set; }
    
    protected override void OnActivated(IActivatedEventArgs args)
    {
        if (args is ProtocolActivatedEventArgs protocolArgs)
        {
            var rootFrame = Window.Current.Content as Frame;
            if (rootFrame == null)
            {
                rootFrame = new Frame();
                Window.Current.Content = rootFrame;
            }
            // 让SDK处理回调的授权码
            MobileServiceClientExtensions.ResumeWithURL(Client, protocolArgs.Uri);
            Window.Current.Activate();
        }
    }
    

    记得在App的构造函数里初始化Client实例,这样OnActivated里才能访问到它。

  5. 测试跳转
    完成这些配置后,登录成功后系统会通过你设置的协议自动唤起应用,SDK会处理剩下的认证流程。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:24:17