Xamarin.forms Xamarin Android,应用程序在选择帐户(ADAL/broker)后崩溃

Xamarin.forms Xamarin Android,应用程序在选择帐户(ADAL/broker)后崩溃,xamarin.forms,xamarin.android,adal,Xamarin.forms,Xamarin.android,Adal,我已经使用ADAL库对Xamarin Android应用程序中的用户进行了一段时间的身份验证,这一切都很好。但是在Azure中为后端API启用条件访问之后,我必须使用代理来实现这一点。我遵循了adalwiki()上的所有说明,但仍然没有得到工作情况 沙马林型 ADAL版本:5.2.4 下面是我用来验证用户身份的代码: public async Task<AuthenticationResult> Authenticate(string authority, string resour

我已经使用ADAL库对Xamarin Android应用程序中的用户进行了一段时间的身份验证,这一切都很好。但是在Azure中为后端API启用条件访问之后,我必须使用代理来实现这一点。我遵循了adalwiki()上的所有说明,但仍然没有得到工作情况

沙马林型 ADAL版本:5.2.4

下面是我用来验证用户身份的代码:

public async Task<AuthenticationResult> Authenticate(string authority, string resource, string clientId, string returnUri)
{
    var context = new AuthenticationContext(authority);
    var param = new PlatformParameters(CrossCurrentActivity.Current.Activity, true, PromptBehavior.SelectAccount);

    if (context.TokenCache.ReadItems().Count() > 0)
        context = new AuthenticationContext(context.TokenCache.ReadItems().First().Authority);

    try
    {
        authResult = await context.AcquireTokenAsync(resource, clientId, new Uri(returnUri), param, userId).ConfigureAwait(false);
        return authResult;
    }
    catch
    {
        return null;
    }
}
启动应用程序后,它首先提示输入GetAccounts权限(如预期的那样)。授予权限后,它将显示显示我的帐户的帐户选择器。假设它是从代理那里获得帐户,我认为所有必要的代码都必须正确实现

我可以在调试控制台中看到以下错误:

[MonoDroid] UNHANDLED EXCEPTION:
[MonoDroid] System.NullReferenceException: Object reference not set to an instance of an object
[MonoDroid] at Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationAgentContinuationHelper.SetAuthenticationAgentContinuationEventArgs (System.Int32 requestCode, Android.App.Result resultCode, Android.Content.Intent data) [0x0001c] in <41e5a54c101e43dca8a2f462dab041fa>:0
[MonoDroid] at ADALTest.Droid.MainActivity.OnActivityResult (System.Int32 requestCode, Android.App.Result resultCode, Android.Content.Intent data) [0x00009] in :0
[MonoDroid] at Android.App.Activity.n_OnActivityResult_IILandroid_content_Intent_ (System.IntPtr jnienv, System.IntPtr native__this, System.Int32 requestCode, System.Int32 native_resultCode, System.IntPtr native_data) [0x00014] in :0
[MonoDroid] at (wrapper dynamic-method) Android.Runtime.DynamicMethodNameCounter.6(intptr,intptr,int,int,intptr)
[DALTes] JNI RegisterNativeMethods: attempt to register 0 native methods for android.runtime.JavaProxyThrowable
[AndroidRuntime] Shutting down VM
[AndroidRuntime] FATAL EXCEPTION: main
[AndroidRuntime] Process: <my_packageid>, PID: 23545
[AndroidRuntime] android.runtime.JavaProxyThrowable: System.NullReferenceException: Object reference not set to an instance of an object
[AndroidRuntime] at Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationAgentContinuationHelper.SetAuthenticationAgentContinuationEventArgs (System.Int32 requestCode, Android.App.Result resultCode, Android.Content.Intent data) [0x0001c] in <41e5a54c101e43dca8a2f462dab041fa>:0
[AndroidRuntime] at ADALTest.Droid.MainActivity.OnActivityResult (System.Int32 requestCode, Android.App.Result resultCode, Android.Content.Intent data) [0x00009] in :0
[AndroidRuntime] at Android.App.Activity.n_OnActivityResult_IILandroid_content_Intent_ (System.IntPtr jnienv, System.IntPtr native__this, System.Int32 requestCode, System.Int32 native_resultCode, System.IntPtr native_data) [0x00014] in :0
[AndroidRuntime] at (wrapper dynamic-method) Android.Runtime.DynamicMethodNameCounter.6(intptr,intptr,int,int,intptr)
[AndroidRuntime] at md5b4882cfeb0ca027f9661a63d1a4e24bc.MainActivity.n_onActivityResult(Native Method)
[AndroidRuntime] at md5b4882cfeb0ca027f9661a63d1a4e24bc.MainActivity.onActivityResult(MainActivity.java:65)
[AndroidRuntime] at android.app.Activity.dispatchActivityResult(Activity.java:7762)
[AndroidRuntime] at android.app.ActivityThread.deliverResults(ActivityThread.java:4603)
[AndroidRuntime] at android.app.ActivityThread.handleSendResult(ActivityThread.java:4652)
[AndroidRuntime] at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:49)
[AndroidRuntime] at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
[AndroidRuntime] at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
[AndroidRuntime] at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1948)
[AndroidRuntime] at android.os.Handler.dispatchMessage(Handler.java:106)
[AndroidRuntime] at android.os.Looper.loop(Looper.java:214)
[AndroidRuntime] at android.app.ActivityThread.main(ActivityThread.java:7050)
[AndroidRuntime] at java.lang.reflect.Method.invoke(Native Method)
[AndroidRuntime] at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
[AndroidRuntime] at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
[MonoDroid]未处理的异常:
[MonoDroid]System.NullReferenceException:对象引用未设置为对象的实例
[MonoDroid]位于Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationAgentContinuationHelper.SetAuthenticationAgentContinuationEventArgs(System.Int32 requestCode、Android.App.Result resultCode、Android.Content.Intent data)[0x0001c]中:0
[MonoDroid]位于ADALTest.Droid.MainActivity.OnActivityResult(System.Int32 requestCode、Android.App.Result resultCode、Android.Content.Intent data)[0x00009]中:0
[MonoDroid]位于Android.App.Activity.n_OnActivityResult_IILandroid_content_Intent_(System.IntPtr jnienv,System.IntPtr native_this,System.Int32 requestCode,System.Int32 native_resultCode,System.IntPtr native_data)[0x00014]in:0
[MonoDroid]at(包装器动态方法)Android.Runtime.DynamicMethodNameCounter.6(intptr,intptr,int,int,intptr)
[DALTes]JNI RegisterNativeMethods:尝试为android.runtime.JavaProxyThrowable注册0个本机方法
[AndroidRuntime]正在关闭VM
[AndroidRuntime]致命异常:主
[AndroidRuntime]进程:,PID:23545
[AndroidRuntime]android.runtime.JavaProxyThrowable:System.NullReferenceException:对象引用未设置为对象的实例
[AndroidRuntime]位于Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationAgentContinuationHelper.SetAuthenticationAgentContinuationEventArgs(System.Int32 requestCode、Android.App.Result resultCode、Android.Content.Intent data)[0x0001c]中:0
[AndroidRuntime]位于ADALTest.Droid.MainActivity.OnActivityResult(System.Int32 requestCode、Android.App.Result resultCode、Android.Content.Intent数据)[0x00009]中:0
[AndroidRuntime]在Android.App.Activity.n_OnActivityResult_IILandroid_content_Intent_(System.IntPtr jnienv,System.IntPtr native_此,System.Int32请求代码,System.Int32 native_结果代码,System.IntPtr native_数据)[0x00014]输入:0
[AndroidRuntime]at(包装器动态方法)Android.Runtime.DynamicMethodNameCounter.6(intptr,intptr,int,int,intptr)
[AndroidRuntime]位于md5b4882cfeb0ca027f9661a63d1a4e24bc.MainActivity.n_onActivityResult(本机方法)
[AndroidRuntime]位于md5b4882cfeb0ca027f9661a63d1a4e24bc.MainActivity.onActivityResult(MainActivity.java:65)
[AndroidRuntime]位于android.app.Activity.dispatchActivityResult(Activity.java:7762)
[AndroidRuntime]位于android.app.ActivityThread.deliverResults(ActivityThread.java:4603)
[AndroidRuntime]位于android.app.ActivityThread.handleSendResult(ActivityThread.java:4652)
[AndroidRuntime]位于android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:49)
[AndroidRuntime]位于android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
[AndroidRuntime]位于android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
[AndroidRuntime]位于android.app.ActivityThread$H.handleMessage(ActivityThread.java:1948)
[AndroidRuntime]位于android.os.Handler.dispatchMessage(Handler.java:106)
[AndroidRuntime]位于android.os.Looper.loop(Looper.java:214)
[AndroidRuntime]位于android.app.ActivityThread.main(ActivityThread.java:7050)
[AndroidRuntime]位于java.lang.reflect.Method.invoke(本机方法)
[AndroidRuntime]位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
[AndroidRuntime]位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)

非常感谢您的帮助。

您需要将try[}catch{}添加到OnActivityResult并检查witch param是否为null。因为从您的日志中我看到

System.NullReferenceException: Object reference not set to an instance of an object [AndroidRuntime] at Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationAgentContinuationHelper.SetAuthenticationAgentContinuationEventArgs (System.Int32 requestCode, Android.App.Result resultCode, Android.Content.Intent data)
显然这是一个错误


也许这会有所帮助

感谢您的回复,但不幸的是,添加try/catch块时没有任何区别。选择帐户后,应用程序会被终止。有更新吗?您现在解决了问题吗?
System.NullReferenceException: Object reference not set to an instance of an object [AndroidRuntime] at Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationAgentContinuationHelper.SetAuthenticationAgentContinuationEventArgs (System.Int32 requestCode, Android.App.Result resultCode, Android.Content.Intent data)