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
相关产品推荐
相关产品推荐

