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

Xamarin.Android中WebAuthenticator Activity实例化异常求助

Xamarin.Android中WebAuthenticator对接巴西政府服务时抛出Activity实例化异常

在Xamarin.Android中使用WebAuthenticator对接巴西政府外部服务登录时,每次都会抛出Java.Lang.RuntimeException: 'Unable to instantiate activity ComponentInfo异常,iOS端运行正常。

实现的WebAuthenticatorCallbackActivity类

using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TesouroDiretoMobile.Configuration.Droid
{
    [Activity(NoHistory = true, LaunchMode = LaunchMode.SingleTop, Exported = true, Name = "br.gov.fazenda.tesouro.td.CallBackActivity", Label = "TesouroDireto")]
    [IntentFilter(new[] { Android.Content.Intent.ActionView },
        Categories = new[] { Android.Content.Intent.CategoryDefault, Android.Content.Intent.CategoryBrowsable },
        DataScheme = "tesourodireto://retornologinunico")]
    public class AutenticadorGovBr : Xamarin.Essentials.WebAuthenticatorCallbackActivity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
        }
    }
}

Android清单文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="auto" package="br.gov.fazenda.tesouro.td" android:versionName="2.3.13" android:versionCode="10826">
    <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="false" android:xlargeScreens="false" android:largestWidthLimitDp="840" />
    <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="30" />
    <uses-permission android:name="android.permission.USE_FINGERPRINT" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <application android:label="Tesouro Direto" android:theme="@style/MyTheme" android:icon="@drawable/icon" android:largeHeap="true" android:allowBackup="true">
        <!-- largeHeap utilizado devido a problemas encontrados no uso do plugin fingerprint -->
        <meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/icon" />
        <meta-data android:name="com.google.firebase.messaging.default_notification_color" android:resource="@color/primary" />
        <receiver android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver" android:exported="false" />
        <receiver android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND">
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />
                <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
                <category android:name="${applicationId}" />
            </intent-filter>
        </receiver>
        <activity android:name="br.gov.fazenda.tesouro.td.CallBackActivity">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="tesourodireto" android:host="retornologinunico" />
            </intent-filter>
        </activity>
    </application>
</manifest>

认证器调用代码

var uriBuilder = new StringBuilder(AppSettings.SegurancaBaseAddress);

uriBuilder.Append("/authorize");
uriBuilder.Append($"?response_type={AppSettings.ResponseType}");
uriBuilder.Append($"&client_id={Criptografia.Descriptografar(AppSettings.ClientId)}");
uriBuilder.Append($"&scope={AppSettings.Scope}");
uriBuilder.Append($"&redirect_uri={HttpUtility.UrlEncode(AppSettings.RedirectUri,Encoding.UTF8)}");
uriBuilder.Append($"&nonce={Guid.NewGuid()}");
uriBuilder.Append($"&state={Guid.NewGuid()}");

var authResult = await Xamarin.Essentials.WebAuthenticator.AuthenticateAsync(
    new Uri(uriBuilder.ToString()),
    new Uri(AppSettings.RedirectUri));

var accessToken = authResult?.Properties["code"];

await IniciarSessaoGovBr(accessToken, string.Empty);

已尝试更新相关NuGet包、修改Activity名称、在其他分支重建项目等方案,但问题仍未解决。

内容的提问来源于stack exchange,提问作者Alexandre Tavares da Silva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:15:26