在我的Xamarin.Forms解决方案的Android项目的MainActivity.cs中出现以下错误:
CurrentPlatform is inacessbile due to its protection level
从OnCreate()内部的以下代码行开始,只有CurrentPlaftorm部分带下划线:
Microsoft.WindowsAzure.MobileServices.CurrentPlatform.Init();
直到我从V6.0将MonoAndroid升级到v7.0并完成JDK 1.8之类的所有必要更新之前,我才收到此错误。 想知道是否有人可以解释这个错误的含义以及为什么专门为CurrentPlatform调用它。
我尝试在新项目中重新创建此错误,但是一旦我输入Microsoft.WindowsAzure.MobileServices.
,它就可以使用CurrentPlatform选项而没有任何问题。
现在,使用调用WindowsAzure组件中的LoginAsync()的MobileServiceClient
类型的行会在以下参数上引发两个错误:
await client.LoginAsync(context, "facebook");
但我现在收到以下两个错误:
Argument 1: cannot convert from 'Android.Content.Context' to 'Microsoft.WindowsAzure.MobileServices.MobileServiceAuthenticationProvider'
Argument 2: cannot convert from 'string' to 'Newtonsoft.Json.Linq.JObject'
当我更改Android Target SDK时,不确定为什么这两个代码区域会破坏,因为它们只是Microsoft.WindowsAzure组件的一部分。
答案 0 :(得分:2)
当我更改Android Target SDK时,不确定为什么这两个代码区域会破坏,因为它们只是Microsoft.WindowsAzure组件的一部分。
根据您的描述,我认为它会引用您引用的Azure Mobile Client SDK版本。
对于Azure Mobile Client SDK 3.1.0,您的客户端将从以下路径引用lib:
Microsoft.Azure.Mobile.Client.3.1.0\lib\monoandroid\Microsoft.WindowsAzure.Mobile.Ext.dll
您可以利用ILSpy检查LoginAsync
的扩展方法,如下所示:
对于Azure Mobile Client SDK 4.0.0-alpha-001,如果您的MonoAndroid> = 4.4,那么lib将在以下引用:
Microsoft.Azure.Mobile.Client.4.0.0-alpha-001\lib\monoandroid44\Microsoft.Azure.Mobile.Client.dll
对于Azure Mobile Client SDK 4.0.0,如果您的MonoAndroid> = 7.1,那么lib将在以下引用:
Microsoft.Azure.Mobile.Client\4.0.0\lib\monoandroid71\Microsoft.Azure.Mobile.Client.dll
我以前的项目是针对Android 6.0的,然后lib只会引用Microsoft.Azure.Mobile.Client.4.0.0\lib\netstandard1.4\Microsoft.Azure.Mobile.Client.dll
,并且LoginAsync
没有通过服务器流认证的扩展方法。
总之,从您的代码await client.LoginAsync(context, "facebook");
开始,您使用的是Server-managed authentication,我建议您在不升级Android SDK版本或使用最新Azure Mobile的情况下使用Azure Mobile Client SDK 3.1.0客户端SDK 4.0.0并将您的Android SDK版本升级到7.1或更高版本。
此外,代码client.LoginAsync(MobileServiceAuthenticationProvider.Facebook,{JObject token})
正在使用Client-managed authentication,此时,您的应用可以独立联系身份提供商,然后在使用您的Azure移动后端登录时提供返回的令牌。